2. 环境搭建(一):硬件准备——开发板(ESP32/STM32)、传感器、执行器选型与连接
硬件选型与连接是联合调试的物理基础。本章聚焦于开发板、传感器、执行器的选型原则与典型连接方案,确保后续 RemoteCommand 指令能够正确下发并驱动设备动作。
2.1 开发板选型对比:ESP32 vs STM32
在物联网设备端调试场景中,ESP32 与 STM32 是最主流的两种选择。下表从调试适配角度对比其关键差异:
| 对比维度 | ESP32 | STM32(以 F4/H7 系列为例) |
|---|---|---|
| 无线能力 | 内置 Wi-Fi + BLE,无需外挂模块 | 需外接 Wi-Fi 模块(如 ESP8266/AT 指令) |
| 指令响应实时性 | FreeRTOS 双核,适合中等实时性 | HAL/LL 库 + 裸机/RTOS,硬实时能力强 |
| 调试接口 | USB-UART(CP2102/CH340),JTAG 需额外转换 | SWD/JTAG 原生支持,调试器(ST-Link/J-Link)成熟 |
| RemoteCommand 适配 | MQTT/HTTP/WebSocket 库丰富,云端对接快 | 需移植协议栈,适合指令解析在 MCU 侧的场景 |
| 功耗控制 | Modem-sleep 模式约 5mA,Deep-sleep 约 10μA | Stop/Standby 模式可低至 2μA 以下 |
| 典型调试痛点 | Wi-Fi 连接不稳定导致指令丢失;Flash 磨损 | 时钟配置错误导致外设时序偏移;中断优先级冲突 |
选型建议: 本课程联合调试实验以 ESP32 为主平台(内置无线、上手快),同时提供 STM32 的移植要点。若你的产品需要极低功耗或硬实时控制,建议优先考虑 STM32 + 外挂无线模块方案。
2.2 传感器与执行器选型清单
为覆盖 RemoteCommand 指令的典型场景(数据采集、状态上报、动作执行),我们选择以下通用器件:
| 类别 | 型号/类型 | 接口 | 调试关注点 |
|---|---|---|---|
| 温湿度传感器 | DHT22 / SHT30 | 单总线 / I2C | 时序精度、上电稳定时间、数据校验 |
| 光照传感器 | BH1750 | I2C | 地址冲突、测量模式切换 |
| 继电器模块 | SRD-05VDC-SL-C | GPIO 高低电平 | 驱动电流、反激二极管、触点抖动 |
| LED 指示灯 | 5mm 红/绿/蓝 | GPIO + 限流电阻 | PWM 频率、亮度线性度 |
| 蜂鸣器 | 有源/无源 | GPIO / PWM | 有源只需电平,无源需特定频率方波 |
| 按键 | 轻触开关 | GPIO 输入(上拉/下拉) | 硬件消抖(RC 滤波)与软件消抖配合 |
避坑提醒: DHT22 的采样间隔必须大于 2 秒,否则会输出固定错误值 0。在 RemoteCommand 高频下发采集指令时,务必在固件中加入采样间隔保护逻辑。
2.3 硬件连接拓扑图
下图展示了 ESP32 开发板与传感器、执行器的典型连接关系,后续所有调试实验均基于此拓扑:
2.4 典型连接步骤
- 供电确认: ESP32 开发板通过 USB 供电(5V),板载 3.3V LDO 为传感器供电。继电器模块需额外 5V 供电,不可直接从 3.3V 引脚取电。
- I2C 总线连接: BH1750 和 SHT30 共用 I2C 总线(SDA → GPIO21,SCL → GPIO22),注意上拉电阻(4.7kΩ)已集成在模块上。
- 单总线连接: DHT22 数据引脚接 GPIO4,VCC 接 3.3V,GND 共地。数据线与 VCC 之间建议加 5kΩ 上拉电阻。
- 执行器连接: 继电器控制引脚接 GPIO16(低电平触发),LED 正极经 220Ω 限流电阻接 GPIO17,蜂鸣器(无源)接 GPIO18。
- 按键连接: 按键一端接 GPIO19,另一端接 GND;启用内部上拉,按下为低电平。
调试检查点: 上电后用万用表测量各模块 VCC 与 GND 之间电压,确保传感器供电在 3.3V ± 0.1V 范围内。继电器模块 VCC 应为 5V ± 0.3V。电压异常时先排查供电回路,不要急于下载固件。
2.5 连接验证方法
硬件连接完成后,在烧录固件前,可通过以下方法快速验证:
| 验证对象 | 方法 | 预期结果 |
|---|---|---|
| ESP32 供电 | USB 插入 PC,观察板载 LED | 红色电源灯常亮,蓝色状态灯闪烁(出厂固件) |
| I2C 设备 | 使用 i2c_scanner 示例扫描地址 |
BH1750 显示 0x23,SHT30 显示 0x44 |
| DHT22 | 串口打印读取值 | 温度 20~30℃,湿度 40~70%RH(室内环境) |
| 继电器 | GPIO16 输出低电平 | 继电器吸合(听到咔嗒声),指示灯亮 |
| 按键 | 读取 GPIO19 电平 | 未按下为 HIGH,按下为 LOW |
// 示例:I2C 扫描代码片段(Arduino 框架)
#include <Wire.h>
void setup() {
Serial.begin(115200);
Wire.begin(21, 22); // SDA, SCL
}
void loop() {
byte error, address;
for(address = 1; address < 127; address++ ) {
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.printf("Found device at 0x%02X\n", address);
}
}
delay(2000);
}
常见连接故障: 若 I2C 扫描不到设备,首先检查 SDA/SCL 是否接反;其次测量 SDA 线对地电压,正常应为 3.3V(空闲高电平)。若电压低于 2.5V,说明上拉电阻缺失或总线短路。
完成上述硬件准备后,开发板、传感器、执行器已构成一个可被 RemoteCommand 指令操控的物理系统。下一阶段将进行开发环境配置与固件烧录。