diff --git a/README.md b/README.md index 969b8af..94146e1 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,6 @@ 本教程共八个章节,三个阶段:基础(1-3),实践(4),进阶(5-8) 其中基础章节一定要确保自己掌握,实践和进阶部分推荐按照个人需求进行选学。 -
### 修订历史: @@ -44,11 +43,11 @@ | -------------- | ---------------------- | :--: | :--: | :--: | | 一、认识ESP32 | 1.1 ESP32介绍 | ✔ | | 无 | | 一、认识ESP32 | 1.2 ESP32开发环境搭建 | ✔ | | 无 | -| 一、认识ESP32 | 1.3 初试ESP32-HelloWorld | | | | -| 二、IDF基础与工具使用 | 2.1 ESP32工程结构及构建 | | | | -| 二、IDF基础与工具使用 | 2.2 ESP-IDF项目配置 | | | | -| 二、IDF基础与工具使用 | 2.3 ESP-IDF自定义组件 | | | | -| 二、IDF基础与工具使用 | 2.4 ESP-IDF组件管理器 | | | | +| 一、认识ESP32 | 1.3 初试ESP32-HelloWorld | ✔ | | | +| 二、IDF基础与工具使用 | 2.1 ESP32工程结构及构建 | ✔ | | | +| 二、IDF基础与工具使用 | 2.2 ESP-IDF项目配置 | ✔ | | | +| 二、IDF基础与工具使用 | 2.3 ESP-IDF自定义组件 | ✔ | | | +| 二、IDF基础与工具使用 | 2.4 ESP-IDF组件管理器 | ✔ | | | | 三、FreeRTOS基础 | 3.1 FreeRTOS概述 | | | | | 三、FreeRTOS基础 | 3.2 FreeRTOS多任务与任务管理 | | | | | 四、外设学习 | 4.1.1 GPIO入门 | | | | diff --git a/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102173000.png b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102173000.png new file mode 100644 index 0000000..f93bcff Binary files /dev/null and b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102173000.png differ diff --git a/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102173106.png b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102173106.png new file mode 100644 index 0000000..469ad3d Binary files /dev/null and b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102173106.png differ diff --git a/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102174121.png b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102174121.png new file mode 100644 index 0000000..b6a8fb0 Binary files /dev/null and b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102174121.png differ diff --git a/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102174640.png b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102174640.png new file mode 100644 index 0000000..7337eab Binary files /dev/null and b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102174640.png differ diff --git a/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102175311.png b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102175311.png new file mode 100644 index 0000000..35405be Binary files /dev/null and b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102175311.png differ diff --git a/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102180011.png b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102180011.png new file mode 100644 index 0000000..28e9baa Binary files /dev/null and b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102180011.png differ diff --git a/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102180134.png b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102180134.png new file mode 100644 index 0000000..daad4ff Binary files /dev/null and b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102180134.png differ diff --git a/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102180251.png b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102180251.png new file mode 100644 index 0000000..b3cdfee Binary files /dev/null and b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102180251.png differ diff --git a/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102180455.png b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102180455.png new file mode 100644 index 0000000..4dea566 Binary files /dev/null and b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102180455.png differ diff --git a/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102181113.png b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102181113.png new file mode 100644 index 0000000..7101154 Binary files /dev/null and b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102181113.png differ diff --git a/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102181325.png b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102181325.png new file mode 100644 index 0000000..1d5be6b Binary files /dev/null and b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102181325.png differ diff --git a/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102181750.png b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102181750.png new file mode 100644 index 0000000..e42c82c Binary files /dev/null and b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102181750.png differ diff --git a/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102183320.png b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102183320.png new file mode 100644 index 0000000..6c10972 Binary files /dev/null and b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102183320.png differ diff --git a/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102184124.png b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102184124.png new file mode 100644 index 0000000..30c6514 Binary files /dev/null and b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102184124.png differ diff --git a/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102184434.png b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102184434.png new file mode 100644 index 0000000..4a17455 Binary files /dev/null and b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102184434.png differ diff --git a/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102185145.png b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102185145.png new file mode 100644 index 0000000..9af1e7b Binary files /dev/null and b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102185145.png differ diff --git a/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102185354.png b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102185354.png new file mode 100644 index 0000000..40ac423 Binary files /dev/null and b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102185354.png differ diff --git a/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102185705.png b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102185705.png new file mode 100644 index 0000000..26d41e9 Binary files /dev/null and b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/attachments/20250102185705.png differ diff --git a/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/初试ESP32-HelloWorld.md b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/初试ESP32-HelloWorld.md index e69de29..549a13e 100644 --- a/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/初试ESP32-HelloWorld.md +++ b/docs/01.认识ESP32/1.3-初试ESP32-HelloWorld/初试ESP32-HelloWorld.md @@ -0,0 +1,126 @@ +本节介绍ESP32开发的基本流程,介绍代码编译,烧录,以及查看串口监视器等常用命令,引导大家学会使用idf.py工具。此部分也可以参考官方文档:[IDF 前端工具 - idf.py](https://docs.espressif.com/projects/esp-idf/zh_CN/v5.2.3/esp32/api-guides/tools/idf-py.html) + +# 一、常用idf.py命令介绍 + + +- 创建工程:`idf.py create-project ` +- 新建组件`idf.py -C components create-component {componentName}` +- 清除之前的编译:` idf.py fullclean` +- 编译: `idf.py build` +- 向串口烧录固件: `idf.py -p /dev/ttyUSB0 flash` (`/dev/ttyUSB0` 为目标串口参数,根据实际填写) +- 打开串口监视器:`idf.py -p /dev/ttyUSB0 monitor` (`/dev/ttyUSB0` 为目标串口参数,根据实际填写) +- 配置菜单 :`idf.py menuconfig ` +- 选择芯片型号:` idf.py set-target esp32 ` 不输入参数的话,会列出所有可用型号 +- 一次性执行构建、烧录和监视过程:`idf.py -p /dev/ttyUSB0 flash monitor` (`/dev/ttyUSB0` 为目标串口参数,根据实际填写) + + +**有一点需要说明**:我们使用VS Code+ESP-IDF插件进行开发,所使用的图形界面实际上就是在命令行里运行上述命令。 +![](attachments/20250102173000.png) +比如: + + +![](attachments/20250102173106.png) + +点击小扳手图标构建项目,与在命令行对应目录下使用`idf.py build`命令,具有一模一样的效果,ESP-IDF插件只是为我们提供了一个可视化界面。 +当我们使用熟练后,使用可视化界面与直接使用命令没有什么区别,考虑到本教程不仅仅针对使用VS Code+ESP-IDF插件环境的学习者,**所以后续的教程中可能更多的以使用命令行命令为主,望读者周知**,这只是个人习惯,您在开发过程中可以选用您喜欢的操作方式,本质上没有区别。 + +# 二、尝试编译运行HelloWorld + +## 2.1 准备示例代码 + +接下来我们尝试编译并烧录一个HelloWorld示例工程,IDF-IDF提供了很多例程,它的例程文件位于 IDF 文件夹下的examples 中。 + +![](attachments/20250102174121.png) + +这里我安装ESP-IDF时,选择了`D:\Espressif\v523`文件夹作为根目录,对应examples的路径如上,请读者按照自己安装ESP-IDF的目录寻找示例代码。 + +本节使用的示例代码位于`examples\get-started`中: + +![](attachments/20250102174640.png) + +复制 `hello_world`例程文件夹到我们自己存放代码的文件夹(复制,而不是直接使用是为了不改动原本示例代码,毕竟后续可能还会用到),这里我将代码复制到`D:\Code\hello_world`,然后使用VScode打开`hello_world`文件夹(整个`hello_world`文件夹就是一个ESP32工程)。 + +![](attachments/20250102175311.png) + +我们可以在main文件夹里看到`hello_world.c`这就是`hello_world`工程的代码,关于工程结构,每个文件都是干什么的我们会在下节详细展开介绍,本节我们只讨论如何编译,烧录,和查看代码运行效果。 + +## 2.2 设置目标芯片 + +首先我们要确认芯片型号选择正确: + +![](attachments/20250102180011.png) + +如果不是ESP32,可以点击,并选择ESP32 + +![](attachments/20250102180134.png) + +也可以使用命令行设定目标芯片,点击打开ESP-IDF终端 + +![](attachments/20250102180251.png) + +在终端中使用`idf.py set-target esp32`命令设定目标芯片为ESP32. + +![](attachments/20250102180455.png) + +## 2.3 编译代码 + +点击构建代码按钮,进行代码编译(也可以打开ESP-IDF终端,使用`idf.py bulid`命令) + +![](attachments/20250102181113.png) + +开始编译后,命令行会显示编译进度: + +![](attachments/20250102181325.png) + +编译完成后,命令行会显示构建固件成功,接下来就可以烧录代码至开发板了。 + +![](attachments/20250102181750.png) + +## 2.4 烧录代码 + +烧录代码前先将开发板连接到电脑,确认开发板的串口号: + +windows下打开设备管理器(找不到可以百度一下),找到`端口(COM和LPT)`就可以看到开发板的串口号,如果显示有多个设备,可以反复插拔开发板来确认具体是哪一个端口。 + +![](attachments/20250102183320.png) + +Linux下可以可以使用`ls /dev/ttyUSB*`命令查看可用串口。 + +如果插上没有串口显示,可能有以下几种情况: + +1. **驱动未安装**:部分开发板(尤其是带 CH340 或 CP2102 芯片的开发板)需要安装对应的 USB 转串口驱动。解决方法:根据开发板芯片型号下载并安装对应的驱动程序。 +2. **USB 数据线问题**:有些 USB 数据线仅支持充电,不支持数据传输。解决方法:更换支持数据传输的 USB 数据线。 +3. **开发板电路故障**:开发板可能存在硬件问题,比如接口松动或电路损坏。解决方法:更换开发板测试,以排除硬件故障。 + +>出现上面这些问题是很常见的,出现了也不要紧,一条一条排除,善用搜素引擎进行搜素,都是可以解决的。 + +确认好串口号之后,在可视化界面选择串口烧录,选择好串口号,点击闪电标志即可烧录代码。也可以使用命令`idf.py -p /dev/ttyUSB0 flash` 进行烧录 (`/dev/ttyUSB0` 为目标串口参数,根据实际填写) + +![](attachments/20250102184124.png) + +烧录代码时,终端输出如下,为烧录成功: + +![](attachments/20250102184434.png) + + +>PS:如果这一步失败,且显示`A fatal error occurred: Timed out waiting for packet header`, 意味着esp32模组(芯片)没有正常进入下载模式,可能是开发板上没有自动下载的电路,需要按住开发板上的BOOT按钮,再按一下复位按钮(一般写Reset或者EN),让ESP32进入下载模式,再点击烧录代码即可。 + +## 2.4 查看代码运行效果 + +点击监控设备按钮即可打开串口监视器,查看芯片串口输出(也可以使用其他串口调试工具),但建议使用ESP-IDF自带的这个。 + +![](attachments/20250102185145.png) + +点击后会在终端中打开串口监视器,显示芯片输出。 + +![](attachments/20250102185354.png) + +可以看到这个示例程序,先输出 Hello world,然后打印了一些单片机信息,然后进入重启倒计时。 + +此外,也可以一次性执行所构建、烧录和监视过程,使用火焰按钮一键实现。 + +![](attachments/20250102185705.png) + +对应,也可以使用命令`idf.py -p /dev/ttyUSB0 flash monitor`,效果相同。 + +至此我们就借助 Hello world工程,掌握了最基本的ESP32开发流程。第一章认识ESP32到此结束,下一章将进一步熟悉ESP-IDF的架构与开发流程,掌握工程结构和常用开发工具及调试方法,建立高效开发基础。 \ No newline at end of file