嵌入式C++、STM32F103、MQTT、InfluxDB存储和Grafana可视化:工厂设备的实时监控和数据分析系统流程(代码示例)

1. 项目概述

随着工业4.0的推进,智能制造已成为制造业发展的必然趋势。本文介绍了一套基于STM32和MQTT协议的小型工厂设备监控系统,可实现对工厂设备的实时监控和数据分析,有效提高生产效率和安全性。

系统主要包括三个部分:

  1. 设备端:使用STM32 MCU连接各种传感器,采集设备运行数据并通过MQTT协议发送
  2. 本地服务器:运行MQTT Broker接收数据,使用InfluxDB存储,Grafana可视化
  3. 管理端:通过Web界面实时监控设备状态

2. 系统设计

2.1 系统架构

系统整体架构如下图所示:

2.2 硬件设计

设备端硬件主要包括:

  • STM32F103 MCU
  • DHT11温湿度传感器
  • BMP280压力传感器
  • YF-S201流量传感器
  • ESP8266 WiFi模块

硬件连接示意图如下:

2.3 软件设计

软件架构如下:

主要软件模块:

  • STM32固件:基于FreeRTOS,实现传感器数据采集和MQTT通信
  • MQTT Broker:使用Mosquitto
  • 数据存储:InfluxDB时序数据库
  • 数据可视化:Grafana

3. 代码实现

3.1 STM32固件核心代码

/* 初始化传感器 */
void sensor_init(void)
{
    DHT11_Init();  // 初始化DHT11温湿度传感器
    BMP280_Init(); // 初始化BMP280压力传感器
    Flow_Sensor_Init(); // 初始化YF-S201流量传感器
}

/* 采集传感器数据任务 */
void vTaskSensorRead(void *pvParameters)
{
    float temp, humi, press, flow;
    
    while(1)
    {
        // 读取各传感器数据
        DHT11_Read_Data(&temp, &humi);
        press = BMP280_ReadPressure();
        flow = Flow_Sensor_Read();
        
        /* 打包数据为JSON格式 */
        sprintf(mqttMsg, "{\"temp\":%.1f,\"humi\":%.1f,\"press\":%.1f,\"flow\":%.2f}", 
                temp, humi, press, flow);
        
        /* 发送MQTT消息到主题"sensor/data" */
        MQTT_Publish("sensor/data", mqttMsg, strlen(mqttMsg), 0);
        
        vTaskDelay(1000); // 每秒采集一次数据
    }
}

/* MQTT连接任务 */
void vTaskMQTTConnect(void *pvParameters)
{
    while(1)
    {
        if(!MQTT_IsConnected())
        {
            MQTT_Connect("STM32Client"); // 尝试连接MQTT Broker
        }
        vTaskDelay(5000); // 每5秒检查一次连接状态
    }
}

int main(void)
{
    /* 初始化硬件 */
    SystemInit();
    sensor_init();
    MQTT_Init();
    
    /* 创建FreeRTOS任务 */
    xTaskCreate(vTaskSensorRead, "SensorRead", 128, NULL, 1, NULL);
    xTaskCreate(vTaskMQTTConnect, "MQTTConnect", 128, NULL, 2, NULL);
    
    /* 启动FreeRTOS调度器 */
    vTaskStartScheduler();
    
    while(1);
}

说明:

  • 使用FreeRTOS创建两个任务:传感器数据读取和MQTT连接维护
  • 传感器数据以JSON格式打包,便于后续处理
  • 使用MQTT_Publish函数发布数据到指定主题
  • 主函数中初始化硬件并创建任务,然后启动FreeRTOS调度器

3.2 服务器端配置

MQTT Broker配置(mosquitto.conf):

listener 1883
allow_anonymous true

说明:

  • 设置MQTT Broker监听1883端口
  • 允许匿名连接,简化开发阶段的认证过程

InfluxDB数据接收脚本(Python):

import paho.mqtt.client as mqtt
from influxdb import InfluxDBClient
import json

# MQTT回调函数
def on_message(client, userdata, message):
    payload = json.loads(message.payload)
    json_body = [
        {
            "measurement": "sensor_data",
            "tags": {
                "device": "STM32"
            },
            "fields": payload
        }
    ]
    influx_client.write_points(json_body)

# 连接MQTT Broker
mqtt_client = mqtt.Client()
mqtt_client.on_message = on_message
mqtt_client.connect("localhost", 1883)
mqtt_client.subscribe("sensor/data")

# 连接InfluxDB
influx_client = InfluxDBClient('localhost', 8086, 'root', 'root', 'factory_db')

mqtt_client.loop_forever()

说明:

  • 使用paho-mqtt库创建MQTT客户端,连接到本地MQTT Broker
  • 订阅"sensor/data"主题,接收传感器数据
  • 使用InfluxDB-Python库连接到本地InfluxDB数据库
  • 在on_message回调函数中,将接收到的JSON数据转换为InfluxDB的数据点格式
  • 使用write_points函数将数据写入InfluxDB
  • mqtt_client.loop_forever()保持脚本运行,持续监听MQTT消息

4. 系统功能展示

4.1 Grafana数据可视化

Grafana是一个强大的开源数据可视化工具,本项目中主要用于创建实时监控仪表板。以下是Grafana的主要配置步骤:

  1. 数据源配置:

  2. 仪表板创建:

    • 新建仪表板
    • 添加面板,选择InfluxDB数据源
    • 使用InfluxQL查询语言编写查询
  3. 面板类型:

    • 折线图: 显示温度、湿度、压力、流量随时间的变化趋势
    • 仪表盘: 显示当前各参数值
    • 热力图: 展示参数分布情况
  4. 时间范围设置:

    • 支持实时更新和历史数据查看
    • 可设置自动刷新间隔

示例查询:

SELECT mean("temp") AS "temperature", 
       mean("humi") AS "humidity",
       mean("press") AS "pressure",
       mean("flow") AS "flow_rate"
FROM "sensor_data"
WHERE $timeFilter
GROUP BY time($__interval) fill(null)

4.2 告警设置

Grafana提供了强大的告警功能,可以基于数据设置各种告警规则:

  1. 告警规则设置:

    • 在面板编辑中启用告警
    • 设置条件,如: 当温度>30°C持续5分钟
    • 配置告警频率和等待时间
  2. 通知渠道:

    • 邮件通知
    • Slack消息
    • WebHook回调
  3. 告警状态:

    • OK: 正常状态
    • Pending: 满足条件但未达到持续时间
    • Alerting: 触发告警
  4. 告警历史:

    • 记录所有告警事件
    • 支持查看和分析历史告警

告警流程图:

通过这些详细的告警设置,管理人员可以及时发现并处理异常情况,大大提高了生产效率和安全性。

4.3 数据分析功能

除了实时监控,Grafana还提供了强大的数据分析功能:

  1. 数据聚合:

    • 支持各种聚合函数:平均值、最大值、最小值等
    • 可按不同时间间隔聚合:小时、天、周、月
  2. 数据对比:

    • 支持同比、环比分析
    • 可创建多时间序列对比图表
  3. 数据导出:

    • CSV格式导出原始数据
    • 图表导出为图片或PDF
  4. 自定义查询:

    • 支持直接编写InfluxQL查询语句
    • 可创建复杂的多指标分析图表

示例:温度趋势分析查询

SELECT mean("temp") AS "avg_temp", 
       max("temp") AS "max_temp", 
       min("temp") AS "min_temp"
FROM "sensor_data"
WHERE $timeFilter
GROUP BY time(1h) fill(null)

5. 项目总结

5.1 系统优势

  1. 实时性: 基于MQTT协议的实时数据传输,保证了监控的及时性。
  2. 可扩展性: 采用模块化设计,易于添加新的传感器和功能。
  3. 可视化能力: 利用Grafana强大的可视化功能,直观展示设备状态。
  4. 告警机制: 灵活的告警设置,帮助及时发现并处理异常情况。
  5. 数据分析: 支持历史数据查询和分析,辅助决策制定。
  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

极客小张

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

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

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

打赏作者

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

抵扣说明:

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

余额充值