3. ESP8266/ESP32平台介绍

各位同学,欢迎来到第三章。从这一章开始,我们就要真正动手了。在开始写配网代码之前,你得先搞清楚手里的“家伙”是什么。ESP8266 和 ESP32,这两兄弟是物联网圈子里绕不开的存在。我个人习惯把它们比作“瑞士军刀”——便宜、够用、生态好。

今天我们就来聊聊:怎么选芯片,怎么搭环境,以及最基础的 GPIO 和 UART 该怎么玩。这些都是后面配网实战的基石。

3.1 芯片选型:ESP8266 vs ESP32

很多新手会纠结:我到底该用 8266 还是 32?其实没那么复杂。我当年第一次做智能插座项目,为了省几块钱选了 8266,结果发现需要蓝牙配网,硬生生加了个外挂模块。嗯,那叫一个后悔。

下面这张表,是我在实际项目中总结的选型参考:

对比项 ESP8266 ESP32
核心架构 Tensilica L106 单核 32-bit Tensilica LX6 双核 32-bit
主频 80MHz (可超频至 160MHz) 240MHz
SRAM 约 50KB 可用 520KB
Flash 通常 1MB ~ 4MB 通常 4MB ~ 16MB
WiFi 802.11 b/g/n (仅 Station + SoftAP) 802.11 b/g/n (支持双模 + 蓝牙)
蓝牙 无 经典蓝牙 + BLE 4.2/5.0
GPIO 数量 最多 17 个 (实际可用约 11 个) 最多 34 个
硬件外设 1x UART, 1x SPI, 1x I2C, 1x ADC 3x UART, 3x SPI, 2x I2C, 2x ADC, 2x DAC
典型价格 约 5-10 元 约 15-25 元
适用场景 纯 WiFi 传感器、简单开关控制 音视频、复杂协议、蓝牙配网、多任务
我的建议: 如果你是做产品原型验证,或者需要蓝牙配网(比如小程序配网),直接上 ESP32。差价不到 20 块钱,省下的开发时间远不止这个数。如果只是做个简单的温湿度上报,8266 完全够用。

3.2 开发环境搭建

环境搭建这件事,说难不难,说简单也容易踩坑。我见过太多同学卡在驱动安装和编译工具链上。这里我给出两条路:Arduino IDE 和 ESP-IDF。你根据自己情况选。

3.2.1 方案一:Arduino IDE(快速上手)

如果你之前玩过 Arduino,这条路最顺。说白了,就是把 ESP8266/ESP32 当成一个带 WiFi 的 Arduino 来用。

步骤:

  1. 安装 Arduino IDE:从官网下载最新版(建议 2.x 版本,界面更清爽)。
  2. 添加开发板管理器 URL:
    • 打开 文件 → 首选项,在“附加开发板管理器网址”中填入:
    https://arduino.esp8266.com/stable/package_esp8266com_index.json
    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
  3. 安装开发板支持包:
    • 打开 工具 → 开发板 → 开发板管理器,搜索 esp8266 和 esp32,点击安装。
    • 这个过程会下载编译工具链,大概几百 MB,耐心等。
  4. 选择开发板:
    • 以 ESP32 DevKit V1 为例,选择 ESP32 Dev Module。
    • 8266 选 NodeMCU 1.0 (ESP-12E Module)。
  5. 测试点亮 LED:
void setup() {
  pinMode(2, OUTPUT);  // ESP32 板载 LED 通常接 GPIO2
}

void loop() {
  digitalWrite(2, HIGH);
  delay(1000);
  digitalWrite(2, LOW);
  delay(1000);
}
我曾经踩过的坑: 安装完开发板包后,如果编译报错“A fatal error occurred: Failed to connect to ESP32”,大概率是没装 USB 驱动。CP2102 和 CH340 是两种最常见的 USB 转串口芯片,去官网下驱动装好就行。别问我怎么知道的,当年我折腾了一下午。

3.2.2 方案二:ESP-IDF(专业开发)

如果你要做产品级开发,或者需要用到 FreeRTOS、蓝牙协议栈这些高级功能,我建议你直接上 ESP-IDF。虽然学习曲线陡一点,但后面会省很多事。

快速安装(以 Windows 为例):

  1. 去乐鑫官网下载 ESP-IDF 离线安装器(建议 v5.0 以上版本)。
  2. 双击运行,一路默认。它会自动安装 Python、Git、交叉编译工具链。
  3. 安装完成后,桌面上会出现 ESP-IDF 5.x CMD 的快捷方式。打开它。
  4. 进入一个示例工程:
cd %USERPROFILE%\esp\esp-idf\examples\get-started\hello_world
idf.py set-target esp32
idf.py menuconfig   # 配置项目(默认即可)
idf.py build        # 编译
idf.py -p COM3 flash monitor  # 烧录并打开串口监视器
核心区别: Arduino IDE 封装了底层细节,适合快速验证;ESP-IDF 让你直接操作 FreeRTOS 任务、事件循环和 WiFi 驱动栈。做配网实战时,ESP-IDF 能让你更清楚地看到 WiFi 扫描、连接、事件回调的完整流程。

3.3 GPIO 基础:从点灯到按键

GPIO 是芯片和外界打交道的最基本方式。说白了,就是读高低电平、写高低电平。但这里有几个坑,我当年做智能灯控项目时全踩过。

3.3.1 数字输出与输入

先看一个最简单的按键控制 LED 的例子:

#define LED_PIN   2
#define BUTTON_PIN 0  // ESP32 开发板上的 BOOT 按键

void setup() {
  pinMode(LED_PIN, OUTPUT);
  pinMode(BUTTON_PIN, INPUT_PULLUP);  // 内部上拉,按键按下为 LOW
}

void loop() {
  if (digitalRead(BUTTON_PIN) == LOW) {
    digitalWrite(LED_PIN, HIGH);
  } else {
    digitalWrite(LED_PIN, LOW);
  }
}
注意: ESP32 的 GPIO 大部分支持内部上拉/下拉,但 GPIO34-39 是纯输入引脚,没有内部上拉功能。如果你要用这些引脚读按键,必须外接上拉电阻。这个细节在数据手册里写得很清楚,但很多人不看。

3.3.2 避坑指南:GPIO 的“隐藏属性”

我曾经在一个项目中,用 GPIO12 作为输出控制继电器,结果死活拉不高。查了半天才发现,GPIO12 是 ESP32 的 MTDI 引脚,上电时的电平决定了 Flash 的工作电压(1.8V 还是 3.3V)。如果外部电路把它拉高了,芯片直接启动失败。

下面是我整理的 ESP32 高危 GPIO 列表:

GPIO 风险说明 建议
GPIO0 下载模式引脚,低电平进入烧录模式 避免外部拉低,或加按键隔离
GPIO2 上电时高电平,影响启动日志输出 避免外部拉低
GPIO12 MTDI,决定 Flash 电压 上电时保持浮空或下拉
GPIO15 MTDO,决定启动模式 上电时保持浮空或上拉
GPIO34-39 纯输入,无内部上拉 必须外接上拉/下拉电阻

3.4 UART 通信:配网的生命线

UART 是串口通信的基础。在配网场景中,它承担着两个关键角色:日志输出 和 AT 指令交互。你想想看,如果 WiFi 连不上,你总得有个地方看错误信息吧?那就是 UART。

3.4.1 硬件连接

ESP32 有 3 个 UART 控制器。默认的 UART0 用于烧录和日志,通常连接到 USB 转串口芯片。硬件连接很简单:

  • TX(发送)→ 对方的 RX
  • RX(接收)→ 对方的 TX
  • GND → 共地(这个经常被忽略,但必须接)

3.4.2 代码示例:串口打印与接收

void setup() {
  Serial.begin(115200);  // 初始化 UART0,波特率 115200
  Serial.println("ESP32 启动成功!");
}

void loop() {
  if (Serial.available()) {
    String cmd = Serial.readStringUntil('\n');
    cmd.trim();
    if (cmd == "AT+SCAN") {
      Serial.println("开始扫描 WiFi...");
      // 这里可以调用 WiFi 扫描函数
    } else {
      Serial.print("未知指令: ");
      Serial.println(cmd);
    }
  }
}
波特率陷阱: 很多同学用 ESP8266 时,默认的 Serial 波特率是 115200,但有些旧模块(比如 ESP-01)出厂固件用的是 74880。如果你发现串口打印全是乱码,先检查波特率。我当年调试一个 ESP-01 模块,换了三个串口工具才发现是波特率没对上。

3.5 本章知识体系总览

下面这张图,把本章的核心知识点串了起来。你可以把它当成一张“地图”,后面做配网实战时随时回来对照。

ESP8266/ESP32 平台知识体系 ESP8266/ESP32 平台知识体系 芯片选型 开发环境搭建 基础外设 ESP8266 ESP32 Arduino IDE ESP-IDF GPIO UART 核心逻辑:选对芯片 → 搭好环境 → 掌握 GPIO/UART → 为 WiFi 配网打下基础 配网实战中,UART 用于日志输出和 AT 指令交互,GPIO 用于状态指示和按键触发

3.6 小结

这一章我们干了三件事:

  • 芯片选型:ESP8266 省钱但功能有限,ESP32 全能但贵一点。根据你的配网方案来选。
  • 环境搭建:Arduino IDE 适合快速上手,ESP-IDF 适合深度开发。两条路都能走到终点。
  • GPIO 与 UART:GPIO 要注意“隐藏属性”,UART 要注意波特率和共地。这些基础打牢了,后面写配网代码才不会莫名其妙地翻车。