基于Python的物联网智慧农业数据采集与管理系统设计方案
一、系统架构设计
A[感知层] --> B[网络层]
B --> C[平台层]
C --> D[应用层]
A -->|传感器数据| B
B -->|MQTT/4G| C
C -->|数据库存储| D
D -->|可视化| E[用户终端]
二、硬件选型
1. 主控设备
- Raspberry Pi 4B(边缘计算节点)
- ESP32(低成本无线节点)
2. 传感器模块
- 温湿度:DHT22/AM2302
- 光照强度:BH1750
- 土壤湿度:FC-28(带防水探头)
- CO2浓度:MH-Z19B
- 摄像头:Pi Camera(病虫害监测)
3. 通信模块
- LoRa模块(远距离低功耗)
- SIM800C(4G通信)
- ESP32内置WiFi/BLE
三、软件实现核心代码
1. 传感器数据采集(Python + GPIO)
import Adafruit_DHT
import board
import busio
import adafruit_bh1750
# 温湿度传感器
def read_dht22(pin):
sensor = Adafruit_DHT.DHT22
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
return {'temp': temperature, 'humidity': humidity}
# 光照传感器
i2c = busio.I2C(board.SCL, board.SDA)
bh1750 = adafruit_bh1750.BH1750(i2c)
lux = bh1750.lux
2. MQTT数据传输(Paho-MQTT)
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
print("Connected with code", rc)
client.subscribe("farm/control")
client = mqtt.Client()
client.on_connect = on_connect
client.connect("mqtt.iotcloud.com", 1883, 60)
# 发布传感器数据
sensor_data = {
'temperature': 25.6,
'humidity': 60
}
client.publish("farm/sensor/data", json.dumps(sensor_data))
3. 数据存储(InfluxDB + Python)
from influxdb import InfluxDBClient
client = InfluxDBClient(host='localhost', port=8086)
client.switch_database('agriculture')
json_body = [{
"measurement": "environment",
"tags": {"location": "field1"},
"fields": {
"temperature": 25.6,
"humidity": 60
}
}]
client.write_points(json_body)
4. Web可视化(Flask + ECharts)
from flask import Flask, render_template
import sqlite3
app = Flask(__name__)
@app.route('/dashboard')
def dashboard():
conn = sqlite3.connect('sensor.db')
data = conn.execute('SELECT * FROM sensor_data').fetchall()
return render_template('dashboard.html', data=data)
<!-- HTML模板中使用ECharts -->
<div id="chart" style="width:600px;height:400px;"></div>
<script>
var chart = echarts.init(document.getElementById('chart'));
chart.setOption({
xAxis: {type: 'time'},
yAxis: {type: 'value'},
series: [{data: {{ data|tojson }} }]
});
</script>
四、高级功能实现
1. 智能预警系统
# 阈值检测与邮件报警
def check_threshold(sensor_value):
if sensor_value['temp'] > 35:
send_email(
to="admin@farm.com",
subject="高温预警!",
body=f"当前温度:{sensor_value['temp']}℃"
)
def send_email(to, subject, body):
import smtplib
# SMTP配置代码...
2. 灌溉自动化控制
# 根据土壤湿度自动打开水泵
if soil_moisture < 30:
GPIO.output(WATER_PUMP_PIN, GPIO.HIGH)
time.sleep(10) # 浇水10秒
GPIO.output(WATER_PUMP_PIN, GPIO.LOW)
五、系统优化方向
1. 边缘计算:在Raspberry Pi上运行TensorFlow Lite实现病虫害图像实时识别
2. 能耗优化:使用MicroPython开发低功耗传感器节点
3. 区块链应用:利用Hyperledger记录农产品溯源数据
4. 数字孪生:通过3D建模构建虚拟农场映射
六、部署注意事项
1. 使用Docker容器化部署服务
2. 配置Nginx反向代理提高Web服务稳定性
3. 采用双机热备方案保证MQTT Broker高可用
4. 定期备份数据库(可结合crontab定时任务)
该系统结合物联网硬件与Python生态,可实现农业环境精准监测、智能决策与远程控制,代码可根据具体传感器型号调整驱动逻辑。建议先搭建最小原型系统,再逐步扩展功能模块。