` 本帖最后由 efans_96f886 于 2021-8-13 18:51 编辑
0x0. 开箱我拿到的试用设备是ESP32-C3-DevKitM-1(见下图左边),芯片和板子比右边的ESP32-WROOM-32更小。 上面两款芯片都是蓝牙、WIFI双模的,存储也差不多,不同的是ESP32-C3是RISCV架构(160mHZ),ESP32-WROOM是Xtensa架构(240mHZ)。
0x1. 安装环境(windows)接下来的开发和调试,无脑跟随文档就行: https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/get-started/index.html
我电脑上的ESP-IDF是2.6版本不支持ESP32-C3,因此需要升级,尝试直接升级旧版本,由于不清楚ESP32-C3需要用哪个github repo版本,我最终还是简单粗暴卸载了旧版本,重装下载安装了ESP32-C3文档中给出的版本(https://dl.espressif.com/dl/esp-idf/?idf=4.4,tool版本2.9,idf版本4.3),windows上下载esp-idf-tools-setup-offline-2.9.exe,直接一路点Next,这里我选择不安装Eclipse(因为Eclipse太难用),最后安装了工具链(.espressif目录)和idf框架代码(ESP-IDF目录):
最终在开始菜单打开ESP-IDF Powershell或者CMD命令行,启动的时候会自动添加很多环节变量。因此不需要再添加环境变量(不用运行export.bat或者export.ps1)。 用u***将设备连接电脑,win+x打开设备管理器,可以看到设备的串口。
用不同的串口工具连接看看效果: 正点原子的XCOM,不支持shell color有乱码,不支持二维码:
idf自带的串口工具:idf.py -p COM11 monitor,不支持二维码。
PuTTY:效果比较好。
不过目前的应用不支持串***互,看不出来哪个工具最好用。因此后面刷上需要通过串口读取数据的应用来进一步评测看下哪一种shell更合适。 如果不介意这点乱码,应该还是XCOM最强大。
0x2. 编译和刷机接下来我们用自己的应用覆盖掉默认固件。 这里我直接复制例程到项目目录:
- # 开始菜单打开ESP32 Powershell
- cd G:IoTesp32-c3
- xcopy /e /i D: oolsIoTToolsESP-IDFexamplesget-startedhello_world hello_world
- xcopy /e /i D: oolsIoTToolsESP-IDFexamplesget-startedlink blink
复制代码
编译项目(idf.py build): windows下大约需要1min就全部build完Hello World。
- // 设置开发板
- PS G:IoTesp32-c3hello_world> idf.py set-target esp32c3
- // 编译
- PS G:IoTesp32-c3hello_world> idf.py build
- Executing action: all (aliases: build)
- Running ninja in directory g:iotesp32-c3hello_worlduild
- Executing "ninja all"...
- [2/961] Generating ../../partition_table/partition-table.bin
- Partition table binary generated. Contents:
- *******************************************************************************
- # ESP-IDF Partition Table
- # Name, Type, SubType, Offset, Size, Flags
- nvs,data,nvs,0x9000,24K,
- phy_init,data,phy,0xf000,4K,
- factory,app,factory,0x10000,1M,
- *******************************************************************************
- [92/961] Building C object esp-idf/wpa_supplicant/CMakeFiles/__idf_wpa_supplicant.dir/src/crypto/aes-ctr.c.obj
复制代码
刷机运行项目:
- // 刷机:如果USB只接一个设备就不需要指定串口 (idf.py -p COM11 flash)
- PS G:IoTesp32-c3hello_world> idf.py flash
- // 连接串口看log
- PS G:IoTesp32-c3hello_world> idf.py monitor
复制代码
看hello wold代码,每隔10s重启一次。在不涉及到汇编的时候,看起来和之前的Xtensa架构的ESP32-S2设备开发没啥区别。这个demo不停的重启,有点伤设备,还是立刻刷成别的固件:)
- #include
- #include "sdkconfig.h"
- #include "freertos/FreeRTOS.h"
- #include "freertos/task.h"
- #include "esp_system.h"
- #include "esp_spi_flash.h"
- void app_main(void)
- {
- printf("Hello world!
- ");
- /* 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" : "");
- printf("silicon revision %d, ", chip_info.revision);
- printf("%dMB %s flash
- ", spi_flash_get_chip_size() / (1024 * 1024),
- (chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");
- printf("Minimum free heap size: %d bytes
- ", esp_get_minimum_free_heap_size());
- for (int i = 10; i >= 0; i--) {
- printf("Restarting in %d seconds...
- ", i);
- vTaskDelay(1000 / portTICK_PERIOD_MS);
- }
- printf("Restarting now.
- ");
- fflush(stdout);
- esp_restart();
- }
复制代码
0x3. 点亮LED 选择例子:examplesperipherals
mtled_strip 首先尝试点亮板子自带的LED。
- # 编译刷机
- idf.py set-target esp32c3
- idf.py build flash monitor
复制代码
发现灯不闪。需要修改GPIO配置:
- idf.py menuconfig
- # 选择 Example Configuration
- # 修改以下配置。也可直接修改sdkconfig
- CONFIG_EXAMPLE_RMT_TX_GPIO=8
- CONFIG_EXAMPLE_STRIP_LED_NUMBER=1
复制代码
再次刷机发现灯疯狂的闪,闪瞎我狗眼。因此需要修改频率:
- // led_strip_main.c Line:20
- #define EXAMPLE_CHASE_SPEED_MS (100) // <---- 由10改成100,0.1s闪一次
- // led_strip_main.c Line:110
- // vTaskDelay(pdMS_TO_TICKS(EXAMPLE_CHASE_SPEED_MS));
复制代码
接下来换外接LED继续点灯: 使用例程:examplesget-startedlink 直接编译刷机。默认配置BLINK_GPIO 是GPIO5,因此接到数字5那里(GPIO5),另一根接到GND(接地)那里,就能什么都不改自己闪:
`
|