# 前言
ESP32-C3模组是4月初发布上线的一款双模(==2.4GWiFi+BLE5.0==)的通信模块,博主手上的是一款外置2M Flash的型号ESP32-C3F:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210426091709572.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxMTE0MDkyMDc0NQ==,size_16,color_FFFFFF,t_70#pic_center)
**本文是在Linux 开发环境用的是乐鑫的ESP-IDF的<font color=#1e15d9>master<font color=#4D4D4D>分 支的SDK基础上做的二次开发。** 所以需要准备的软件:
Linux 开发环境(当然Windos也是可以的,请参考: [ESP-IDF编程指南](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/index.html#get-started-get-prerequisites).)
ESP-IDF: [master](https://github.com/espressif/esp-idf).(ESP-IDF的使用请参考 [ESP-IDF编程指南](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/index.html#linux-macos).)
**注意:** 在进行配置<font color=#e90827>menuconifg<font color=#> 的时候需要把 **Revision** 设置为<font color=#e90827>Rev2<font color=#>![在这里插入图片描述](https://img-blog.csdnimg.cn/20210426104540547.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxMTE0MDkyMDc0NQ==,size_16,color_FFFFFF,t_70)
**硬件准备:**
1、ESP32-C3F小开发板
2、VB01离线语音模块
3、WS2812 RGB灯条
# 一、<font color=#19b2f2>新建工程文件
把ESP-IDF中的一个空例程复制到自己工程目录中,空例程在ESP-IDF中的路径如下:
```c
.../esp=idf/examples/get-started/sample_project
```
主函数文件就在该目录下的:<font color=#e90827>main<font color=#>文件夹中的main.c
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210426114719725.png#pic_center)
# 二、<font color=#1da306>WS2812<font color=#f91454>R<font color=#14f93f>G<font color=#0d2efa>B<font color=#>驱动
WS2812的驱动其实乐鑫的ESP-IDF中就做有相关的例程:<font color=#e90827>.../examples/peripherals/rmt/led_strip<font color=#>,这个例程使用了RMT红外驱动,还连接了les_strip 驱动库(库路径:..../examples/common_components/led_strip)。但是那个例程无法驱动WS2812灯条,但是它的库却可以使用,所以要移植一下这个库。
## 1.led_strip 驱动库移植
在main文件夹的同级目录下创建一个名为<font color=#e90827>**compornents**<font color=#>的文件夹:
```c
mkidr compornents
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021042611570337.png#pic_center)
然后把<font color=#e90827>**/examples/common_components/** <font color=#>下的 **led_strip** 文件夹全部复制到==刚刚创建的compornents文件夹中== 。并且在main.c中引用以下头文件:
```c
#include "driver/rmt.h"
#include "led_strip.h"
#include "esp_system.h"
#include "esp_log.h"
```
## 2.初始化WS2812 灯条
定义RMT发送管脚和频道及灯珠个数的宏
```
#define RMT_TX_NUM 3 //发送口
#define RMT_TX_CHANNEL RMT_CHANNEL_0//发送频道
#define LED_STRIP_NUM 24//灯珠数量
```
```c
void init_led()
{
rmt_config_t config = RMT_DEFAULT_CONFIG_TX(RMT_TX_NUM, RMT_TX_CHANNEL);
// set counter clock to 40MHz
config.clk_div = 2;
ESP_ERROR_CHECK(rmt_config(&config));
ESP_ERROR_CHECK(rmt_driver_install(config.channel, 0, 0));
// install ws2812 driver
led_strip_config_t strip_config = LED_STRIP_DEFAULT_CONFIG(24, (led_strip_dev_t)config.channel);
strip = led_strip_new_rmt_ws2812(&strip_config);
if (!strip)
{
ESP_LOGE(TAG, "install WS2812 driver failed");
}
// Clear LED strip (turn off all LEDs)
ESP_ERROR_CHECK(strip->clear(strip, 100));
}
```
## 3.设置RGB颜色的函数
缓存颜色的结构体
```json
struct WS2812_COLOR{
uint32_t red;
uint32_t green ;
uint32_t blue;
};
struct WS2812_COLOR WS2812_RGB;
```
```c
void set_rgb(uint16_t Red, uint16_t Green, uint16_t Blue)
{
for (int i = 0; i < LED_STRIP_NUM; i++)
{
strip->set_pixel(strip, i, Red, Green, Blue);//设置颜色
}
WS2812_RGB.red = Red;
WS2812_RGB.green = Green;
WS2812_RGB.blue = Blue;
strip->refresh(strip, 10);
}
```
# 三、<font color=#1558ee>UART 串口驱动与VB01通信
UART通信同样也可以使用ESP-IDF的example,参考的例程在:**examples/peripherals/uart/uart_async_rxtxtasks** 目录之下。这个例程使用了**FreeRTOS**来管理UART的发送函数和接收函数,博主也照样使用了**freeRTOS** ,<font color=#999AAA >UART驱动这里只是使用了**FreeRTOS** 创建任务,并没有使用太多**FreeRTOS**的各种功能,所以对于不太熟悉**FreeRTOS** 的同学也不要怕。<font color=#>
## 1.串口初始化配置
同样的,先要引用一下相关头文件
```
/*********RTOS Handle-file****************/
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/event_groups.h"
/*********UART Handle-file*****************/
#include "driver/gpio.h"
#include "driver/uart.h"
```
串口初始化配置函数:
```c
void UART_Init(void){
const uart_config_t uart_config = {
.baud_rate =38400, //波特率
.data_bits = UART_DATA_8_BITS,//数据位
.parity = UART_PARITY_DISABLE,//校验位
.stop_bits = UART_STOP_BITS_1,//停止位
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,//流控制
.source_clk = UART_SCLK_APB,//时钟
};
// We won't use a buffer for sending data.
uart_driver_install(UART_NUM_1, RX_BUF_SIZE * 2, 0, 0, NULL, 0);
uart_param_config(UART_NUM_1, &uart_config);
uart_set_pin(UART_NUM_1, TXD_PIN, RXD_PIN, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
}
```
## 2.串口接收任务创建
在主函数中初始化UART之后,就创建串口的接收数据的任务,提高数据接收的速度:
```c
//开启串口接收任务
xTaskCreate(uartRxTask, "uart_rx_task", 1024*3, NULL, 4, NULL);
```
**任务函数:**
```c
static void uartRxTask(void *arg)
{
static const char *RX_TASK_TAG = "RX_TASK";
esp_log_level_set(RX_TASK_TAG, ESP_LOG_INFO);
uint8_t *data=(uint8_t *)malloc(RX_BUF_SIZE+1);
while (1) {
const int rxBytes = uart_read_bytes(UART_NUM_1, data, RX_BUF_SIZE, 1000 / portTICK_RATE_MS);
if (rxBytes > 0) {
data[rxBytes] = 0;
ESP_LOGI(RX_TASK_TAG, "Read %d bytes: '%s'", rxBytes, data);
memset(cJson_data, 0, sizeof(cJson_data));
uartControlLedStrip(uartDataHandle(data)); //设置灯条颜色
ESP_LOG_BUFFER_HEXDUMP(RX_TASK_TAG, data, rxBytes, ESP_LOG_INFO);
}
}
free(data);
}
```
<font color=#10bcba>**说明**:<font color=#>
uartControlLedStrip函数和uartDataHandle函数是博主自己写一个串口数据处理函数,目的是把串口接收的数据中提取控制RGB的指令或者数据,各位同学可通过自己的需求去写这样的函数,比如提取指令ID号,只是用一些字符串操作的函数就可以了。
# 四、<font color=#d1260a>WiFi 配置连接
WiFi的配置连接极为简单,不需要些配置函数,也不需要写初始化函数,需要连接的WiFi名称和密码都可以通过<font color=#d1260a>menuconfig<font color=#>来配置。因为ESP-IDF的例程中,已经写好了相关的配置文件,只需要简单的修改就可以配置连接WiFi�
没有合适的资源?快使用搜索试试~ 我知道了~
资料收集:ESP32-C3-WS2812(IDF+VScode).rar
共77个文件
readme:9个
txt:8个
cpp:7个
需积分: 5 0 下载量 99 浏览量
2024-10-24
15:49:04
上传
评论
收藏 3.5MB RAR 举报
温馨提示
241024
资源推荐
资源详情
资源评论
收起资源包目录
ESP32_C3_WS2812(IDF+VScode).rar (77个子文件)
ESP32_C3_WS2812(IDF+VScode)
ESP32DLEDController-main
.editorconfig 420B
CMakeLists.txt 158B
.vscode
c_cpp_properties.json 838B
settings.json 44B
tasks.json 7KB
launch.json 244B
.github
workflows
builder-41.yml 1KB
src
DLEDController.cpp 6KB
DStripData.h 2KB
DLEDController.h 3KB
DStripData.cpp 1KB
LICENSE-GPLv3.txt 34KB
.gitignore 133B
example
CMakeLists.txt 231B
action-build.sh 207B
sdkconfig.defaults 173B
.gitignore 69B
main
CMakeLists.txt 148B
colorutils.h 4KB
main.cpp 3KB
README.md 3KB
[CSDN]安信可ESP32-C3模组阿里云远程控制WS2812RGB灯条(基于ESP-IDF的SDK).png 2.9MB
ESP32-C3-WS2812-8X8-main
C3-WS2812-8x8-Basic
include
README 1KB
lib
README 1KB
src
main.cpp 891B
C3-WS2812-8x8-Basic.lnk 1KB
platformio.ini 224B
test
README 518B
.gitignore 23B
.gitignore 5B
Documents
STL
WS2812-8X8-LuatC3-20240709.7z 34KB
WS2812-8X8-50-Metal-Board-PartBody.7z 239KB
WS2812B-8x8-6565-Board-PartBody.7z 109KB
README.md 79B
C3-WS2812-8x8-Display
include
README 1KB
lib
README 1KB
src
main.cpp 4KB
platformio.ini 282B
test
README 518B
.gitignore 23B
C3-WS2812-8x8-WiFi
include
README 1KB
lib
README 1KB
src
main.cpp 2KB
platformio.ini 224B
test
README 518B
.gitignore 23B
ESP32DLEDController-main.zip 26KB
ESP32-C3-WS2812-8X8-main.zip 398KB
ESP32-C3ControuWs2812-master.zip 57KB
ESP32-C3ControuWs2812-master
CMakeLists.txt 457B
.vscode
c_cpp_properties.json 516B
settings.json 425B
Makefile 185B
components
led_strip
include
led_strip.h 4KB
CMakeLists.txt 161B
component.mk 0B
led_strip_rmt_ws2812.c 7KB
README.md 659B
path.sh 95B
rsa.pub 566B
main
CMakeLists.txt 75B
component.mk 145B
build
CMakeFiles
cmake.check_cache 85B
CMakeOutput.log 122KB
3.16.3
CompilerIdC
CMakeCCompilerId.c 20KB
a.out 16KB
CMakeDetermineCompilerABI_CXX.bin 16KB
CMakeCXXCompiler.cmake 5KB
CMakeSystem.cmake 398B
CMakeCCompiler.cmake 2KB
CMakeDetermineCompilerABI_C.bin 16KB
CompilerIdCXX
CMakeCXXCompilerId.cpp 20KB
a.out 16KB
CMakeCache.txt 14KB
main.c 18KB
README.md 17KB
rsa 3KB
共 77 条
- 1
资源评论
Naiva
- 粉丝: 3w+
- 资源: 251
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功