标题:基于esp32python的水果温室大棚监测系统实现

系统总体框架图

该系统采用典型的物联网分层架构,ESP32作为边缘节点负责数据采集和初步控制,服务器负责数据聚合和复杂逻辑,用户通过客户端进行监控。

mime

flowchart TD
    subgraph A [应用层 - 用户界面]
        A1[Web仪表盘<br>Flask/Django]
        A2[手机APP<br>App Inventor/UniApp]
        A3[微信小程序]
    end

    subgraph B [服务层 - 大脑与存储<br>(Python的天下)]
        B1[Web服务器框架<br>Flask/FastAPI]
        B2[数据库<br>SQLite/MySQL/InfluxDB]
        B3[消息代理<br>MQTT Broker<br>EMQX/Mosquitto]
    end

    subgraph C [固件层 - 边缘智能<br>(ESP32运行MicroPython)]
        C1[网络连接<br>Wi-Fi Manager]
        C2[传感器数据采集<br>DHT22, BH1750等]
        C3[执行器控制<br>继电器, 水泵等]
        C4[MQTT客户端<br>发布/订阅消息]
    end

    subgraph D [硬件层 - 手脚与感官]
        D1[ESP32开发板]
        D2[温湿度传感器DHT22]
        D3[光照传感器BH1750]
        D4[土壤湿度传感器]
        D5[继电器模块]
        D6[执行机构<br>水泵、风扇、补光灯]
    end

    C -- MQTT协议发布数据 --> B3;
    B3 -- MQTT协议推送指令 --> C;
    B1 -- 查询/写入 --> B2;
    A -- HTTP/WebSocket --> B1;

1. 硬件层 (Hardware Layer)

  • 核心控制器

    • ESP32开发板 (如ESP32-WROOM-32):负责连接所有传感器和执行器,处理数据并通过Wi-Fi通信。性价比高,功能强大。

  • 传感器模块 (大棚的“感官”):

    • 温湿度传感器DHT22 (AM2302),精度高于DHT11,非常适合温室环境。使用数字接口连接。

    • 光照强度传感器GY-30 (BH1750),I2C接口,直接输出光照度值(Lux)。

    • 土壤湿度传感器:电容式或电阻式探头。注意:电阻式易腐蚀,建议使用电容式。输出模拟信号,连接ESP32的ADC引脚。

    • 可选传感器:CO2浓度传感器(SCD30)、大气压传感器(BMP280)、摄像头(用于果实生长监测)。

  • 执行器模块 (大棚的“手脚”):

    • 继电器模块:用于控制高功率设备,如水泵(灌溉)、风扇(降温/通风)、补光灯(补光)、卷帘电机(遮阳)。

  • 供电系统

    • 可采用220V转5V电源适配器供电,如果部署在野外无市电场景,可配合太阳能板+蓄电池方案。

2. 固件层 (Firmware Layer) - ESP32 (MicroPython)

这是写在ESP32里的MicroPython代码的主要功能。

  • 主要功能

    1. 硬件初始化:初始化I2C、ADC、GPIO等引脚。

    2. Wi-Fi连接:编写可靠的Wi-Fi连接代码,最好包含自动重连机制。

    3. 传感器数据读取:定时循环读取所有传感器的数据。

      python

      # 伪代码示例
      import dht
      from machine import Pin, ADC, I2C
      import time
      
      d = dht.DHT22(Pin(23))
      soil_moisture = ADC(Pin(34))
      
      while True:
          d.measure()
          temp = d.temperature()
          humidity = d.humidity()
          moisture_value = soil_moisture.read() # 读取模拟值
          time.sleep(2)
    4. 数据上报 (MQTT Client):将读取到的数据打包成JSON格式,通过MQTT协议发布到远程服务器。

      json

      {
        "device_id": "GH01",
        "temp": 25.6,
        "humidity": 65,
        "light": 12345,
        "soil_moisture": 2048
      }
    5. 指令接收与执行:订阅MQTT服务器下发的指令主题(如gh01/control/water_pump),收到指令后控制相应的继电器。

      python

      # 伪代码:收到消息后回调函数
      def on_message(topic, msg):
          if topic == b'gh01/control/water_pump':
              if msg == b'ON':
                  relay.on()
              elif msg == b'OFF':
                  relay.off()
    6. 本地逻辑控制(可选):可以添加简单的本地自动控制逻辑,防止网络中断时系统完全失效(如if soil_moisture < threshold: turn_on_pump())。

3. 服务层 (Server Layer) - Python Backend

这是运行在云服务器或树莓派等本地服务器上的Python程序,是系统的大脑。

  • MQTT Broker(消息代理)

    • 使用 EMQX 或 Mosquitto。所有ESP32客户端向其发布数据,它也负责将控制指令推送给指定的ESP32。

  • MQTT订阅服务(数据接入)

    • 编写一个Python脚本,使用paho-mqtt库订阅Broker的主题,接收所有ESP32上传的数据。

  • 数据存储服务

    • 接收到的数据被解析后,存入数据库。

    • 数据库选型

      • SQLite:简单,适合轻型应用和原型开发。

      • MySQL/PostgreSQL:成熟的关系型数据库,存储结构化数据。

      • InfluxDB:专为时序数据(如传感器数据)设计,读写效率高,支持强大的时间序列查询。

  • Web应用服务(API与逻辑)

    • 使用 Flask 或 FastAPI 框架编写Web服务器。

    • 提供RESTful API

      • GET /api/data/latest:为前端提供最新的传感器数据。

      • POST /api/control/pump:前端发送指令,服务器通过MQTT转发给ESP32。

    • 业务逻辑:实现复杂的预警规则(如温度超过30度自动发送告警邮件)、数据统计分析等。

4. 应用层 (Application Layer) - UI

为用户提供可视化界面。

  • Web仪表盘(首选)

    • 使用 Vue.js, React 或 Bootstrap 等前端框架构建界面。

    • 功能:以图表(如ECharts)形式展示温湿度、光照度的历史曲线;显示实时数据;提供手动控制的按钮。

  • 手机APP/微信小程序

    • 开发跨平台APP或小程序,方便用户随时随地查看。后端仍然调用第3层编写的RESTful API。

系统工作流程

  1. 数据上行:ESP32 -> 采集传感器数据 -> 通过MQTT发布 -> MQTT Broker -> Python订阅服务 -> 存入数据库。

  2. 用户查看:用户打开Web页面 -> 前端通过HTTP请求调用Flask API -> Flask从数据库查询数据 -> 返回给前端渲染显示。

  3. 控制下行:用户在Web点击“打开水泵” -> 前端调用Flask API -> Flask通过MQTT向特定主题发布ON指令 -> MQTT Broker推送指令 -> ESP32订阅并收到该指令 -> 执行打开继电器操作。

优化与进阶

  • OTA升级:通过网络远程更新ESP32上的固件程序,无需人工现场烧录。

  • 边缘计算:在ESP32上做更复杂的数据预处理和判断,减轻服务器压力。

  • 多大棚管理:服务层设计上要支持多个ESP32设备,每个设备有唯一ID。

  • 视频监控:集成ESP32-CAM模块,不仅看数据,还能看实时画面。

代码实现:

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐