隨著工業物聯網的快速發展,工廠設備的實時監控與數據分析成為提升生產效率和運維水平的關鍵。本文介紹一種基于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提供直觀的數據分析界面。通過代碼示例和流程說明,開發者可快速實現類似系統,并根據實際需求擴展功能,如添加更多傳感器或復雜數據處理邏輯。