随着工业物联网的快速发展,工厂设备的实时监控与数据分析成为提升生产效率和运维水平的关键。本文介绍一种基于STM32F103微控制器、MQTT协议、InfluxDB数据库和Grafana可视化工具的全流程解决方案,实现对工厂设备的实时数据采集、处理和可视化分析。
系统架构与流程
- 数据采集层:STM32F103微控制器通过内置ADC模块采集传感器数据(如温度、压力、振动等),并使用以太网或Wi-Fi模块连接网络。
- 数据传输层:采集的数据通过MQTT协议发布至MQTT代理服务器(如Mosquitto),实现设备与服务器的轻量级通信。
- 数据存储层:MQTT代理将数据转发至InfluxDB时序数据库,存储设备的历史数据和实时数据。
- 数据可视化层:Grafana连接到InfluxDB,通过图表和仪表板展示设备的实时状态、趋势和历史分析。
系统流程如下:
- STM32F103采集设备数据 → 通过MQTT客户端发布至主题 → MQTT代理接收并转发数据 → InfluxDB写入数据 → Grafana查询并展示数据。
代码示例
以下是一个简化的STM32F103嵌入式C代码示例,使用Eclipse Paho MQTT客户端库发布数据:
`c
#include "MQTTClient.h"
#include
#include
#define MQTTBROKER "tcp://yourmqttbrokerip:1883"
#define CLIENTID "STM32Device001"
#define TOPIC "factory/device/data"
// 模拟设备数据采集函数
float readsensordata(void) {
// 实际代码中通过ADC读取传感器值
return 25.5; // 示例温度值
}
int main(void) {
MQTTClient client;
MQTTClientconnectOptions connopts = MQTTClientconnectOptionsinitializer;
MQTTClientmessage pubmsg = MQTTClientmessageinitializer;
MQTTClientdeliveryToken token;
int rc;
// 初始化MQTT客户端
MQTTClientcreate(&client, MQTTBROKER, CLIENTID, MQTTCLIENTPERSISTENCENONE, NULL);
connopts.keepAliveInterval = 20;
connopts.cleansession = 1;
// 连接到MQTT代理
if ((rc = MQTTClientconnect(client, &connopts)) != MQTTCLIENT_SUCCESS) {
printf("连接失败,错误码:%d\n", rc);
return -1;
}
while(1) {
// 采集数据
float temperature = readsensordata();
char payload[50];
snprintf(payload, sizeof(payload), "{\"device_id\":\"001\",\"temperature\":%.2f}", temperature);
// 发布MQTT消息
pubmsg.payload = payload;
pubmsg.payloadlen = strlen(payload);
pubmsg.qos = 1;
pubmsg.retained = 0;
MQTTClientpublishMessage(client, TOPIC, &pubmsg, &token);
MQTTClientwaitForCompletion(client, token, 1000);
// 延时,例如每5秒发送一次
HAL_Delay(5000);
}
MQTTClientdisconnect(client, 1000);
MQTTClientdestroy(&client);
return 0;
}`
数据处理
数据处理主要涉及以下步骤:
- 数据清洗与格式化:在STM32端,将原始ADC值转换为工程单位(如摄氏度),并封装为JSON格式,便于MQTT传输。
- 数据解析与存储:在服务器端,通过MQTT订阅接收数据,解析JSON并写入InfluxDB。InfluxDB的存储结构示例:
- 测量(measurement):
device_metrics
- 标签(tags):
device_id=001
- 字段(fields):
temperature=25.5
- 时间戳:自动生成或从消息中提取。
- 数据分析与可视化:Grafana通过InfluxQL查询语言从InfluxDB中提取数据,创建仪表板展示实时曲线、历史趋势和告警阈值。例如,设置温度超过30°C时触发告警。
总结
本系统结合嵌入式C编程、MQTT通信、时序数据库和可视化工具,构建了一个高效的工厂设备监控方案。STM32F103作为边缘设备负责数据采集和传输,InfluxDB确保数据的高效存储,Grafana提供直观的数据分析界面。通过代码示例和流程说明,开发者可快速实现类似系统,并根据实际需求扩展功能,如添加更多传感器或复杂数据处理逻辑。