跳转到内容

硬件组件与接线

硬件组件与接线

本节介绍工厂环境监测系统的硬件组件和接线方法。学习完成后,您将能够:

  • 识别所需的所有硬件组件
  • 掌握 ESP32 与各传感器的接线方法
  • 理解 I2C 和 GPIO 通信接口的区别
  • 验证硬件连接的正确性

在开始本节之前,请确保:

  • 已了解 ESP32 的 GPIO 引脚功能
  • 已准备以下硬件组件
  • 具备基础的电子电路知识
  • 已安装 Arduino IDE 或 PlatformIO
组件推荐型号功能数量
微控制器ESP32 DevKit核心控制单元1
温湿度传感器DHT22 (AM2302)测量温湿度1
光照传感器BH1750测量光照强度1
面包板830 孔电路连接基板1
杜邦线公对母模块到面包板连接20 根
杜邦线公对公面包板内部连接10 根
USB 线Micro USB供电和编程1
组件推荐型号用途
继电器模块5V 单路继电器控制外部设备(风扇、空调)
散热风扇5V 电脑风扇演示降温控制
OLED 显示屏128x64 I2C本地数据显示

DHT11 vs DHT22 vs BME280

特性DHT11DHT22 (AM2302)BME280
温度精度±2°C±0.5°C±0.3°C
湿度精度±5% RH±2% RH±1% RH
温度范围0-50°C-40-80°C-40-85°C
采样频率最大 1Hz最大 2Hz最大 10Hz
气压测量不支持不支持支持
通信接口单总线单总线I2C/SPI
单价$1-2$3-5$4-6
适用场景精度要求低的场景一般监测场景高精度多参数场景

售前提示:推荐时,DHT22 是性价比最佳的选择。只有在需要气压补偿(如精密制造车间)或更高精度时才推荐 BME280。

BH1750 光照传感器特点

  • I2C 接口,接线简单
  • 测量范围:1-65535 lux
  • 分辨率:高分辨率模式 1 lux
  • 内置 ADC,直接输出数字值
  • 可选地址:0x23(ADDR 接低)或 0x5C(ADDR 接高)
ESP32 DevKit DHT22 BH1750 Breadboard
┌──────────┐ ┌────────┐ ┌────────┐
│ 3.3V ├────────┤ VCC │ │ VCC │ ┌─────────┐
│ │ │ │ │ │ │ 红线 3.3V │
│ GND ├────────┤ GND │ │ GND │ ├─────────┤
│ │ │ │ │ │ │ 黑线 GND │
│ GPIO 4 ├────────┤ DATA │ │ │ ├─────────┤
│ │ │ │ │ │ │ DHT22 数据│
│ GPIO 21├────────┼────────┼──────┤ SDA │ ├─────────┤
│ │ │ │ │ │ │ I2C 数据 │
│ GPIO 22├────────┼────────┼──────┤ SCL │ ├─────────┤
│ │ │ │ │ │ │ I2C 时钟 │
│ GPIO 18├────────┤ (可选连接继电器控制风扇) │ ├─────────┤
└──────────┘ └────────┘ └────────┘ └─────────┘
ESP32 Pin连接目标说明
3.3VDHT22 VCC, BH1750 VCC供电(注意总电流不超过 500mA)
GNDDHT22 GND, BH1750 GND共用接地
GPIO 4DHT22 DATADHT 单总线数据引脚
GPIO 21BH1750 SDAI2C 数据线
GPIO 22BH1750 SCLI2C 时钟线
GPIO 18继电器控制端 (可选)风扇/空调控制

BH1750 模块通常已内置 4.7kΩ 上拉电阻。如果使用裸芯片而不是模块,需要在 SDA 和 SCL 线上各添加一个 4.7kΩ 上拉电阻连接到 3.3V。

DHT22 数据引脚需要一个 4.7kΩ-10kΩ 上拉电阻连接到 3.3V。大多数 DHT22 模块已内置此电阻,如果购买的是裸传感器,需要额外添加。

1. 将 ESP32 插入面包板一侧
2. 用红线将 ESP32 的 3.3V 引脚连接到面包板的红色电源轨
3. 用黑线将 ESP32 的 GND 引脚连接到面包板的蓝色接地轨
4. 确认电源轨和接地轨在整个面包板上连通
1. 将 DHT22 模块插入面包板
2. 从电源轨 (3.3V) 连接红线到 DHT22 VCC 引脚
3. 从接地轨 (GND) 连接黑线到 DHT22 GND 引脚
4. 从 GPIO 4 (ESP32) 连接杜邦线到 DHT22 DATA 引脚
1. 将 BH1750 模块插入面包板
2. 从电源轨 (3.3V) 连接红线到 BH1750 VCC 引脚
3. 从接地轨 (GND) 连接黑线到 BH1750 GND 引脚
4. 从 GPIO 21 (ESP32) 连接杜邦线到 BH1750 SDA 引脚
5. 从 GPIO 22 (ESP32) 连接杜邦线到 BH1750 SCL 引脚
// 在 Arduino IDE 中上传此测试代码验证连接
#include <Wire.h>
#include <DHT.h>
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
Wire.begin();
dht.begin();
Serial.println("Sensor Test Started");
}
void loop() {
// 测试 DHT22
float h = dht.readHumidity();
float t = dht.readTemperature();
// 测试 BH1750 (通过 I2C 扫描)
Wire.beginTransmission(0x23);
byte error = Wire.endTransmission();
Serial.print("Temperature: ");
Serial.print(t);
Serial.print("°C, Humidity: ");
Serial.print(h);
Serial.print("%, BH1750 Address: ");
if (error == 0) {
Serial.println("0x23 - OK");
} else {
Serial.println("0x23 - NOT FOUND");
}
delay(3000);
}

预期输出(打开串口监视器,波特率 115200):

Sensor Test Started
Temperature: 26.5°C, Humidity: 62.3%, BH1750 Address: 0x23 - OK
Temperature: 26.6°C, Humidity: 62.1%, BH1750 Address: 0x23 - OK

症状:DHT 传感器返回 nan-999

可能原因

  • 接线错误或接触不良
  • DHT22 上拉电阻缺失
  • 采样间隔太短(DHT22 至少间隔 2 秒)

解决方案

  1. 检查所有连线是否牢固插入面包板
  2. 确认 DHT22 的 DATA 引脚有 4.7kΩ 上拉电阻
  3. 确保读取间隔 ≥ 2 秒

症状:BH1750 在 I2C 扫描中未显示

可能原因

  • I2C 地址错误(默认 0x23,ADDR 接高时 0x5C)
  • SDA/SCL 引脚接反
  • 模块供电不足

解决方案

  1. 使用 I2C 扫描代码检测设备地址
  2. 检查 SDA 接 GPIO 21、SCL 接 GPIO 22
  3. 确保模块供电电压为 3.3V

症状:ESP32 反复重启,串口输出乱码

可能原因

  • 供电不足(USB 线质量差)
  • 传感器短路
  • GPIO 电平冲突

解决方案

  1. 更换 USB 数据线(确保支持数据传输)
  2. 断开所有传感器连线,逐个排查
  3. 使用外部 5V 电源供电
  • 推荐: 使用带屏蔽的杜邦线减少信号干扰
  • 推荐: DHT22 和 ESP32 之间的连线控制在 20cm 以内
  • 推荐: 传感器模块先在桌面测试,再安装到最终位置
  • 避免: 传感器与电机、继电器等高干扰设备共用电源
  • 避免: 在通电状态下插拔传感器模块
  • 避免: GPIO 输入电压超过 3.3V(否则可能损坏 ESP32)

本节要点总结:

  1. 核心硬件:ESP32 + DHT22(温湿度)+ BH1750(光照)
  2. 接线要点:DHT22 使用 GPIO 单总线,BH1750 使用 I2C 接口
  3. 供电要求:所有传感器使用 3.3V,总电流不超过 500mA
  4. 验证方法:通过串口测试代码验证每个传感器的连接