# hello **Repository Path**: chiyoooo/hello ## Basic Information - **Project Name**: hello - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-11-06 - **Last Updated**: 2026-11-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ESP32-C3 Hello World 2026 CLASS 系列的第一块砖:一个**只靠串口就能验证整条链路**的最小 ESP32-C3 工程 (ESP-IDF 框架)。不接任何外设,上电后打印一句 `Hello world!`、芯片自身信息, 然后每 2 秒打一行心跳。 ## 它验证了什么 从电脑到芯片,整条链路一次跑通: ``` 代码 -> 编译工具链 -> USB(CH343) -> 烧录 -> 芯片启动 -> UART0 -> 串口监视器 ``` 后面 02_/03_/04_/05_ 的外设工程都建立在这条链路上。Hello World 跑不通,先别碰 外设 —— 否则分不清是硬件、串口还是业务代码的问题。 ## 目录结构 ``` hello/ ├── CMakeLists.txt # 工程入口: 引入 ESP-IDF 构建系统, 声明工程名 ├── sdkconfig.defaults # 芯片/Flash/控制台/优化等默认配置(首次配置时生效) ├── flash.ps1 # 一键: 激活环境 + 探测串口 + 编译 + 烧录 + 监视 ├── main/ │ ├── CMakeLists.txt # 注册 main 组件, 声明 REQUIRES │ └── main.c # 全部源码: 启动横幅 + 芯片信息 + 心跳循环 └── README.md ``` ## 环境要求 | 项目 | 本机值 | | --- | --- | | ESP-IDF | v5.5.4,安装在 `C:\esp\v5.5.4\esp-idf` | | 目标芯片 | `esp32c3`(单核 RISC-V,4MB Flash,WiFi + BLE) | | 串口 | 板载 CH343 USB 转串口,UART0,115200 波特率 | | 烧录口 | 一般是 COM32(以设备管理器为准,脚本会自动探测) | `flash.ps1` 通过 `IDF_ROOT` 环境变量找 ESP-IDF;不设就用默认的 `C:\esp\v5.5.4\esp-idf`。换机器时改 `-IdfRoot` 即可。 ## 怎么用 在本目录打开 **Windows PowerShell**(不要用 Git Bash,见文末「常见问题」): ```powershell .\flash.ps1 # 编译 + 烧录 .\flash.ps1 -Monitor # 烧完自动打开串口监视器,退出按 Ctrl+] .\flash.ps1 -BuildOnly # 只编译不烧录,先确认代码能过 .\flash.ps1 -Port COM7 # 手动指定串口 .\flash.ps1 -Erase # 烧前整片擦除 ``` 如果提示"禁止运行脚本": ```powershell powershell -ExecutionPolicy Bypass -File .\flash.ps1 ``` ### 手工方式(已经激活过 ESP-IDF 环境的终端) ```powershell idf.py set-target esp32c3 # 只需第一次 idf.py build idf.py -p COM32 flash monitor # 监视器退出: Ctrl+] ``` ## 实测输出(本机 COM32 板,已烧录验证) 烧录后从串口抓到的真实日志(节选,省略了 IDF 启动段前 20 行): ``` I (177) app_init: ELF file SHA256: beaa9a4af... I (181) app_init: ESP-IDF: v5.5.4 I (193) efuse_init: Chip rev: v0.4 I (227) spi_flash: detected chip: boya I (229) spi_flash: flash io: dio I (275) main_task: Calling app_main() +------------------------------------------+ | ESP32-C3 Hello World | +------------------------------------------+ ESP-IDF : v5.5.4 build time : Nov 6 2026 11:11:34 console : UART0 @ 115200 baud -------------------------------------------- chip : esp32c3, 1 core(s), RISC-V silicon : v0.4 features : WiFi BLE flash : 4 MB external MAC (base) : 14:63:93:FA:49:E8 min heap : 330008 bytes Hello world! [ 0 s] Hello world! #1 [ 2 s] Hello world! #2 [ 4 s] Hello world! #3 ... ``` `features` 里有没有 `embedded-flash`、`flash` 那行写 embedded 还是 external, 取决于板子用的是内置还是**外置** Flash:本板是外置 4MB(`boya` 颗粒), 程序自己读出来,不需要改代码。 看到 `Hello world!` 和每 2 秒一次的心跳,就说明:**工具链、USB 串口、 烧录、芯片启动、控制台输出,全链路 OK**。 ## 代码要点 - **入口是 `app_main()`**,不是 C 的 `main()` —— 它由 FreeRTOS 在启动后的 一个任务里调用;函数返回后 `main` 任务会被删除,所以真实项目里我们让主循环 `while (true)` 永不返回。 - **`printf` 走的就是控制台 UART0**,不经过 ESP_LOG;`CONFIG_ESP_CONSOLE_UART_*` 决定了它从哪个串口出来、多少波特率。 - **芯片信息是从芯片自己读的**:型号/核心数来自 `esp_chip_info()`,Flash 容量 来自 `esp_flash_get_size()`(以镜像头为准),MAC 来自 eFuse 里的出厂值。 换板子时这几行就是"这台机器到底是谁"的凭据。 - **`vTaskDelay(pdMS_TO_TICKS(ms))`** 是不占 CPU 的延时;不要用忙等。 ## 想改一点什么 | 想改的 | 改哪里 | | --- | --- | | 心跳间隔 | `main/main.c` 里的 `HEARTBEAT_MS`(默认 2000ms) | | 串口波特率 | `sdkconfig.defaults` 的 `CONFIG_ESP_CONSOLE_UART_BAUDRATE`,然后删掉 `sdkconfig` 重新配置,或直接 `idf.py menuconfig` | | Flash 容量(比如板子只有 2MB) | `sdkconfig.defaults` 的 `CONFIG_ESPTOOLPY_FLASHSIZE_*` | | 加板载 LED 闪烁 | `main/main.c` 末尾有现成说明(DevKitM-1 的 RGB 灯是 GPIO8,低电平点亮) | 配置改完后如果 `sdkconfig` 不生效:删掉工程根目录的 `sdkconfig`,再跑一次 `.\flash.ps1`(会重新 `set-target` 并读取 `sdkconfig.defaults`)。 ## 常见问题 **1. 串口什么都没打印** - 先看烧录是否成功,再看监视器是不是开在正确的 COM 口上; - USB CDC 板子和 CH343 板子的控制台口不一样,本板是 CH343 → COM32; - 烧完立刻没输出:按一下 RESET(或插拔 USB)再看,ESP32-C3 上电日志在很前面。 **2. 串口有乱码** - 波特率不对(默认 115200);或者监视器连的是错的串口。 **3. 烧录失败 / "Failed to connect"** - 关掉占用串口的程序(串口监视器、网页工具、Arduino IDE); - 没自动复位进下载模式时:**按住 BOOT 键,点一下 RESET,再松开 BOOT**; - COM 号不对:`.\flash.ps1 -Port COM7`。 **4. 报 `MSys/Mingw is not supported`** - 这是在 Git Bash / MSYS 终端里跑 PowerShell 脚本导致的。改用 Windows PowerShell 或 cmd 重新执行即可(`flash.ps1` 里也做了清理,但更推荐直接用 PowerShell)。 **5. 报了奇怪的编译错误** - `Remove-Item build -Recurse -Force` 删掉构建目录,再跑一次;ESP-IDF 的 CMake 缓存偶尔会因为换 target/换配置而错乱。 ## 下一步 - `02_ESP32C3_MPU6050_hello`:I2C 读 MPU6050,开始接外设 - `03_ESP32C3_MPU6050_ATTITUDE`:姿态解算 - `04_ESP32C3_TFLM` / `05_ESP32C3_AI_WAND`:TFLite Micro 推理与手势录制