一、项目背景
在我们生活的环境中,及时了解环境参数对我们来说至关重要。于是,我决定基于行空板 M10 和扩展板打造一个自动环境监测报警系统,借助物联网技术,实现对环境数据的实时监测和远程报警。
二、功能演示
这个系统可以实时监测温湿度、空气质量(比如一氧化碳、二氧化碳、PM2.5 等)、光照强度和噪音水平。所有数据通过网络传到物联网云平台,像 ThingSpeak 或者阿里云 IoT 这种,我们随时都能用手机或电脑查看环境情况。一旦监测到的环境参数,比如有害气体浓度、噪音分贝等,超过我们设定的安全范围,系统就会自动给我们预设的联系方式,像手机短信、邮件或者 APP 推送等,发去报警信息,提醒我们赶紧采取措施。
三、材料清单
行空板 M10×1
行空板扩展组合×1
DHT22 温湿度传感器×1
MQ 系列气体传感器(比如 MQ-7 CO 传感器、MQ-135 空气品质传感器等)×若干
光照传感器×1
噪声传感器×1
OLED 显示屏(可选,用于本地数据显示)×1
电阻、电容、面包板、杜邦线等电子元件若干
电源模块(比如电池或 USB 电源适配器)×1
四、硬件组装
把 DHT22 温湿度传感器的数据引脚连接到行空板 M10 的 GPIO 引脚,比如 GPIO4。
将 MQ 系列气体传感器的输出引脚分别连接到行空板 M10 的模拟输入引脚,比如 GPIO32、GPIO33 等,记得按传感器要求连好电源和地线,加上合适的上拉电阻。
光照传感器和噪声传感器的输出引脚分别连接到行空板 M10 的其他 GPIO 引脚,比如 GPIO25、GPIO26 等。
若是用了 OLED 显示屏,将其 I²C 接口连到行空板 M10 的相应引脚,比如 GPIO21 是 SCL,GPIO22 是 SDA。
把所有传感器和模块的电源引脚连接到行空板 M10 的 3.3V 或 5V 电源引脚,依据具体传感器要求选合适的电源电压。
用面包板和杜邦线进行电路连接,一定要连牢靠,避免短路。
把组装好的硬件用合适的外壳或支架固定好,方便放置和使用。
五、程序逻辑
系统启动后,行空板 M10 先初始化各个传感器。接着,按设定的时间间隔,比如每分钟,依次读取各传感器的数据,包含温湿度、气体浓度、光照强度和噪声水平。读取的数据经简单滤波和处理后,通过网络模块上传至物联网云平台。在云平台上,我们预设了各环境参数的安全阈值,当上传的数据超出这些阈值时,云平台就自动触发报警规则,向用户设定的联系方式发送报警通知。同时,系统还可在本地 OLED 显示屏上实时显示环境数据,方便我们现场查看。
程序代码:
import network
import time
import dht
from machine import Pin, ADC
import urequests as requests
import json
# Wi-Fi配置
SSID = "你的WiFi名称"
PASSWORD = "你的WiFi密码"
# 物联网云平台配置(以ThingSpeak为例)
THINGSPEAK_API_KEY = "你的ThingSpeak API密钥"
THINGSPEAK_URL = "https://api.thingspeak.com/update"
# 初始化传感器
dht_pin = Pin(4) # DHT22温湿度传感器连接到GPIO4
dht_sensor = dht.DHT22(dht_pin)
co_sensor = ADC(Pin(32)) # MQ-7 CO传感器连接到GPIO32
light_sensor = ADC(Pin(33)) # 光照传感器连接到GPIO33
noise_sensor = ADC(Pin(34)) # 噪声传感器连接到GPIO34
# 连接到Wi-Fi
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
while not wlan.isconnected():
pass
print("Connected to WiFi")
# 读取传感器数据
def read_sensors():
# 读取温湿度
dht_sensor.measure()
temperature = dht_sensor.temperature()
humidity = dht_sensor.humidity()
# 读取CO浓度
co_value = co_sensor.read()
# 读取光照强度
light_value = light_sensor.read()
# 读取噪声水平
noise_value = noise_sensor.read()
return {
"temperature": temperature,
"humidity": humidity,
"co": co_value,
"light": light_value,
"noise": noise_value
}
# 上传数据到ThingSpeak
def upload_data(data):
try:
response = requests.get(
THINGSPEAK_URL,
params={
"api_key": THINGSPEAK_API_KEY,
"field1": data["temperature"],
"field2": data["humidity"],
"field3": data["co"],
"field4": data["light"],
"field5": data["noise"]
}
)
response.close()
print("Data uploaded to ThingSpeak")
except Exception as e:
print("Error uploading data:", e)
# 检查报警条件并发送报警
def check_alerts(data):
# 根据需要设置报警阈值
temp_threshold = 30.0 # 温度报警阈值(摄氏度)
co_threshold = 500 # CO浓度报警阈值(模拟值)
noise_threshold = 500 # 噪声报警阈值(模拟值)
alerts = []
if data["temperature"] > temp_threshold:
alerts.append("Temperature too high: {}°C".format(data["temperature"]))
if data["co"] > co_threshold:
alerts.append("CO concentration too high: {}".format(data["co"]))
if data["noise"] > noise_threshold:
alerts.append("Noise level too high: {}".format(data["noise"]))
if alerts:
send_alert(alerts)
# 发送报警通知(可以改为发送邮件、短信等)
def send_alert(alerts):
print("Alerts detected:")
for alert in alerts:
print(alert)
# 可以添加发送邮件、短信等代码
# 主循环
def main():
connect_wifi()
while True:
data = read_sensors()
print("Sensor Data:", data)
upload_data(data)
check_alerts(data)
time.sleep(60) # 每分钟读取一次数据
if __name__ == "__main__":
main()
六、环境搭建
在电脑上装好 mind+,添加行空板 M10 开发板的支持库,这样才能编写和上传代码到行空板 M10。
依据用到的传感器,安装对应的 Arduino 库,比如 DHT 传感器库、MQTT 通信库等,这样在代码里就能方便地用传感器功能。
注册并配置物联网云平台账户,创建新设备和数据通道,获取设备连接要的 API 密钥、设备 ID 等信息。
在行空板 M10 的代码里配置好 Wi-Fi 网络名称(SSID)和密码,让设备能连上互联网并访问云平台。
七、运行程序
用 mind+把编写好的代码上传到行空板 M10。
确认行空板 M10 已正确连接到电源,所有传感器和模块都连接好了。
打开串口监视器,看看程序运行状态和传感器数据输出是否正常。
检查物联网云平台上的设备数据是否开始更新,确认数据上传功能正常。
测试报警功能,可以手动模拟环境参数超限,比如用打火机靠近气体传感器模拟有害气体泄漏,验证报警是否及时、准确地发送到预设联系方式。
评论