1、项目概述与环境搭建:温湿度联动空调自动调节项目介绍、硬件选型与Python开发环境搭建

各位同学,欢迎来到《温湿度联动空调自动调节》实战课的第一章。

说实话,我最早做这个项目,纯粹是因为夏天在家被空调冻醒了好几次。你想想看,半夜温度降下来,空调还在呼呼吹冷风,盖被子热、不盖被子冷——太折腾了。后来我一琢磨,干脆自己动手,让空调学会看温湿度“脸色”办事。

这个项目说白了,就是让一块开发板(树莓派或ESP32)通过温湿度传感器感知环境,再通过红外发射模块模拟空调遥控器,自动开关机、调温度、调模式。整个过程不需要你拆空调,也不需要改电路,纯软件+外挂硬件搞定。

项目核心价值: 学完这一章,你就能搭建出一套完整的温湿度采集→逻辑判断→红外控制的闭环系统。以后家里空调就能“看天行事”了。

1.1 项目整体架构

先给你看一张我画的系统框图。这张图我每次带新人做IoT项目都会先拿出来讲,因为它把整个数据流讲清楚了。

温湿度联动空调自动调节系统架构图 环境 温度 / 湿度 DHT22 温湿度传感器 数字信号输出 主控板 树莓派 / ESP32 红外发射模块 38kHz 载波 空调 接收红外指令 用户 设定阈值 / 查看数据 数据流向说明: ① DHT22 采集环境温湿度 → ② 主控读取数据并判断是否超出用户阈值 ③ 主控通过红外发射模块发送空调控制指令 → ④ 空调执行开关/调温/调模式

你看,整个系统就四个核心环节:环境→传感器→主控→红外发射→空调。我当年第一次做的时候,以为红外控制最难,结果发现最坑的反而是传感器数据抖动——这个后面会细说。

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,一键烧录就行。

系统装好后,先做三件事:

  1. 开启SSH:在sd卡根目录新建一个名为 ssh 的空文件(无后缀)
  2. 配置WiFi:在sd卡根目录新建 wpa_supplicant.conf,写入你的WiFi信息
  3. 更新系统: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传感器能正常读取数据