STM32智能温室管理系统开发指南:利用MQTT/HTTP、Node.js、MySQL及React进行数据可视化(代码示例)

一、项目概述

随着农业现代化的推进,智能温室管理系统应运而生。该项目旨在开发一套基于STM32微控制器的智能温室管理可视化系统,通过实时监测温室环境参数(如温度、湿度、光照度等),并对其进行智能控制,提升温室管理的效率和科学性。本系统的核心在于数据采集和控制,通过集成多种传感器,实现温室环境的自动调节,降低人工管理成本,提升作物产量。

项目解决的问题与价值

  1. 实时监测:通过传感器实时监测温室环境,确保作物在最佳生长条件下生长。

  2. 自动控制:依据采集的数据自动调节温室内部设备(如风扇、加热器、通风窗等),保持稳定的环境状态。

  3. 数据可视化:通过可视化界面展示环境数据,便于用户监控和管理温室。

  4. 远程控制:支持无线通信,用户可随时随地对温室进行管理和控制,提高了便利性。

二、系统架构

本系统的架构设计遵循分层原则,主要包含硬件层、嵌入式软件层、通信层、后台服务层和前端界面层。

硬件选择

  • 单片机:STM32系列微控制器,作为温室环境数据采集和控制的核心。

  • 传感器:集成温度传感器(如DHT11)、湿度传感器、光照传感器(如BH1750)等。

  • 控制电路:使用继电器和驱动模块控制风扇、加热器和通风窗等设备。

  • 通信模块:使用Wi-Fi模块(如ESP8266)实现无线通信。

系统架构图

HTTP
数据库
MQTT/HTTP
传感器数据
控制指令
用户界面
后台服务
数据库
温室控制器
传感器
控制电路

三、环境搭建

硬件环境

  • 开发板:STM32F4系列开发板

  • 传感器:DHT11温湿度传感器、BH1750光照传感器

  • 通信模块:ESP8266 Wi-Fi模块

  • 控制模块:继电器模块

软件环境

  • 开发工具链:STM32CubeIDE

  • 库:HAL库、FreeRTOS(可选)

  • 后端框架:Node.js(或Django/Flask)

  • 数据库:MySQL(或MongoDB)

安装步骤

  1. 安装STM32CubeIDE:下载并安装STM32CubeIDE。

  2. 安装Node.js:访问Node.js官网下载并安装。

  3. 安装数据库:根据选择的数据库,进行安装和配置。

注意事项

  • 确保开发环境的版本兼容。

  • 传感器连接时注意引脚定义,避免接错。

四、代码实现

根据系统架构的设计,逐步实现各功能模块。

1. 嵌入式固件开发

使用C语言编写STM32固件,实现数据采集和控制。

#include "stm32f4xx_hal.h"  // 引入STM32 HAL库,提供硬件抽象层的功能
#include "dht11.h"          // 引入DHT11传感器的驱动库
#include "bh1750.h"         // 引入BH1750光照传感器的驱动库

// 初始化传感器
void Sensor_Init() {
    DHT11_Init();  // 初始化DHT11温湿度传感器
    BH1750_Init(); // 初始化BH1750光照传感器
}

// 采集数据
void Collect_Data() {
    float temperature, humidity;       // 定义温度和湿度变量
    uint16_t light_intensity;          // 定义光照强度变量

    // 从DHT11传感器读取温度和湿度
    DHT11_Read(&temperature, &humidity);
    
    // 从BH1750传感器读取光照强度
    light_intensity = BH1750_Read();
    
    // 处理数据并发送到后端或控制系统
    Send_Data(temperature, humidity, light_intensity);
}
代码说明
1. 包含头文件
  • #include "stm32f4xx_hal.h":引入STM32F4系列的硬件抽象层(HAL)库。这是进行硬件操作的基础库,包括GPIO、UART、I2C等功能的支持。

  • #include "dht11.h":引入DHT11传感器的自定义驱动库。该库提供了对DHT11传感器的初始化和数据读取的函数。

  • #include "bh1750.h":引入BH1750光照传感器的自定义驱动库。该库提供了对BH1750传感器的初始化和数据读取的函数。

2. Sensor_Init 函数
void Sensor_Init() {
    DHT11_Init();  // 初始化DHT11温湿度传感器
    BH1750_Init(); // 初始化BH1750光照传感器
}
  • 功能:初始化传感器。

  • 实现:

  • 调用DHT11_Init()函数,进行DHT11传感器的初始化,通常包括配置GPIO引脚和I/O模式等。

  • 调用BH1750_Init()函数,进行BH1750光照传感器的初始化,设置I2C通信。

3. Collect_Data 函数
void Collect_Data() {
    float temperature, humidity;       // 定义温度和湿度变量
    uint16\_t light\_intensity;          // 定义光照强度变量

    // 从DHT11传感器读取温度和湿度
    DHT11_Read(&temperature, &humidity);
    
    // 从BH1750传感器读取光照强度
    light\_intensity = BH1750\_Read();
    
    // 处理数据并发送到后端或控制系统
    Send\_Data(temperature, humidity, light\_intensity);
}
  • 功能:采集环境数据(温度、湿度和光照强度)。

  • 实现:

  • 定义temperaturehumidity变量用于存储DHT11传感器读取的温度和湿度值。

  • 定义light_intensity变量用于存储BH1750传感器读取的光照强度值。

  • 调用DHT11_Read(&temperature, &humidity)函数,从DHT11传感器读取当前的温度和湿度值,并将其存储到定义的变量中。该函数通常会处理通信过程并进行错误检查。

  • 调用light_intensity = BH1750_Read()函数,从BH1750传感器读取当前的光照强度值。此函数同样会处理I2C通信并返回读取的数据。

  • 最后,调用Send_Data(temperature, humidity, light_intensity)函数,将采集到的数据传输到后端或控制系统。该函数的具体实现可以包括通过串口、MQTT等协议发送数据。

2. 后台服务开发

在Node.js中,我们将继续实现控制逻辑,接收来自前端的控制指令,并将其转发到温室控制器。以下是完整的代码示例。

Node.js 后台服务示例
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const mqtt = require('mqtt'); // 使用MQTT协议进行通信

// 连接到MQTT代理(例如:Mosquitto)
const mqttClient = mqtt.connect('mqtt://broker.hivemq.com'); // 更换为相应的MQTT代理

app.use(bodyParser.json());

// 处理控制指令的API
app.post('/control', (req, res) => {
    const controlCommand = req.body.command;

    // 发布控制指令到MQTT主题
    mqttClient.publish('greenhouse/control', JSON.stringify(controlCommand), (err) => {
        if (err) {
            console.error('Error publishing to MQTT:', err);
            return res.status(500).send('Error publishing control command');
        }
        console.log('Control command published:', controlCommand);
        res.send(`Control command received: ${JSON.stringify(controlCommand)}`);
    });
});

// 处理传感器数据的API
app.post('/data', (req, res) => {
    const sensorData = req.body;

    // 在这里可以将数据存储到数据库
    console.log('Sensor data received:', sensorData);

    // 数据存储逻辑,例如使用MySQL或MongoDB

    res.send('Sensor data received');
});

// 启动服务器
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.log(`Server is running on port ${PORT}`);
});
代码说明
  • MQTT Client:我们使用mqtt库连接到MQTT代理服务器。在这个示例中使用的是免费的HiveMQ代理,实际部署时可以更换为自己的MQTT代理。

  • 控制指令的API:

  • 接收控制指令的POST请求,指令通过req.body.command获取。

  • 使用mqttClient.publish方法将控制指令发布到指定的MQTT主题(例如,greenhouse/control)。

  • 传感器数据的API:

  • 接收传感器数据的POST请求,并输出到控制台,实际应用中应将这些数据存储到数据库中。

  • 服务器启动:在指定的端口上启动Express服务器,监听客户端请求。

数据存储示例

为了存储传感器数据,可以添加一个简单的MySQL或MongoDB存储逻辑。以下是一个使用MySQL的示例。

const mysql = require('mysql');

// 创建MySQL连接
const db = mysql.createConnection({
    host: 'localhost',
    user: 'yourusername',
    password: 'yourpassword',
    database: 'greenhouse_db'
});

// 连接到数据库
db.connect((err) => {
    if (err) {
        console.error('Error connecting to MySQL:', err);
        return;
    }
    console.log('Connected to MySQL');
});

// 更新传感器数据的API
app.post('/data', (req, res) => {
    const sensorData = req.body;

    const query = 'INSERT INTO sensor_data (temperature, humidity, light_intensity, timestamp) VALUES (?, ?, ?, ?)';
    const values = [sensorData.temperature, sensorData.humidity, sensorData.light_intensity, new Date()];

    db.query(query, values, (err, result) => {
        if (err) {
            console.error('Error inserting data into MySQL:', err);
            return res.status(500).send('Error storing sensor data');
        }
        console.log('Sensor data inserted:', result);
        res.send('Sensor data received and stored');
    });
});
代码说明
  • MySQL连接:使用mysql库创建与MySQL数据库的连接,替换为自己的数据库配置。

  • 数据插入逻辑:在接收到传感器数据时,将其插入到sensor_data表中,表结构应包含temperaturehumiditylight_intensitytimestamp等字段。

五、项目总结

在本项目中,我们成功开发了一套基于STM32的智能温室管理可视化系统,全面覆盖了从硬件选择到软件开发的各个环节。该系统通过实时监测温室内的温度、湿度和光照等环境参数,结合智能控制策略,实现了温室环境的自动化管理。

主要功能概述

  1. 实时数据采集:系统利用DHT11和BH1750等传感器,持续监测温室内的温度、湿度和光照强度,并将数据实时传输给中央控制器。

  2. 自动环境控制:根据传感器采集的数据,系统可自动调整风扇、加热器和通风窗等设备,以保持适宜的生长环境,提高作物的生长效率。

  3. 数据可视化:通过Web前端界面,用户可以实时查看温室环境数据和历史记录,直观了解温室的运行状态,并可进行手动控制。

  4. 远程监控与控制:系统支持无线通信,用户可以通过手机或PC进行远程监控和控制,随时随地管理温室,提升了管理的便利性。

  5. 数据分析与智能决策:项目中集成了数据分析模块,可以对收集的环境数据进行分析,挖掘出作物生长的规律,为未来的智能决策提供数据支持。

实现过程回顾

  • 硬件搭建:选择了STM32微控制器作为核心,集成了多种传感器和控制模块,构建了完整的硬件平台。

  • 嵌入式软件开发:使用C语言编写了固件,实现了传感器的初始化、数据采集和控制逻辑。采用了模块化的设计,便于后续的维护和扩展。

  • 后端服务开发:利用Node.js框架开发了RESTful API,处理传感器数据的存储和控制指令的接收,确保系统的高效性和稳定性。

  • 前端界面设计:使用React等前端技术开发用户界面,设计了友好的交互体验,使用户能够轻松地访问和控制温室环境。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客小张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值