1、项目概述与环境搭建:温湿度联动空调自动调节项目介绍、硬件选型与Python开发环境搭建
各位同学,欢迎来到《温湿度联动空调自动调节》实战课的第一章。
说实话,我最早做这个项目,纯粹是因为夏天在家被空调冻醒了好几次。你想想看,半夜温度降下来,空调还在呼呼吹冷风,盖被子热、不盖被子冷——太折腾了。后来我一琢磨,干脆自己动手,让空调学会看温湿度“脸色”办事。
这个项目说白了,就是让一块开发板(树莓派或ESP32)通过温湿度传感器感知环境,再通过红外发射模块模拟空调遥控器,自动开关机、调温度、调模式。整个过程不需要你拆空调,也不需要改电路,纯软件+外挂硬件搞定。
项目核心价值: 学完这一章,你就能搭建出一套完整的温湿度采集→逻辑判断→红外控制的闭环系统。以后家里空调就能“看天行事”了。
1.1 项目整体架构
先给你看一张我画的系统框图。这张图我每次带新人做IoT项目都会先拿出来讲,因为它把整个数据流讲清楚了。
你看,整个系统就四个核心环节:环境→传感器→主控→红外发射→空调。我当年第一次做的时候,以为红外控制最难,结果发现最坑的反而是传感器数据抖动——这个后面会细说。
1.2 硬件选型详解
选硬件这事儿,我踩过的坑比你们走过的路还多(笑)。咱们一个一个说。
1.2.1 DHT22 温湿度传感器
为什么选DHT22而不是更便宜的DHT11?
我直接给你对比数据:
| 参数 | DHT11 | DHT22 |
|---|---|---|
| 温度测量范围 | 0~50°C | -40~80°C |
| 温度精度 | ±2°C | ±0.5°C |
| 湿度测量范围 | 20~90% RH | 0~100% RH |
| 湿度精度 | ±5% RH | ±2% RH |
| 采样周期 | 1秒 | 2秒 |
| 价格(参考) | 约5元 | 约15元 |
我的建议: 做空调联动项目,DHT22是底线。DHT11的±2°C误差,在空调控制场景下会让你要么冻死要么热死。我曾经用DHT11做原型,结果25°C的环境它读出来27°C,空调死活不启动——你说气不气人?
DHT22是单总线通信,只需要一根数据线。它的数据格式是40位:16位湿度 + 16位温度 + 8位校验。嗯,校验位很重要,我后面会专门讲怎么处理数据校验失败的情况。
1.2.2 红外发射模块
红外发射模块,说白了就是一个38kHz载波发生器加一个红外LED。市面上常见的型号有VS1838B(接收)和普通的红外发射管。
咱们这个项目只需要发射,所以选最基础的红外发射模块(带三极管驱动)就行。为什么强调带三极管驱动?
因为主控板的GPIO口输出电流太小,直接驱动红外LED,距离超不过50厘米。我刚开始就犯过这个错,对着空调按了半天没反应,还以为是代码写错了……后来加了个S8050三极管,发射距离直接飙到5米以上。
注意: 不同品牌的空调,红外编码格式不一样。格力用NEC协议,美的用RC-5,海尔用自己魔改的。咱们后面会专门讲怎么用逻辑分析仪抓码、怎么用Python库发射。这里你先记住:硬件都一样,区别在软件。
1.2.3 主控板:树莓派 vs ESP32
这两个我都用过,给你说说我的真实感受。
| 对比项 | 树莓派 4B | ESP32 |
|---|---|---|
| 处理器 | ARM Cortex-A72 四核 1.5GHz | Xtensa LX6 双核 240MHz |
| 内存 | 2GB/4GB/8GB LPDDR4 | 520KB SRAM + 4MB Flash |
| 操作系统 | Raspberry Pi OS (Linux) | FreeRTOS / Arduino / MicroPython |
| Python支持 | 完整Python 3 | MicroPython(功能受限) |
| WiFi/蓝牙 | WiFi 5 + 蓝牙 5.0 | WiFi 4 + 蓝牙 4.2 |
| GPIO数量 | 40 pin(含I2C/SPI/UART) | 34 pin(含I2C/SPI/UART) |
| 功耗 | 约5W(需5V/3A供电) | 约0.5W(可电池供电) |
| 价格 | 约350元 | 约30元 |
我的建议很直接:
- 如果你是想学完整Python生态、做原型验证、或者以后想加摄像头/屏幕 → 选树莓派。我自己的主力开发机就是树莓派4B,跑着Flask做Web控制面板。
- 如果你是想做低成本、低功耗、长期稳定运行的产品 → 选ESP32。我有个项目在客户那儿跑了两年没重启,用的就是ESP32。
咱们这个课程,我会以树莓派为主线讲,因为Python环境更完整,调试更方便。但ESP32的代码我也会给,原理完全一样。
1.3 Python开发环境搭建
好,硬件选完了,咱们开始搭环境。这部分我尽量精简,但该有的一个都不能少。
1.3.1 树莓派系统准备
我假设你已经有一块树莓派,并且烧录好了Raspberry Pi OS(推荐64位桌面版)。如果你还没做,去官网下载Raspberry Pi Imager,一键烧录就行。
系统装好后,先做三件事:
- 开启SSH:在sd卡根目录新建一个名为
ssh的空文件(无后缀) - 配置WiFi:在sd卡根目录新建
wpa_supplicant.conf,写入你的WiFi信息 - 更新系统:
sudo apt update && sudo apt upgrade -y
小技巧: 我习惯用 raspi-config 工具开启VNC,这样就能远程桌面操作了。对于不熟悉命令行的同学,VNC比SSH友好得多。
1.3.2 安装Python与依赖库
树莓派OS自带Python 3,但版本可能不是最新的。咱们先确认一下:
python3 --version
# 应该输出 Python 3.9.x 或更高版本
pip3 --version
# 确认pip已安装
接下来安装项目需要的核心库:
# 安装DHT22传感器库
sudo pip3 install Adafruit_DHT
# 安装GPIO控制库
sudo pip3 install RPi.GPIO
# 安装红外发射库(用于生成NEC/RC-5等编码)
sudo pip3 install pigpio
# 安装Web框架(后续做可视化面板用)
sudo pip3 install flask
# 安装数据记录库
sudo pip3 install pandas
# 启动pigpio守护进程(红外发射必须)
sudo systemctl enable pigpiod
sudo systemctl start pigpiod
这里我要特别说一下 pigpio。为什么不用自带的 RPi.GPIO 做红外发射?
因为红外遥控需要精确到微秒级的PWM波形,RPi.GPIO 的软件PWM抖动太大,发射出来的码空调不认。而 pigpio 利用树莓派的DMA硬件产生精确波形,误差在1微秒以内。我当年用 RPi.GPIO 折腾了两天没搞定,换成 pigpio 半小时就通了——工具选对,事半功倍。
1.3.3 验证传感器连接
硬件连接很简单:
- DHT22的VCC → 树莓派5V(pin 2)
- DHT22的GND → 树莓派GND(pin 6)
- DHT22的DATA → 树莓派GPIO4(pin 7)
写个测试脚本验证一下:
import Adafruit_DHT
import time
# 设置传感器类型和GPIO引脚
sensor = Adafruit_DHT.DHT22
pin = 4
while True:
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
if humidity is not None and temperature is not None:
print(f"温度: {temperature:.1f}°C, 湿度: {humidity:.1f}%")
else:
print("读取失败,请检查连接")
time.sleep(2)
踩坑提醒: 我第一次跑这个脚本,发现每隔几次就会读出来 None。查了半天,发现是DHT22的数据线太长(超过2米),信号衰减导致通信失败。后来换成20cm的杜邦线,问题解决。记住:DHT22的数据线不要超过50cm,否则加个4.7kΩ上拉电阻。
1.4 本章小结
到这,你已经完成了:
- 理解了温湿度联动空调自动调节的整体架构
- 掌握了DHT22、红外发射模块、树莓派/ESP32的选型要点
- 搭建好了Python开发环境,安装了所有依赖库
- 验证了DHT22传感器能正常读取数据