ESP32-C3-LCDkit 基础入门
ESP32-C3-LCDkit 基础入门
nixgnauhcuy1 前言
上篇 ESP32-C3 开发环境搭建 提到了,我买了块乐鑫的 ESP32-C3-LCDkit 开发板,并且搭建好了环境,所以准备跑下 .\esp-idf\examples\get-started
的例程,试试基础的功能。
2 Get-Started
.\esp-idf\examples\get-started
目录下有三个例程,分别是 hello_world、sample_project、blink,所以我们简单分析并运行下这三个例程。
copy esp-idf 的 get-started 文件夹到自己的开发目录,这里我创建了个 esp_study 目录来存放,用于学习对应的 esp 例程。
2.1 hello_world
使用 vscode 打开 hello_world 工程,并且在 hello_world 根目录下保存工作区,并新建一个 .vscode
,存放该工作区项目配置和工具相关文件。
完成后,在 .vscode
创建 c_cpp_properties.json
,并填入下述内容:
1 | { |
这个目的主要是为该工程导入 esp-idf 的文件,防止看代码的时候没办法跳转,不知道函数具体实现。
上述内容填充完毕后,后续的两个工程都可以同样用该方式实现,后面就不赘述了,接下来看代码前,我们先配置一下工程,并让工程跑起来。
- 填充
c_cpp_properties.json
内容 - 连接设备,并设置 COM 端口
- 选择对应的芯片
- 点击火焰图标,该按钮会进行编译、烧录并且打开日志监控
- 查看输出内容
上述图片可以看出,实现的功能具体是打印了 Hello World!
、芯片型号及芯片的资源,随后延时计数 10S 最终调用软件复位接口,复位软件。
我们简单看下代码,
- 输出
Hello world!
- 调用
esp_chip_info
接口,获取芯片信息,先确定它获取了什么信息,定位到esp_chip_info_t chip_info
的结构体,它作为变量传入接口,
可以看出该结构体,定义了芯片型号、功能、版本、核心数,那么 esp_chip_info
这个接口,就是为了获取这些内容,我们跳转进去看看,
上面图片可以看到最终为传参填充的数据,不过版本号的获取,还调用了一个函数 efuse_hal_chip_revision
,同样的,跳转进去看看,函数最终返回了 efuse_hal_get_major_chip_version() * 100 + efuse_hal_get_minor_chip_version();
,为了减少大量图片的引用,所以我直接跳过到最后,
这里能看出,主要版本号和次要版本号都是从 EFUSE - rd_mac_spi_sys_5
寄存器中获取,关于乐鑫这款芯片的可以访问 EFUSE,里面有对应的 eFuse 管理器说明,我们只需要知道它是在 EFUSE BLOCK 寄存器中获取的就可以了。
在路径
.\esp-idf\components\efuse\esp32c3\
可以看到esp_efuse_table.csv
,它描述了 Efuse 的字段。
确定了芯片信息获取接口执行的内容后,这些打印的信息就简单多了。
- 调用
esp_flash_get_size
接口,这个很好理解,读取对应的 flash 大小,工程默认配置是 2M flash,所以输出的时候是不对的,需要去menuconfig
修改工程配置Serial flasher config
->Flash size
->4MB
。不过 esp32-c3-lcdkit 标注的是内部 4MBFlash,但其是相对于ESP32-C3-MINI-1 这个模组
,对于ESP32-C3
芯片来说,其实是外部的 Flash,所以输出的日志可以看到是外部 2Mb flash,这点一开始我存在疑惑,我也提交了对应的 PR,感谢乐鑫开发者的不吝指教。 - 调用
esp_get_minimum_free_heap_size
获取了剩余的堆的大小,这个暂时不深究,了解其作用就可以了。 - for 循环 10 次,每次延时 1S 并输出 log,最后调用
esp_restart
,进行复位。
2.2 sample_project
对于 sample_project
这个例程,可以跳过,不过官方推荐用该例程作为新项目的模板,并且这个例程的 main.c
的 app_main
没有任何操作。
2.3 blink
同 hello_world
一样,创建工作区、创建 c_cpp_properties.json
文件,完成后配置工程,让其跑起来先,
开发板上只有一个 RGB LED
,并没有普通的 LED 可以驱动,而且接到了芯片的 IO8 脚位,所以配置工程时,需要确定我们的 IO 口和对应 LED 类型是否正确,
- Blink LED type 需要勾选
RMT - Addressable LED
- Blink GPIO number 需要设置为
8
- Blink period in ms 默认即可。
确认无误后,点击右上方的保存,点击编译烧录并监控日志,
简单看下代码,
- 执行
configure_led
配置 LED 管脚 - 输出
Example configured to blink addressable LED!
,并且设置led_strip_config_t
结构体,填充当前使用的 IO 和最大的 LED 数,开发板上只有一颗,所以默认填充 1,配置 rmt 频率为 10MHz,RMT(Remote Control),本质是用于红外发送/接收红外遥控信号的,由于 RMT 模块的灵活性,还可以用来生成和接收许多相似类型的信号,这里不做深究,调用led_strip_new_rmt_device
接口,基于 RMT TX 通道来设置 led strip, - 配置完成后,while 循环中会定时翻转 LED,并输出
Turning the LED ON/OFF
,根据 Blink period 来延时翻转,翻转调用的blink_led
,ON
调用了led_strip_set_pixel(led_strip, 0, 16, 16, 16)
,设置对应的 RGB,并刷新显示,OFF
则调用led_strip_clear
清除,从而达到闪烁的效果。
最终效果如下:
3 结语
到这里,基本都没有问题了。过程中有什么不能理解的,可以留言告知我!有什么错误,也可以指出来告诉我~