1. 简介
对于了解过WiFi、蓝牙开发的同学应该听说过ESP32或ESP8266这两款芯片,它们是由上海乐鑫半导体推出的WiFi芯片。
在之前如果个人开发者要开发WiFi功能,只能购买像德州仪器、瑞昱这些国外公司的芯片,价格昂贵不说,开发、学习门槛相对较高。ESP32和ESP8266的出现可以说完美解决了这一困局,而且乐鑫的芯片大多以模组的方式进行售卖,更加大大降低了开发者的开发成本,提高了开发效率,像ESP8266的模组,在网上几块钱就能拿下,更高性能的ESP32模组也是十块钱就能拿下。
开发方面,乐鑫官方推出了ESP-IDF框架来帮助开发者快速开发ESP的芯片,更绝的是ESP的芯片也是支持Arduino框架进行开发的,这进一步降低了ESP芯片的开发门槛,毫不夸张地说,ESP32的开发难度甚至低过传统的STM32单片机。
本栏目的教程将围绕ESP32这款经典的芯片,乐鑫近年来也推出了多款新的单片机,覆盖了Zigbee、Matter等协议,后面我都会出相关的教程的。教程会同时介绍Arduino和ESP-IDF两种框架的开发,虽然Arduino框架的开发效率高和学习成本低,但是使用Arduino开发会浪费掉一部分的性能,对于严肃的项目开发还是需要ESP-IDF框架来进行。
2. ESP32
下面来简单介绍一下ESP32这颗芯片。
ESP32内部有2颗Xtensa架构的32位LX6处理器,最高主频为240MHz;内部带有448KB的ROM和520KB的SRAM;有大约34个GPIO。
WiFi方面,支持IEEE802.11 b/g/n标准,2.4GHz信号,传输速度可达150MHz。蓝牙方面,支持蓝牙v4.2版本,支持传统蓝牙和低功耗蓝牙。
ESP32的模组我选择的是比较畅销的ESP32-WROOM-32E模组,型号为ESP32-WROOM-32E-N4。
ESP32对资源的要求是比较高的,因为包含WiFi和蓝牙协议栈的原因,所以模组基本上都会自带NOR Flash,芯片的代码是存在Flash里面的,像我这个模组就使用一颗4MB大小的Flash。
3. 开发环境
ESP32的开发IDE我使用的是VScode。开发平台使用的是PlatformIO,它是一个跨芯片、跨平台的开发工具,以往来说每开发一款不同架构的单片机就要搭建对应的环境,非常麻烦;PlatformIO可以说是解决了这个烦恼,像ESP32它就同时支持一键搭建ESP-IDF和Arduino的开发环境,包括其他架构的单片机,像8051、RISC-V等等,它都有相关的支持。
在VScode中只需要安装PlatformIO插件即可使用。
简单讲一下搭建的过程,安装好插件后,在命令行执行“pio home”可进入PlatformIO的工作台。
点击右上角创建新项目。
填写项目名,选择对应的开发板,选择开发软件框架,选择项目文件保存路径,即可创建项目。PlatformIO会自动下载相关的工具链,如果工具链有新版本还会自动更新。
4. 教程目录
4.1 Arduino开发
4.1.1 初级教程
- GPIO通用输入输出 + LED点灯和按键输入例程
- 中断矩阵 + 按键输入中断例程
- UART通用异步收发传输器 + 串口收发例程
- I2C控制器 + I2C主从收发例程
- Timer定时器 + 定时器闹钟例程
- LED PWM控制器 + 呼吸灯例程
- ADC模数转换器 + 单次转换例程
- DAC数模转换器 + DAC输出例程
4.1.2 进阶教程
4.1.3 拓展教程
4.2 ESP-IDF开发
4.2.1 初级教程
- GPIO通用输入输出 + LED点灯和按键输入例程
- 中断矩阵 + 按键输入中断例程
- UART通用异步收发传输器 + 串口收发例程
- I2C控制器 + I2C主从收发例程
- Timer定时器 + 定时器闹钟例程
- LED PWM控制器 + 呼吸灯例程
- PWM脉宽调制器 + PWM波形输出和捕获例程
- 低功耗管理 + RTC唤醒和按键唤醒例程
- ADC模数转换器 + ADC连续采集例程
- DAC数模转换器 + 余弦波输出例程
- 红外遥控RMT + WS2812灯驱动例程
4.2.2 进阶教程
- WiFi开发 | 基站模式 + AP扫描和AP连接例程
- WiFi开发 | AP模式 + 基站连接例程
- WiFi开发 | TCP传输控制协议 + TCP服务器和客户端例程
- WiFi开发 | UDP用户数据报协议 + UDP客户端和服务器例程
- WiFi开发 | HTTP服务器 + HTTP服务器搭建例程
- WiFi开发 | HTTPS服务器 + 搭建例程
- 经典蓝牙开发 | 协议栈基础(L2CAP、SDP、CAP) + 设备发现例程
- 经典蓝牙开发 | 蓝牙串口协议(SPP) + 客户端和服务端例程
- 经典蓝牙开发 | HID设备 + 蓝牙键盘例程
- 低功耗蓝牙开发 | GAP协议 + 设备扫描例程
- 低功耗蓝牙开发 | GATT规范和ATT属性协议 + 电池电量服务例程