You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:基于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串口)

⚠️ 前置操作:树莓派默认禁用串口功能,需先开启:

  1. 终端运行sudo raspi-config
  2. 选择「Interface Options」→「Serial Port」
  3. 关闭「Login shell over serial」,开启「Serial port hardware enabled」
  4. 重启树莓派使设置生效

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()

四、测试与调试

  1. 传感器单独测试:运行读取CO₂的函数片段,确认预热1-2分钟后能稳定获取数值
  2. 继电器单独测试:编写简单GPIO控制脚本,验证继电器能正常吸合/断开
  3. 整合功能测试:运行完整脚本,用呼出气体靠近传感器(或其他方式提升CO₂浓度),验证灯光是否在阈值触发时自动开启

五、注意事项

  • 继电器模块负载能力有限,驱动大功率灯泡需额外搭配接触器
  • 树莓派GPIO输出电流小,务必使用自带驱动电路的成品继电器模块
  • 可根据场景需求调整CO2_THRESHOLD阈值和检测间隔时间
  • 长期运行建议将脚本设置为开机自启动(可通过systemd服务实现)

内容的提问来源于stack exchange,提问作者Firas Bayazed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 12:40:54