第26章:环境监测系统实战
在野外、公园或城市街道部署环境监测站,面临着两大挑战:供电和网络。Wi-Fi 覆盖不到,拉电线成本太高。
26.1 系统方案设计
- 应用场景:监测森林公园的空气质量 (PM2.5, CO2) 和气象数据 (温湿度, 气压)。
- 通信方案:LoRa。传输距离远(几公里),功耗低。
- 供电方案:太阳能板 + 18650 锂电池。
- 休眠策略:每小时唤醒采集一次,其余时间深度休眠。
26.2 硬件选型
- 主控:STM32L4 (低功耗系列) 或 ESP32 (关闭 WiFi/BT)。
- LoRa 模组:SX1278 或 E32-TTL-100 (串口透传)。
- 传感器:
- BME280 (温湿度气压)。
- 攀藤 PMS7003 (PM2.5,注意它功耗大,需用 MOS 管控制电源)。
26.3 低功耗软件设计
核心思想:干完活马上睡。
void loop() {
// 1. 唤醒传感器电源
digitalWrite(SENSOR_POWER_PIN, HIGH);
delay(30000); // 预热30秒 (PM2.5传感器需要)
// 2. 采集数据
Data packet = readSensors();
// 3. 关闭传感器电源 (省电)
digitalWrite(SENSOR_POWER_PIN, LOW);
// 4. LoRa 发送
LoRa.beginPacket();
LoRa.write((uint8_t*)&packet, sizeof(packet));
LoRa.endPacket();
// 5. 进入深度睡眠 1小时
// ESP32:
esp_sleep_enable_timer_wakeup(3600 * 1000000ULL);
esp_deep_sleep_start();
}26.4 LoRa 网关搭建
数据发出来后,需要一个网关接收并转发到云端。
- 硬件:树莓派 + SX1278 LoRa HAT。
- 软件:Python 脚本,监听 LoRa 信号,解析后通过 4G/以太网 发送 MQTT 到云平台。
# 网关伪代码
import time
from LoRa import LoRa
import paho.mqtt.client as mqtt
def on_receive(payload):
# 解析二进制数据结构
temp, hum, pm25 = struct.unpack('ffH', payload)
# 转发到云端
json_msg = json.dumps({"temp": temp, "hum": hum, "pm25": pm25})
mqtt_client.publish("park/monitor/01", json_msg)
while True:
if LoRa.available():
payload = LoRa.read()
on_receive(payload)环境监测通常是“只读”的,而农业应用则需要“读写”闭环(如自动灌溉)。下一章我们将进入智慧农业。