Skip to content

ESP32从初见到入门(ESP32-Guide)

许可协议:

本仓库中的文本、代码、图片和视频均采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议— CC BY-NC-SA 4.0

前言:

本教程基于ESP-IDF-V5.3.2,旨在记录并分享个人学习ESP32过程中的经验和心得,以帮助其他初学者快速上手ESP32开发。这是一份从初学者视角出发,整理了学习ESP32的一条较为合理的路径和方法的笔记汇编。

文档内容基于对大量优质ESP32教程、官方文档以及实际项目实践的总结和理解,力求做到内容清晰、条理分明,既注重基础知识的巩固,也兼顾实战技能的提升。希望通过本教程,读者能少走弯路,从初学到实战开发,逐步掌握ESP32的开发技能。

文档内容从基础到进阶,适合循序渐进地学习。如果您是初学者,可以按照章节顺序逐步学习;如果您已有一定的开发经验,可以直接跳转到感兴趣的部分阅读。同时,鼓励读者在学习过程中动手实践,以便更好地理解相关知识点。

此外,文档配有对应的视频教程,可前往B站(点击跳转)浏览。

初衷:

  1. 一方面,本人在从零开始学习ESP32的过程中曾经走过很多弯路,踩过很多坑,现在回过头来觉得有更适合初学者学习的路径,故推荐给大家,希望后来人不要走了弯路。
  2. 另一方面,我始终认为,学习嵌入式,学习ESP32的秘诀是以实践促学习,也就是我们常说的费曼学习法—以输出倒逼输入。不要想着等我学会ESP32我就可以做什么,不妨换个思路,想想我现在需要做什么,做的这个东西需要用到ESP32的什么功能,然后点对点的去学习某个部分,这样学习完后可以立马投入使用,加深记忆。这份教程本身也算是我个人践行费曼学习法的实践过程。

目录:

本教程共八个章节,三个阶段:基础(1-3),实践(4),进阶(5-10)

其中基础章节一定要确保自己掌握,实践和进阶部分推荐按照个人需求进行选学。

修订历史:

文档名称版本作者时间备注
ESP32学习计划v1.0.0DuRuofu2023-08-28首次建立
ESP32学习计划v1.0.1DuRuofu2023-09-2补充
ESP32学习计划v1.1.0DuRuofu2023-09-13补充
ESP32学习计划v1.2.0DuRuofu2024-01补充环境搭建
ESP32学习计划v1.3.0DuRuofu2024-02补充IDF基础
ESP32学习计划v1.4.0DuRuofu2024-03补充外设学习
ESP32学习计划v1.4.0DuRuofu2024-04补充WIFI部分
ESP32从初见到入门(一稿)v1.5.0DuRuofu2024-12-26整理汇总,重新编排

当前进度:

章节小节内容📄文字教程📺视频教程💾配套代码完成日期
一、认识ESP321.1 ESP32介绍2025/1/3
一、认识ESP321.2 ESP32开发环境搭建✔✔✔2025/1/4-6
一、认识ESP321.3 idf.py的基本使用2025/1/7
二、IDF基础与工具使用2.1 ESP32工程结构及构建2025/1/9
二、IDF基础与工具使用2.2 ESP-IDF项目配置2025/1/21
二、IDF基础与工具使用2.3 ESP-IDF自定义组件2025/1/22
二、IDF基础与工具使用2.4 ESP-IDF组件管理器2025/1/24
三、FreeRTOS基础3.1 FreeRTOS概述
三、FreeRTOS基础3.2 FreeRTOS多任务与任务管理
三、FreeRTOS基础3.3 FreeRTOS任务看门狗
四、外设学习4.1.1 GPIO入门
四、外设学习4.1.2 UART串口通信
四、外设学习4.1.3 硬件定时器
四、外设学习4.1.4 ADC模数转换
四、外设学习4.1.5 DAC数模转换
四、外设学习4.1.6 LED PWM控制
四、外设学习4.1.7 I2C通信✔(新版I2C暂未更新)
四、外设学习4.1.8 SPI通信
四、外设学习4.2.1 分区表设计
四、外设学习4.2.2 非易失性存储
四、外设学习4.2.3 FAT文件系统
四、外设学习4.2.4 SPIFFS文件系统
五、FreeRTOS进阶5.1 FreeRTOS队列使用教程
五、FreeRTOS进阶5.2 FreeRTOS信号量教程
五、FreeRTOS进阶5.3 FreeRTOS互斥量教程
五、FreeRTOS进阶5.4 FreeRTOS事件组教程
五、FreeRTOS进阶5.5 FreeRTOS任务通知教程
五、FreeRTOS进阶5.6 FreeRTOS软件定时器教程

相关硬件及开发板:

学习ESP32离不开一块趁手的开发板,笔者认为初学者学习ESP32的重点不在于一块全能的开发板,重点在于立刻开始学习,很多复杂的外设在初学时是用不到的。所以上手阶段推荐使用市面上常见的ESP32最小系统板,价格一般在20元左右,足够学习本教程除LVGL,特殊外设,实战演练以外的部分。

此外,由于WiFi,蓝牙章节涉及到板间通信,需要使用两块开发板,所以推荐读者准备两块ESP32最小系统板。

遵循以上原则,本教程大部分章节均使用下图所示的开发板,主控型号为ESP32-WROOM-32

如果想进一步节省学习成本,还可以使用这种9.9元的ESP32-C3开发板(淘宝搜下面的图):

至于LVGL,特殊外设,实战演练部分,会在教程章节单独推荐开发板或外设模块。

〇、常见问题及解决方案:

本部分记录搭建环境和开发过程中常见的问题和解决方案,都是本人在开发过程中遇到的,作为经验积累,分享给大家。

常见问题及解决方案:常见问题及解决方案.md

一、认识ESP32 【完结】

目标:学会安装ESP-IDF开发环境,并使用其烧录代码,掌握ESP32的基本特点及工具使用。

1.1 什么是ESP32

本节主要介绍ESP32的基本概念,包括其硬件特点、应用场景及功能优势。通过本节内容,初学者可以快速了解ESP32的核心能力以及在物联网开发中的广泛应用。

1.2 ESP32开发环境搭建

本节将详细讲解如何在不同操作系统(Windows/Linux/Mac)上搭建ESP-IDF开发环境,涵盖工具链安装、环境变量配置及调试工具的准备等内容。通过本节,读者可以完成开发环境的搭建,为后续开发做好准备。

1.3 初试ESP32-IDF.py的基本使用

本节通过“Hello World”示例代码,指导读者创建第一个ESP32工程,并完成编译、烧录及运行调试流程。通过本节内容,初学者可以初步体验ESP-IDF的开发流程,快速进入ESP32开发的世界。


二、IDF基础与工具使用 【完结】

目标:熟悉ESP-IDF的架构与开发流程,掌握常用开发工具及调试方法,建立高效开发基础。

2.1 ESP32工程结构

本节详细介绍ESP-IDF项目的基本目录结构,包括CMake工具的基础知识,帮助读者掌握ESP32工程的整体组织方式,为日后开发复杂项目奠定基础。

2.2 ESP-IDF项目配置

本节将重点讲解如何使用menuconfig工具配置项目,包含常见的配置选项及其实际用途。通过本节学习,读者可以根据项目需求快速定制和优化ESP32项目配置。

2.3 ESP-IDF自定义组件

本节讲解如何创建和管理ESP-IDF的自定义组件,包括组件的目录结构、声明与调用方法,以及组件的复用和共享技巧,帮助读者构建模块化项目。

2.4 ESP-IDF组件管理器

本节重点介绍ESP-IDF组件管理器的功能与使用方法,涵盖如何通过组件管理器导入外部库、配置组件依赖,使用官方提供的外部组件。


三、FreeRTOS基础(更新中)

目标:学习FreeRTOS的核心概念与基本功能,掌握任务管理与调度机制,为实时系统开发打下基础。

3.1 FreeRTOS介绍与引入

本节将介绍FreeRTOS的核心概念,包括实时操作系统的特点、FreeRTOS的基本架构和设计思想,以及其在嵌入式开发中的应用场景,帮助读者快速了解FreeRTOS的基础知识。

3.2 FreeRTOS多任务与任务管理

本节讲解FreeRTOS中的多任务机制及任务管理方法,包括任务创建、任务删除、任务优先级和任务状态的管理。通过本节学习,读者可以初步掌握在FreeRTOS中实现并发任务的基本技巧。

3.3 FreeRTOS任务看门狗

本节讲解 FreeRTOS 中任务看门狗机制的原理包括如何监控任务执行状态、检测任务卡死以及触发系统恢复等功能。通过学习任务看门狗,读者可以掌握提高系统可靠性的重要技巧,确保任务能够在异常情况下得到及时处理。

3.4 FreeRTOS软件定时器 (Software Timer)

通过软件定时器实现定时触发任务逻辑,学习其管理及高级用法。


四、外设学习 (更新中)

目标:掌握ESP32常用外设的基本操作方法,学会与硬件交互并控制外设设备。

4.1 基础外设

4.1.1 GPIO

本节介绍GPIO(通用输入输出)的基本功能,包括输入、输出及中断操作。通过实际案例,学习如何控制外部设备并响应硬件信号。

4.1.2 UART

本节讲解UART串口通信的原理及在ESP32中的实现,内容涵盖UART初始化、数据收发及常见调试方法。

4.1.3 定时器

本节内容包括ESP32硬件定时器的初始化、配置及应用,通过案例学习如何实现精确的时间控制与定时任务。

4.1.4 ADC(模数转换)

本节讲解ESP32的ADC模块,包括采样的基本配置与信号转换,并通过示例学习如何读取模拟信号。

4.1.5 DAC(数模转换)

本节讲解DAC模块的基本操作,学习如何将数字信号转换为模拟信号输出。

4.1.6 LED PWM

本节介绍LED PWM(脉宽调制)的原理及操作方法,通过实际案例学习如何控制LED亮度。

4.1.7 I2C

本节讲解I2C通信协议及在ESP32中的实现,内容涵盖设备寻址、数据收发及实际应用。

4.1.8 SPI

本节介绍SPI通信协议及其在ESP32中的使用,学习如何通过SPI与外部设备通信。

4.1.9 I2S

本节介绍I2S通信协议及其在ESP32中的使用,学习如何通过I2S与外部设备通信。

4.2 存储外设

4.2.1 分区表设计

本节讲解ESP32的分区表结构及设计方法,学习如何规划存储空间以满足不同开发需求。

4.2.2 非易失性存储(NVS)

本节介绍NVS的使用方法,学习如何在ESP32中存储和读取持久化数据。

4.2.3 FAT文件系统

本节讲解FAT文件系统的基本操作,学习如何在ESP32中管理文件及目录。

4.2.4 SPIFFS文件系统

本节介绍SPIFFS文件系统的基本操作,学习如何在ESP32中使用轻量级文件系统进行数据存储与读取。

4.2.5 ESP32存储-SD、SDIO、MMC 驱动

本节介绍ESP32存储-SD、SDIO、MMC 驱动的基本操作.

4.3 其他外设


五、FreeRTOS进阶 (更新中)

目标:学习FreeRTOS任务间通信与系统优化技术,为后续高级外设的使用打下基础。

5.1 队列 (Queue)

学习FreeRTOS中队列的基本概念及用法,掌握如何在任务之间传递数据,并理解阻塞与优先级特性。

5.2 信号量 (Semaphore) 和互斥量 (Mutex)

理解信号量的分类(计数信号量与二值信号量),学习如何通过信号量实现任务同步及资源管理。

5.3 互斥量 (Mutex)

掌握互斥量的作用及优先级反转问题,学习如何保护共享资源以避免竞争条件。

5.4 事件组 (Event Group)

学习如何通过事件组实现复杂的任务同步逻辑及事件管理。

5.5 任务通知 (Task Notifications)

了解任务通知的特点,掌握其在任务间高效通信中的实际应用。


六、Wi-Fi功能与相关协议 (更新中)

目标:学会使用ESP32的Wi-Fi功能,实现无线网络连接及常见通信协议的应用开发。

6.1 Wi-Fi功能基础

6.1.1 Wi-Fi模式与介绍

本节介绍ESP32的Wi-Fi模式,包括STA模式和AP模式,以及如何进行基本的Wi-Fi操作,如连接网络和设置路由器等。

6.1.2 Wi-Fi STA与AP配置

本节介绍如何在ESP32中配置Wi-Fi STA(Station)和AP(Access Point)模式,帮助用户快速实现设备与路由器或其他设备的连接。

6.2 网络协议应用

6.2.1 TCP协议

本节讲解TCP协议的原理及在ESP32中的实现,包含连接、数据传输及断开连接的操作步骤。

6.2.2 UDP协议

本节介绍UDP协议的工作原理及在ESP32上的应用,包含数据发送与接收的实现方法。

6.2.3 HTTP协议

本节介绍ESP32如何实现HTTP协议,包括创建HTTP客户端和服务器的步骤,以及常见的应用场景。

6.2.4 WebSocket协议

本节讲解WebSocket协议在ESP32中的应用,如何通过WebSocket实现实时双向通信。

6.2.5 MQTT协议

本节介绍ESP32如何实现MQTT协议,包括客户端连接、订阅和发布消息的基本操作。

6.2.6 ESP-NOW协议

本节介绍ESP32的ESP-NOW协议,讲解其在无需Wi-Fi路由器的情况下实现设备间直接通信的应用场景。

6.2.7 SNTP校时

本节介绍使用SNTP从网络获取准确时间。


七、蓝牙功能与相关协议 (更新中)

目标:掌握ESP32蓝牙功能的配置与使用,实现蓝牙低功耗和经典蓝牙的通信功能。

7.1 蓝牙功能基础

  • BLE与经典蓝牙的区别
  • 蓝牙开发环境配置

7.2 BLE开发

  • BLE广播与扫描
  • BLE连接与数据传输

7.3 经典蓝牙开发

  • SPP协议基础
  • 经典蓝牙数据传输

八、图形界面开发 (更新中)

目标:学习LVGL图形库的基础知识,掌握图形界面开发的核心方法,设计简单的GUI界面。

8.1 LVGL基础

  • LVGL环境搭建
  • LVGL的基本架构

8.2 常用组件与布局

  • 常用控件的使用(按钮、标签等)
  • 布局系统与屏幕适配

8.3 图形界面项目开发

  • 动态界面更新
  • 图形界面优化技巧

九、其他实用内容

补充一些综合性性案例,与实用功能,为前八章做补充。

9.1 Wi-Fi配网技术

9.1.1 Blufi配网

9.1.2 Smartconfig配网

9.1.3 SoftAP配网

  • 📄在线文字教程:SoftAP配网.md
  • 📺在线视频教程:🚧 开发中
  • 💾教程配套代码:🚧 开发中

9.2 Web服务程序(Vue3+element-plus)

9.3 OTA功能

  • 📄在线文字教程:ESP32-OTA初探.md
  • 📺在线视频教程:🚧 开发中
  • 💾教程配套代码:🚧 开发中

十、项目实战

目标:通过综合项目实践,整合所学知识,独立开发基于ESP32的完整应用,提升实战能力。

参考链接