为什么选 ESP32 做入门硬件
ESP32 把 Wi-Fi、蓝牙、几十个 GPIO 和一颗足够快的双核芯片塞进几块钱的开发板,用 Arduino 框架或 ESP-IDF 都能开发。对物联网入门者来说,它是「一块板子就能跑通联网采集」的最低成本路径:不用外挂网络模块,烧录即用。
物联网的第一课不是协议,而是「让一块小小的板子,把传感器读数送到互联网上」。
- 主控ESP32 开发板,双核、自带 Wi-Fi。
- 传感器一只温湿度模块(如 I2C 接口)即可起步。
- 供电USB 调试,或电池 + 稳压模块。
- 链路Wi-Fi 连路由器,经 MQTT/HTTPS 上报云端。
最小硬件:传感器与接线
以一只温湿度传感器为例,它通常走 I2C 接口:一根 SDA、一根 SCL,加上电源与地。接线的第一原则是「共地」——传感器的地必须和 ESP32 的地连在一起,否则读数全是噪声。其次,电源电压要匹配,3.3V 的传感器接到 5V 引脚上可能直接损坏。
#include <Wire.h>
#define SDA_PIN 21
#define SCL_PIN 22
void setup() {
Wire.begin(SDA_PIN, SCL_PIN);
Serial.begin(115200);
}
上电后先用串口扫描仪确认传感器的 I2C 地址,再在代码里用这个地址发起读取。很多「读不到数据」的问题,根源都是地址不对或接线松动,而不是代码逻辑错了。
采集与本地滤波
传感器读数天然带有毛刺——温度可能在 25.0 和 25.8 之间乱跳。直接上报会让云端图表充满噪声。简单有效的做法是连续采样多次取平均值,或者用一阶低通滤波给读数加一个平滑系数。
float smooth = 0.0f;
float readSmooth() {
float raw = readSensor(); // 原始读数
smooth = smooth * 0.8f + raw * 0.2f;
return smooth; // 越旧权重越高,曲线更平
}
滤波系数要按场景调:系数大更平滑但响应慢,系数小更灵敏但抖动多。环境监测这种慢变量场景,平滑一些没问题;快速变化的量就别过度平滑,否则会把真实变化也滤掉。
WiFi 联网与断线重连
Wi-Fi 连接不是一劳永逸的:路由器重启、信号遮挡、信道干扰都会让连接断开。代码里不能假设「连上一次就一直在线」,而要在主循环里检测连接状态,掉了就重连,并给每次重连加上退避延时,避免疯狂重连反而更不稳定。
void ensureWifi() {
if (WiFi.status() == WL_CONNECTED) return;
Serial.print("reconnect");
WiFi.begin(SSID, PASS);
int tries = 0;
while (WiFi.status() != WL_CONNECTED && tries < 20) {
delay(500);
tries++;
}
}
实际项目里还应记录「本次已离线多久」,超过阈值就在本地缓存数据,等网络恢复后再补传,而不是直接丢弃读数——对无人值守的设备,数据连续性比实时性更重要。
数据上报与格式约定
设备端上报的报文格式要提前和云端约定好。一份最小报文通常包含设备编号、时间戳和若干指标字段。用 JSON 结构清晰,但报文较大;对带宽敏感的场景也可以用紧凑的二进制或键值串。下面以 JSON 经 HTTPS 上报为例。
String buildPayload(String devId, float t, float h) {
return String("{\"dev\":\"") + devId +
"\",\"t\":" + String(t, 1) +
",\"h\":" + String(h, 1) + "}";
}
// 上报:HTTPS POST 到网关接口,由网关转发到平台
- 设备号每块板子有唯一标识,云端据此识别。
- 时间戳优先用云端校时后的网络时间,而非板子本地时钟。
- 单位温度、湿度的单位在报文里写清,避免歧义。
- 频率按指标变化快慢定上报间隔,不要盲目高频。
功耗与稳定性
用电池供电的设备,功耗直接决定续航。ESP32 在持续联网时电流不小,省电的思路是「采集—上报—立即休眠」:用深度睡眠模式定时唤醒,做完一次上报就睡回去,平均功耗能降到微安级。
稳定性方面有三个容易踩的坑:一是看门狗——代码里若有长时间阻塞,ESP32 会自动重启,要把耗时操作拆短或喂狗;二是串口缓冲区溢出,打印太多会拖慢主循环;三是浮点运算在某些芯片上较慢,频繁的浮点滤波要考虑其开销。
// 工作一次后进入深度睡眠,定时唤醒
Serial.flush();
esp_sleep_enable_timer_wakeup(30ULL * 1000000ULL); // 30 秒
esp_deep_sleep_start();
小结与延伸阅读
用 ESP32 跑通「采集—滤波—联网—上报」这条主线,你就掌握了物联网设备端的核心范式。剩下的差异化,都在功耗、稳定性和云端衔接这些细节里。
- 通信协议打底,读《MQTT 协议详解与实战》。
- 传感器选型与滤波进阶,看《传感器数据采集与处理入门》。
- 数据上云之后怎么看,接《物联网数据分析与可视化实战》。