求助:基于Raspberry Pi与CCS811的CO2检测继电器控灯项目及Python脚本指南
室内CO₂浓度检测联动灯光项目指南(附Python脚本)
一、硬件清单
- 单板计算机(以树莓派4B为例,其他支持Python与GPIO控制的设备均可)
- CO₂传感器:MH-Z19B(串口输出款,性价比高、稳定性好)
- 5V带光耦隔离的继电器模块(避免干扰单板机)
- LED灯/小型白炽灯泡(搭配对应电压的电源)
- 杜邦线(公对公、公对母若干)
- 树莓派专用电源适配器(5V/3A)
- 传感器辅助电源(可选,若树莓派5V口供电充足可省略)
二、接线步骤
1. MH-Z19B传感器与树莓派接线
- 传感器VCC → 树莓派5V引脚
- 传感器GND → 树莓派GND引脚
- 传感器TX → 树莓派RX引脚(GPIO15,对应UART0串口)
- 传感器RX → 树莓派TX引脚(GPIO14,对应UART0串口)
⚠️ 前置操作:树莓派默认禁用串口功能,需先开启:
- 终端运行
sudo raspi-config - 选择「Interface Options」→「Serial Port」
- 关闭「Login shell over serial」,开启「Serial port hardware enabled」
- 重启树莓派使设置生效
2. 继电器模块与树莓派、灯光接线
- 继电器VCC → 树莓派3.3V引脚
- 继电器GND → 树莓派GND引脚
- 继电器IN → 树莓派GPIO18引脚
- 继电器公共端(COM)→ 灯光电源正极
- 继电器常开端(NO)→ 灯光正极
- 灯光负极 → 电源负极
三、Python脚本实现
1. 依赖库安装
终端运行以下命令安装串口操作库:
pip install pyserial
2. 完整功能脚本
import serial import RPi.GPIO as GPIO import time # 配置参数 CO2_SERIAL_PORT = '/dev/ttyS0' # 树莓派UART0串口设备路径 CO2_BAUD_RATE = 9600 RELAY_GPIO = 18 CO2_THRESHOLD = 1000 # 触发灯光的CO₂阈值(单位:ppm,可按需调整) # 初始化GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(RELAY_GPIO, GPIO.OUT) GPIO.output(RELAY_GPIO, GPIO.LOW) # 默认关闭继电器 # 初始化串口 try: ser = serial.Serial(CO2_SERIAL_PORT, CO2_BAUD_RATE, timeout=1) except serial.SerialException as e: print(f"串口初始化失败: {e}") GPIO.cleanup() exit(1) def read_co2(): """读取MH-Z19B传感器的CO₂浓度数值""" ser.write(b"\xff\x01\x86\x00\x00\x00\x00\x00\x79") time.sleep(0.1) response = ser.read(9) if len(response) == 9 and response[0] == 0xff and response[1] == 0x86: co2 = (response[2] << 8) + response[3] return co2 else: print("传感器读取失败,重试中...") return None try: print(f"CO₂检测系统启动,触发阈值为{CO2_THRESHOLD}ppm") while True: co2_level = read_co2() if co2_level is not None: print(f"当前CO₂浓度: {co2_level}ppm") if co2_level > CO2_THRESHOLD: GPIO.output(RELAY_GPIO, GPIO.HIGH) # 吸合继电器,点亮灯光 print("CO₂浓度过高,灯光已开启") else: GPIO.output(RELAY_GPIO, GPIO.LOW) # 断开继电器,熄灭灯光 print("CO₂浓度正常,灯光已关闭") time.sleep(5) # 每5秒检测一次 except KeyboardInterrupt: print("系统手动停止") finally: ser.close() GPIO.cleanup()
四、测试与调试
- 传感器单独测试:运行读取CO₂的函数片段,确认预热1-2分钟后能稳定获取数值
- 继电器单独测试:编写简单GPIO控制脚本,验证继电器能正常吸合/断开
- 整合功能测试:运行完整脚本,用呼出气体靠近传感器(或其他方式提升CO₂浓度),验证灯光是否在阈值触发时自动开启
五、注意事项
- 继电器模块负载能力有限,驱动大功率灯泡需额外搭配接触器
- 树莓派GPIO输出电流小,务必使用自带驱动电路的成品继电器模块
- 可根据场景需求调整
CO2_THRESHOLD阈值和检测间隔时间 - 长期运行建议将脚本设置为开机自启动(可通过systemd服务实现)
内容的提问来源于stack exchange,提问作者Firas Bayazed
相关产品推荐
相关产品推荐

