3、硬件选型与搭建:主控芯片选型(ESP32/Arduino),传感器选型(SHT30、PMS5003、MH-Z19B),面包板与接线实践

好,咱们进入实战环节。这一章,说白了就是「选什么零件」和「怎么把它们连起来」。很多新手容易卡在这一步——东西买回来一堆,不知道怎么下手。别急,我带你一步步捋清楚。

3.1 主控芯片:ESP32 还是 Arduino?

先聊主控。这是整个系统的大脑。我个人习惯,只要项目涉及联网,首选 ESP32。为什么?

  • 自带 Wi-Fi 和蓝牙——省去外接模块的麻烦
  • 双核处理器——跑传感器采集和网络通信不打架
  • 价格亲民——十几块钱,比 Arduino Uno 还便宜
  • Arduino IDE 兼容——你如果玩过 Arduino,上手零门槛

当然,Arduino 也不是不能用。如果你只是做原型验证,或者项目不需要联网,Arduino Uno/Nano 完全够用。但咱们这个课程要做「家庭环境监测与空气质量管理」,数据要上传、要远程查看,所以——我建议你直接上 ESP32

我的经验: 我在项目中遇到过用 Arduino + ESP8266 模块的方案,结果供电不稳、通信丢包,折腾了两周。后来换成 ESP32,一次搞定。你想想看,省下的时间干点啥不好?

3.2 传感器选型:三个关键指标

咱们要监测三个核心参数:温度湿度、PM2.5、二氧化碳。对应的传感器分别是:

参数 传感器型号 通信方式 精度/量程
温度 + 湿度 SHT30 I2C ±0.3°C / ±2%RH
PM2.5 PMS5003 UART 0~500μg/m³
CO₂ MH-Z19B UART / PWM 400~5000ppm

SHT30:温湿度传感器

为什么选 SHT30 而不是 DHT11?嗯,这里要注意——DHT11 精度太差,误差能到 ±2°C,做环境监测基本是「图个乐」。SHT30 是 Sensirion 家的,I2C 接口,精度高、稳定性好。我在项目中用过几十个,没出过问题。

PMS5003:激光粉尘传感器

这是攀藤科技的经典款。激光散射原理,能测 PM1.0、PM2.5、PM10。注意它用的是 UART 串口通信,默认波特率 9600。接线时别接反了——TX 接 ESP32 的 RX,RX 接 ESP32 的 TX。

避坑指南: 我曾经把 PMS5003 的 TX 和 RX 接反了,数据死活读不出来。查了半天才发现是交叉接错了。记住:传感器的 TX 接主控的 RX,传感器的 RX 接主控的 TX

MH-Z19B:二氧化碳传感器

这个传感器是 NDIR(非色散红外)原理,测 CO₂ 很准。它支持 UART 和 PWM 两种输出方式。我建议用 UART,因为数据更直接。另外,它有个自动校准功能,但初次上电需要在 400ppm 环境下运行 20 分钟以上才能校准好。

3.3 面包板与接线实践

好,零件选好了,怎么连?我建议先用面包板搭原型,别急着焊板子。万一接错了,拔线重来就行,不心疼。

你需要准备的工具

  • 面包板(830 孔或 400 孔都行)
  • 杜邦线(公对公、公对母各若干)
  • ESP32 开发板(推荐 NodeMCU-32S)
  • 三个传感器(SHT30、PMS5003、MH-Z19B)
  • USB 数据线(供电 + 下载程序)

接线步骤

  1. 供电:ESP32 的 3.3V 和 GND 分别接到面包板的电源轨和地轨。三个传感器都从电源轨取电。
  2. SHT30:VCC→3.3V,GND→GND,SCL→GPIO22,SDA→GPIO21
  3. PMS5003:VCC→5V(注意!它需要 5V),GND→GND,TX→GPIO16,RX→GPIO17
  4. MH-Z19B:VCC→5V,GND→GND,TX→GPIO18,RX→GPIO19
重要提醒: PMS5003 和 MH-Z19B 都需要 5V 供电!ESP32 的 3.3V 输出电流不够,带不动。你可以用 USB 的 5V 直接供电,或者用外接 5V 电源。

代码示例:读取 SHT30 数据

先来个最简单的,验证传感器能不能正常工作:

#include <Wire.h>
#include <Adafruit_SHT31.h>

Adafruit_SHT31 sht31 = Adafruit_SHT31();

void setup() {
  Serial.begin(115200);
  if (!sht31.begin(0x44)) {
    Serial.println("找不到 SHT30!");
    while (1) delay(1);
  }
}

void loop() {
  float t = sht31.readTemperature();
  float h = sht31.readHumidity();
  Serial.print("温度: "); Serial.print(t);
  Serial.print(" °C, 湿度: "); Serial.print(h);
  Serial.println(" %");
  delay(2000);
}

上传代码后,打开串口监视器。如果看到温度和湿度数据,说明接线没问题。如果显示「找不到 SHT30」,检查一下 I2C 地址——SHT30 默认是 0x44,有些版本是 0x45。

3.4 整体接线图(文字描述)

我习惯把接线画在纸上,但这里用文字描述一下:

  • 面包板左侧:电源轨(红)接 3.3V,地轨(蓝)接 GND
  • 面包板右侧:电源轨(红)接 5V,地轨(蓝)接 GND
  • ESP32 插在面包板中间,GPIO 引脚用杜邦线引出
  • 三个传感器分别插在面包板空余位置,用杜邦线连接到 ESP32
小技巧: 用不同颜色的杜邦线区分功能——红色接电源,黑色接地,黄色接数据线。这样排查问题的时候一眼就能看出来。

好了,硬件选型和搭建就到这里。下一章咱们开始写代码,把这三个传感器的数据都读出来,然后上传到云端。你先把接线搞定,有问题随时翻回来看看。