启明云端作为乐鑫代理,一直都尽最大可能做完善的教程能帮助更多的开发小伙伴快速上手各种应用;今天小明为大家带来ESP32-C3IO口控制灯的应用及串口通信示例,每一个步骤我们都分享出来供小伙伴们参考!

1.指定芯片
编译前应注意应先设置目标芯片 设置指令 :
idf.py set-target esp32c3
注意,此操作将清除并初始化项目之前的编译和配置(如有)

否则将报错 如下 :

默认配置为ESP32如果使用的是ESP32的话则不需要这句
idf.py set-target esp32c3

2.烧入已经生成的文件


编译, idf.py -p COM5 flash 烧入

3.硬件 连接

接线 : 18脚接rgb灯的 G段显绿色 19接rgb灯的B段
显示为青色, 这里的18可以和19调换, 因为点亮的时间与强度一致
4.GPIO初始化
接着最简单也是最重要的IO初始化及输出

gpio_config_t io_conf;   //创建io配置结构体
io_conf.intr_type = GPIO_INTR_DISABLE;  //禁用中断
io_conf.mode = GPIO_MODE_OUTPUT;    //设置为输出模式
io_conf.pin_bit_mask = GPIO_OUTPUT_PIN_SEL;
//io脚位掩码, 用位运算 左移到需要改变的位进行操作
//#define GPIO_OUTPUT_PIN_SEL  ((1ULL<<GPIO_OUTPUT_IO_0/*18*/) |  \
//(1ULL<<GPIO_OUTPUT_IO_1/*19*/))
//该宏便是先将1强转类型为无符号长整型左移再或运算使得18,19一起配置为输出
io_conf.pull_down_en = 0;   //下拉模式使能 关闭
io_conf.pull_up_en = 0;     //上拉模式使能 打开
gpio_config(&io_conf);      //gpio配置

5.输出控制
输出已经配置好了

gpio_set_level(GPIO_OUTPUT_IO_0, 0); //18脚设置为低电平gpio_set_level(GPIO_OUTPUT_IO_1, 1); //19脚设置为高电平

6.接收初始化
这个时候输出已经好了,接着便是接收

//interrupt of rising edgeio_conf.intr_type = GPIO_INTR_POSEDGE;  //设置上升沿中断//bit mask of the pins, use GPIO4/5 hereio_conf.pin_bit_mask = GPIO_INPUT_PIN_SEL;  //io脚位掩码, 用位运算 左移到需要改变的位进行操作//set as input mode
io_conf.mode = GPIO_MODE_INPUT; //设置为输入模式//enable pull-up modeio_conf.pull_up_en = 1; //上拉模式使能 打开gpio_config(&io_conf);

接收有中断接收和读取IO电压接收
中断接收优点 : 相对于实时读取
读取IO优点 : 简单易操作

7.获取输入电平
读取IO :

Int IO0_level = gpio_get_level( GPIO_INPUT_IO_0);   /*返回值为读取的IO_0的高低电平*/

中断加线程 :

 //change gpio intrrupt type for one pin
gpio_set_intr_type(GPIO_INPUT_IO_0, GPIO_INTR_ANYEDGE);
//改变一个pin的 中断类型//create a queue to handle gpio event from isrgpio_evt_queue = xQueueCreate(10, sizeof(uint32_t));    //创建一个新的队列//start gpio taskxTaskCreate(gpio_task_example, "gpio_task_example", 2048, NULL, 10, NULL);  //开线程跑函数gpio_task_example
//install gpio isr servicegpio_install_isr_service(ESP_INTR_FLAG_DEFAULT);    //为相应的 GPIO 引脚添加 ISR 处理程序//hook isr handler for specific gpio pingpio_isr_handler_add(GPIO_INPUT_IO_0, gpio_isr_handler, (void*) GPIO_INPUT_IO_0);   //为相应GPIO添加ISR处理程序//hook isr handler for specific gpio pingpio_isr_handler_add(GPIO_INPUT_IO_1, gpio_isr_handler, (void*) GPIO_INPUT_IO_1);   //为相应GPIO添加ISR处理程序//remove isr handler for gpio number.gpio_isr_handler_remove(GPIO_INPUT_IO_0);       //删除相应的ISR程序 这里测试对应函数功能//hook isr handler for specific gpio pin againgpio_isr_handler_add(GPIO_INPUT_IO_0, gpio_isr_handler, (void*) GPIO_INPUT_IO_0);   //再次添加
static void IRAM_ATTR gpio_isr_handler(void* arg)
{uint32_t gpio_num = (uint32_t) arg;xQueueSendFromISR(gpio_evt_queue, &gpio_num, NULL);
}static void gpio_task_example(void* arg)
{uint32_t io_num;
for(;;)
{if(xQueueReceive(gpio_evt_queue, &io_num, portMAX_DELAY)) {
  printf("GPIO[%d] intr, val: %d\n", io_num, gpio_get_level(io_num));}}
}

具体的demo在已下载好的 esp-idf\examples\peripherals\gpio\gpio\generic_gpio

1.再次提醒
编译前应注意应先设置目标芯片 设置指令 :
idf.py set-target esp32c3
注意,此操作将清除并初始化项目之前的编译和配置(如有)

否则将报错 如下 :

默认配置为ESP32如果使用的是ESP32的话则不需要这句
idf.py set-target esp32c3
这里可以看见TX 发送数据口 4
RX 接收数据 5

2.查看端口号
连接设备 :
Windows 环境 打开设备管理器 找到
按下windows按键/鼠标单击左小角

键盘输入设备管理器

找到 COM和LPT选项

当COM口未连接设备不会有该选项
3.软件讲解
idf.py -p (PORT) monitor
这个PORT即端口号, 如上则是COM3 命令 : idf.py -p COM3 monitor
也可以使用简单的串口调试工具
链接:https://pan.baidu.com/s/1zD5JzLBzn72FNymSp4gSAw
提取码:1234

也可以运行以下命令,一次性执行构建、烧录和监视过程:
idf.py -p PORT flash monitor

4.硬件连接

设备连接方式 : 需要用到一个TTL转 USB 模块
比如此转换是TTL转TYPE-C母 在接跟TYPE-C公转USB公接入电脑

即将发送数据的TX ( 4脚) 连接到转换模块的 RX
接收数据的RX( 5脚) 连接到转换模块的TX ( 发送端)

实现原理 :
假设ESP32-C3的printf 的串口为UART_1
ESP32-C3新配置的串口为 UART_2

5.功能实现

电脑通过串口UART_2发送数据到ESP32-C3


ESP32-C3 使用printf 函数 通过UART1打印给电脑 printf (“%s\n”, data);

并且通过串口打印到电脑的串口,即可在串口调试小助手上接收
uart_write_bytes( ECHO_UART_PORT_NUM, (const char *) data, len);


6.Printf 函数测试
第一个demo “hello_word”
即使用printf 函数 向与电脑连接的串口发送数据
好处 : 方便快捷
考虑到线程安全,在FREERTOS中尽量使用ESP_LOGX来输出调试信息和打印消息

/* Print chip information */esp_chip_info_t chip_info;   //芯片信息结构体esp_chip_info(&chip_info); //获取芯片信息函数,只需将结构体地址传入printf("This is %s chip with %d CPU core(s), WiFi%s%s, ",CONFIG_IDF_TARGET,chip_info.cores,  /*芯片名称*/(chip_info.features & CHIP_FEATURE_BT) ? "/BT" : "",(chip_info.features & CHIP_FEATURE_BLE) ? "/BLE" : "");

7.两个串口数据收发代码讲解
接着

uart_config_t uart_config = {.baud_rate = ECHO_UART_BAUD_RATE,   /*串口波特率 */.data_bits = UART_DATA_8_BITS,      /*串口八位数据*/.parity    = UART_PARITY_DISABLE,   /*禁用串口奇偶校验*/.stop_bits = UART_STOP_BITS_1,      /*串口停止位1*/.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,  /*串口数据流控制禁用*/.source_clk = UART_SCLK_APB,    /*时钟源选择来自于APB的时钟*/};  //串口配置结构体int intr_alloc_flags = 0;

配置第二个串口尝试使用两个串口环路数据测试
下面串口demo路径为 : esp-idf\examples\peripherals\uart\uart_echo

//串口驱动下载函数 ( TX环形缓冲区, RX环形缓冲区, 事件队列句柄和大小, 分配中断的标志)ESP_ERROR_CHECK(uart_driver_install(ECHO_UART_PORT_NUM, BUF_SIZE * 2, 0, 0, NULL, intr_alloc_flags)); //串口配置函数 (  串口号, 串口配置结构体)ESP_ERROR_CHECK(uart_param_config(ECHO_UART_PORT_NUM, &uart_config));//设置通信IO函数 ( 波特率, TXIO, RXIO, RTSIO, CTSIO) ESP_ERROR_CHECK(uart_set_pin(ECHO_UART_PORT_NUM, ECHO_TEST_TXD, ECHO_TEST_RXD, ECHO_TEST_RTS, ECHO_TEST_CTS));
// Configure a temporary buffer for the incoming datauint8_t *data = (uint8_t *) malloc(BUF_SIZE);  //创建一个大小为BUF_SIZE的指针
while (1) {bzero ( data, BUF_SIZE);  //清空指针内残留// Read data from the UART 从串口读取数据
  int len = uart_read_bytes(ECHO_UART_PORT_NUM, data, BUF_SIZE, 20 / portTICK_RATE_MS);// if ( *data != 0) //如果不是默认值则认为该数据为正确值{printf ( "%s\n", data);}// Write data back to the UARTuart_write_bytes( ECHO_UART_PORT_NUM, (const char *) data, len);}

循环读写, 此读函数不阻塞

8.串口IO查找
找到串口设置的TX RX ( 我这用的软件是VS code , 英文版的右击是 go to definition 推荐选中按f12)

好了,今天小明就为小伙伴们分享到这里了,想要了解更多乐鑫相关技术问题,可以关注我们!

启明云端分享|ESP32-C3 IO口控制灯的应用及串口通信示例相关推荐

  1. 启明云端分享|ESP32在开发环境时,环境搭建及应用、软件平台时常遇到的问题答疑(FAQ)

    问题描述及解答: 1.环境搭建 安装环境出现can not create a virtual environment. 该错误是因为新版环境需要安装虚拟python环境,出现错误通常有两个原因. 1. ...

  2. 启明云端分享|ESP32摄像头应用方案常遇到的问题

    提示:启明云端从2013年起就作为Espressif(乐鑫科技)大中华区合作伙伴,我们不仅用心整理了你在开发过程中可能会遇到的问题以及快速上手的简明教程供开发小伙伴参考.同时也用心整理了乐鑫新产品.新 ...

  3. 乐鑫代理启明云端分享| ESP32系列教程之五: Eclipse搭建esp-idf环境

    提示:前面小明已经为大家分享了4个章ESP32系列教程,今天继续为大家分享,希望大家多多关注我们!启明云端作为乐鑫代理,一直希望能帮到更多的开发者能快速上手乐鑫系列芯片的开发. 前言 提示:本文档为E ...

  4. 乐鑫代理-启明云端分享|ESP32与ESP32-C3功耗对比篇(一)

    ESP32: ESP32在烧录成功hello_world测试固件时的功耗:32mA ESP32-C3: ESP32-C3在烧录成功hello_world测试固件时的功耗:26.3mA 虽然当前的WIF ...

  5. 启明云端分享|ESP32/ESP8266 烧录器 USB-TTL转接板开发工具ESP-T01的使用教程,视频可参考B站

    提示:根据启明云端ESP32/ESP8266 烧录器 USB-TTL转接板开发工具ESP-T01编写的使用教程. 启明云端ESP-T01 烧录器,这是一款为了解决新老用户对ESP系列模组"烧 ...

  6. 乐鑫代理启明云端分享|ESP32 系列教程之四: Windows 搭建 esp-idf 环境

    提示: 本文档为 ESP32 教程系列,旨在为客户进行 ESP32 系列芯片开 发提供环境搭建.工程示例演示等方面的参考文档及视频演示,降低 ESP32 系列芯片.模组开发的入门难度. ESP32 教 ...

  7. 乐鑫代理启明云端分享|ESP32系列教程之三: VS Code远程连接Linux

    提示:本文档为ESP32教程系列,旨在为客户进行ESP32系列芯片开发提供环境搭建.工程示例演示等方面的参考文档及视频演示,降低ESP32系列芯片.模组开发的入门难度. ESP32教程系列文档主要参考 ...

  8. 乐鑫代理-启明云端分享ESP32系列教程之二:Linux搭建esp-idf环境

    提示:此教程依据乐鑫官方的ESP32入门教程总结而来,仅供个人参考学学习,如有错误,欢迎批评指正.乐鑫官方参考: 乐鑫官方文档地址 1.搭建esp-idf环境 1.1安装虚拟机与Ubuntu 未安装请 ...

  9. 启明云端分享|直接用ESP32-S2和ESP32-C3驱动1.54寸串口屏,有哪些区别呢,他们的亮点又有哪些呢

    以上两组图分别是ESP32-S2和ESP32-C3驱动1.54寸串口屏的规格尺寸(后面我们统称为WT-1.54S系列和WT-1.54C系列) 首先 WT-1.54S系列和WT-1.54C系列刷新频率有 ...

最新文章

  1. 外包:卡卡软件简要思路
  2. php中echo js代码,JS有没类似PHP的echo效果?
  3. mysql 备份工具xtrabackup全备与还原图解
  4. 【已解决】Exception in thread “main“ java.lang.NullPointerException
  5. pytorch得到中间层输出
  6. 管家婆财贸双全TOP系列服务器,管家婆财贸双全II
  7. 同一局域网入侵_如何入侵同一局域网的电脑
  8. android随机抽奖代码_随机抽奖生成器app下载|随机抽奖生成器软件下载_v1.0_9ht安卓下载...
  9. 免费医学统计软件——医统无忧智能统计软件(两组间比较:两独立样本t检验、非参数检验和卡方检验)操作说明和结果解读
  10. centos光盘修复引导_CentOS7修复安装
  11. 论大数据仓库的事务处理之法
  12. 融云即时通讯云学习笔记
  13. VCL界面控件DevExpress VCL发布v18.1.7|附下载
  14. 百度地图坐标转高德地图坐标
  15. Hibernate 中setResultTransformer使用
  16. shell一键部署mysql
  17. 门禁系统布线的十点注意事项
  18. 人民币大写与数字互转
  19. 华硕笔记本(UEFI)支持U盘启动
  20. Web安全之SSRF漏洞

热门文章

  1. 群集lvs—DR的配置及应用
  2. 让理科生沉默,让文科生落泪的文史综合题
  3. ResNext(2017)解读
  4. 写linux程序测试吞吐量,Linux下测试磁盘性能(IO、吞吐量)
  5. Spring选择哪种注入方式
  6. Spring BeanPostProcessor接口详细使用
  7. CompletableFuture API用法介绍(一)
  8. linux diff diffstat组合使用示例
  9. 开启及关闭go mod
  10. Scala主构造方法和辅助构造方法