基于EMQX+Flask+InfluxDB+Grafana打造多協議物聯網云平臺:MQTT/HTTP設備接入與數據可視化流程(附代碼示例)

摘要:?本文深入淺出地介紹了物聯網、云平臺、MQTT、HTTP、數據可視化等核心概念,并結合 EMQX、Flask、InfluxDB、Grafana 等主流工具,手把手教你搭建一個支持多協議的物聯網云平臺。文章結構清晰,圖文并茂,代碼翔實易懂,旨在幫助讀者快速掌握物聯網云平臺搭建的核心技術。

關鍵詞:?物聯網,云平臺,MQTT,HTTP,數據可視化,EMQX,Flask,InfluxDB,Grafana


一、物聯網基礎知識

1.1 物聯網概述

物聯網(IoT,Internet of Things)是指通過各種信息傳感器、射頻識別技術、全球定位系統等,實時采集任何需要監控、連接、互動的物體或過程,實現物與物、物與人的泛在連接,進而實現對物品和過程的智能化感知、識別和管理。

1.2 物聯網架構

物聯網系統架構通常分為三層:

  • 感知層:?負責采集數據,包括各種傳感器、RFID 標簽、GPS 模塊等。
  • 網絡層:?負責數據傳輸,包括各種網絡協議、通信技術等,例如 WiFi、藍牙、Zigbee、NB-IoT 等。
  • 應用層:?負責數據處理和應用呈現,例如數據分析、遠程控制、智能決策等。

二、云平臺與數據可視化

2.1 云平臺

云平臺是指基于互聯網的相關服務的增加、使用和交付模式,通常涉及通過互聯網來提供動態易擴展且經常是虛擬化的資源。 云平臺可以為物聯網應用提供強大的計算、存儲和網絡資源,降低物聯網應用開發和部署的成本。

2.2 數據可視化

數據可視化是指將數據以圖形、圖表等可視化形式展示出來,幫助用戶更直觀地理解數據,洞察數據背后的規律和趨勢。

三、常用協議與工具介紹

3.1 MQTT 協議

MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸)是一種輕量級的消息發布/訂閱協議,專為低帶寬、低功耗設備和網絡而設計。MQTT 廣泛應用于物聯網領域,特別適用于資源受限的設備和不可靠的網絡環境。

3.2 HTTP 協議

HTTP(Hypertext Transfer Protocol,超文本傳輸協議)是一種應用層協議,用于在 Web 瀏覽器和 Web 服務器之間傳輸信息。 HTTP 協議簡單易用,被廣泛應用于各種網絡應用,包括物聯網領域。

3.3 EMQX

EMQX 是一款開源、高性能、可擴展的 MQTT 消息服務器,支持百萬級并發連接和消息吞吐。

3.4 Flask

Flask 是一個輕量級的 Web 應用框架,使用 Python 編寫,易于學習和使用,適合快速搭建 Web 應用和 API 接口。

3.5 InfluxDB

InfluxDB 是一款開源的時序數據庫,專為存儲和查詢時間序列數據而設計,適用于存儲物聯網傳感器數據、監控數據等。

3.6 Grafana

Grafana 是一款開源的數據可視化工具,可以連接多種數據源,創建美觀、功能強大的儀表盤,實時展示數據。

四、多協議物聯網云平臺搭建

本項目將搭建一個支持 MQTT 和 HTTP 協議的物聯網云平臺,實現以下功能:

  • 多協議支持: 同時支持 MQTT 和 HTTP 協議的設備接入。
  • 數據采集與存儲: 實時采集來自不同協議設備的數據,并將其存儲到 InfluxDB 數據庫。
  • 數據可視化: 使用 Grafana 對采集到的數據進行可視化展示。
4.1 系統架構

?

4.2 代碼實現

1. HTTP 服務器搭建 (Flask)

# 導入 Flask 庫
from flask import Flask, request, jsonify# 創建 Flask 應用
app = Flask(__name__)# 定義 HTTP 接口,接收 POST 請求
@app.route('/data', methods=['POST'])
def receive_data():# 獲取請求數據data = request.get_json()# 數據處理邏輯,例如數據校驗、格式轉換等# ...# 將數據寫入 InfluxDB (示例)from influxdb import InfluxDBClientclient = InfluxDBClient('localhost', 8086, 'user', 'password', 'iot_data')json_body = [{"measurement": "sensor_data","tags": {"sensor_id": data.get("sensor_id")},"fields": {"temperature": data.get("temperature"),"humidity": data.get("humidity")}}]client.write_points(json_body)# 返回響應return jsonify({'message': 'Data received successfully!'}), 200# 啟動 Flask 應用
if __name__ == '__main__':app.run(debug=True)

代碼說明:

  • 使用?Flask?框架創建 HTTP 服務器,并定義?/data?接口接收 POST 請求。
  • 使用?request.get_json()?獲取 HTTP 請求中的 JSON 數據。
  • 進行數據處理,例如數據校驗、格式轉換等。
  • 使用?InfluxDBClient?連接 InfluxDB 數據庫,并將數據寫入數據庫。
  • 返回 JSON 格式的響應,告知客戶端數據接收成功。

2. MQTT 消息處理 (Python)

# 導入必要的庫
import paho.mqtt.client as mqtt
from influxdb import InfluxDBClient
import json# MQTT Broker 配置
MQTT_BROKER = "localhost"
MQTT_PORT = 1883
MQTT_TOPIC = "sensor/data"# InfluxDB 配置
INFLUXDB_HOST = "localhost"
INFLUXDB_PORT = 8086
INFLUXDB_USER = "user"
INFLUXDB_PASSWORD = "password"
INFLUXDB_DATABASE = "iot_data"# 創建 InfluxDB 客戶端
influxdb_client = InfluxDBClient(host=INFLUXDB_HOST,port=INFLUXDB_PORT,username=INFLUXDB_USER,password=INFLUXDB_PASSWORD,database=INFLUXDB_DATABASE
)# 連接到 MQTT Broker
def on_connect(client, userdata, flags, rc):print("Connected to MQTT Broker with result code " + str(rc))client.subscribe(MQTT_TOPIC)# 接收 MQTT 消息
def on_message(client, userdata, msg):# 解析數據data = json.loads(msg.payload.decode())# 構建 InfluxDB 數據點influxdb_data = [{"measurement": "sensor_data","tags": {"sensor_id": data.get("sensor_id"),},"fields": {"temperature": data.get("temperature"),"humidity": data.get("humidity"),}}]# 寫入 InfluxDBinfluxdb_client.write_points(influxdb_data)print("Data written to InfluxDB: " + str(influxdb_data))# 創建 MQTT 客戶端
mqtt_client = mqtt.Client()
mqtt_client.on_connect = on_connect
mqtt_client.on_message = on_message
mqtt_client.connect(MQTT_BROKER, MQTT_PORT, 60)# 啟動 MQTT 客戶端
mqtt_client.loop_start()# 保持程序運行
while True:pass

代碼說明:

  • 使用?paho.mqtt.client?連接到 MQTT Broker,并訂閱指定主題。
  • 當收到 MQTT 消息時,使用?json.loads()?解析消息內容。
  • 將解析后的數據構建成 InfluxDB 數據點格式。
  • 使用?influxdb_client.write_points()?將數據寫入 InfluxDB 數據庫。

3. 數據可視化 (Grafana)

  • 安裝 Grafana 并配置數據源連接到 InfluxDB 數據庫。
  • 創建儀表盤并在儀表盤上添加圖表,例如折線圖、柱狀圖等。
  • 配置圖表的數據源為 InfluxDB,并編寫查詢語句從 InfluxDB 中獲取數據。
  • 根據需要配置圖表的樣式、標題、坐標軸等屬性,使數據展示更加直觀易懂。

示例 Grafana 查詢語句:

SELECT "temperature", "humidity" FROM "sensor_data" WHERE time > now() - 1h

該查詢語句將從?sensor_data?measurement 中查詢最近 1 小時的溫度和濕度數據。

本項目通過結合 Flask、EMQX、InfluxDB 和 Grafana 等工具,搭建了一個支持 MQTT 和 HTTP 協議的物聯網云平臺,并實現了數據的采集、存儲和可視化展示。該平臺可以靈活擴展,支持更多類型的設備和協議接入,并根據實際需求進行功能定制。

注意:

  • 以上代碼僅供參考,實際應用中需要根據具體需求進行修改。
  • 請確保已安裝所有依賴庫,例如?paho-mqttinfluxdbflask?等。
  • 在實際部署中,需要考慮數據的安全性、系統的穩定性等因素。

想要具體的代碼以及思路可以私信我!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/45307.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/45307.shtml
英文地址,請注明出處:http://en.pswp.cn/web/45307.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2024-07-14 Unity插件 Odin Inspector1 —— 插件介紹

文章目錄 1 介紹2 模塊3 學習目的 1 介紹 ? Odin Inspector 是 Unity 的一個插件,擁有強大、自定義和用戶友好的編輯器,而無需編寫任何自定義編輯器代碼,使得編程過程中的數據可視化更容易實現。 ? 具體功能包括: 更舒適美觀…

軟件設計師(中級)備考視頻教程

一、視頻介紹 本視頻主要包括軟件設計師系統學習教程,通過學習本視頻,可以幫助考生高效且深入地掌握軟件設計師資格考試核心知識,全方位覆蓋考試要點,從而輕松備戰考試。視頻不僅涵蓋了考試所需的全面知識體系,還通過直…

Linux--USB驅動開發(二)插入USB后的內核執行程序

一、USB總線驅動程序的作用 a)識別USB設備 1.1 分配地址 1.2 并告訴USB設備(set address) 1.3 發出命令獲取描述符 b)查找并安裝對應的設備驅動程序 c)提供USB讀寫函數 二、USB設備工作流程 由于內核自帶了USB驅動,所以我們先插入一個U…

Google Colab 云端硬盤路徑讀取

加載云端硬盤 需要在左上角點擊這個文件圖標; from google.colab import drive drive.mount("/content/drive") # 掛載云端硬盤import os path"/content/drive/MyDrive/TextClassificationCustom" os.chdir(path) # 以路徑path作為當前工作目…

在 SwiftUI 中的作用域動畫

文章目錄 前言簡單示例動畫視圖修飾符使用多個可動畫屬性使用 ViewBuilder總結 前言 從一開始,動畫就是 SwiftUI 最強大的功能之一。你可以在 SwiftUI 中快速構建流暢的動畫。唯一的缺點是每當我們需要運行多步動畫或將動畫范圍限定到視圖層次結構的特定部分時&…

docker emqx 配置密碼和禁用匿名連接

mqtt版本emqx/emqx:4.4.3 1.首先把鏡像內目錄/opt/emqx/etc拷貝到本地 2.做映射 3.allow_anonymous, false改成true 4. 5.MQTTX連不上的話看看下圖的有沒有打開

【nginx】nginx的優點

目錄 一、高性能1.1 高并發處理1.2 低內存消耗1.3 快速響應 二、高擴展性2.1 模塊化設計2.2 動態模塊擴展 三、高可靠性3.1 核心框架穩定3.2 進程管理3.3 負載均衡與健康檢查3.4 熱部署 四、功能豐富4.1 反向代理4.2 HTTP緩存4.3 安全功能 五、易于配置和管理5.1 配置文件簡單5…

windows下環境變量開啟方式

第一種方法: 使用快捷鍵打開“運行”對話框:按下 Win R 組合鍵,這將打開“運行”窗口。 輸入系統屬性命令:在“運行”窗口中輸入 sysdm.cpl 然后按回車鍵。這將打開“系統屬性”對話框。【sysdm.cpl是"System Data Manager…

【Go系列】Go的指針

承上啟下 我們在前面的文章中,首先介紹了GO的基礎語法,然后介紹了Goroutine和channel這個最具有特色的東西,同時介紹了Sync和context,以及在上篇文章中詳細距離說明了Go里面用于高并發的多種寫法。基礎的使用方法也告一段落了&…

Linux多線程編程-哲學家就餐問題詳解與實現(C語言)

在哲學家就餐問題中,假設有五位哲學家圍坐在圓桌前,每位哲學家需要進行思考和進餐兩種活動。他們的思考不需要任何資源,但進餐需要使用兩根筷子(左右兩側各一根)。筷子是共享資源,哲學家們在進行進餐時需要…

Qt qml詳細介紹

一.基本類型 QML的基本類型包括了很多不同的類型,這些類型可以用于定義用戶界面元素、屬性和信號。以下是一些常用的QML基本類型及其詳細介紹: 數值類型:包括整數類型(int、uint、short、ushort等)和浮點數類型&#…

c++ :運算符重載函數中的細節

賦值運算符重載與拷貝構造函數 (1)區分初始化時的賦值(一般就叫初始化),和非初始化時的賦值(一般就叫賦值) (2)實驗驗證初始化和賦值時各自對應 避免賦值運算符中的自賦值 (1)自賦值就是Person a; a a; (2)自賦值如…

鞭炮插畫:成都亞恒豐創教育科技有限公司

鞭炮插畫:年味里的絢爛記憶 在歲末年初的溫柔時光里,總有一抹色彩,能瞬間喚醒沉睡的年味——那便是鞭炮插畫中躍動的紅與金,成都亞恒豐創教育科技有限公司 它們不僅僅是紙與墨的交織,更是情感與記憶的橋梁&#xff0c…

自適應手機版大學職業技術學院網站模版源碼系統 帶完整的安裝代碼包以及搭建部署教程

系統概述 隨著智能手機的普及和移動互聯網技術的飛速發展,用戶越來越傾向于通過移動設備訪問網站。對于大學職業技術學院而言,一個能夠自適應各種屏幕尺寸、操作流暢、內容豐富的移動端網站,不僅能夠提升用戶體驗,還能有效擴大學…

最短路之樸素版的dij板子

模板&#xff1a; 注意這個只是單向的雙向的需要在更新一次 #include<bits/stdc.h>using namespace std;typedef long long ll; typedef pair<int, int>PII; const int N2e510; const int MOD 998244353; const int INF0X3F3F3F3F; const int dx[]{-1,1,0,0,-1,…

【Python Tips】將一個列表List元素添加進另一個列表List

一、引言 在處理Python列表數據類型時&#xff0c;有時需要合并兩個列表&#xff0c;下面是幾種列表合并的操作代碼&#xff0c;尤其是對于長列表的高效合并方式&#xff0c;記錄在此。 二、列表合并方式 1. 使用extend方法 extend方法將一個列表中的所有元素添加到另一個列表…

mysql快速精通(三)表關系

主打一個實用 一. 一對多&#xff08;多對一&#xff09;關系 例如班級和學生&#xff0c;這種類型我們一般建兩個表,一方為主表&#xff0c;多方為從表 二. 多對多 例如課程與學生&#xff0c;這種類型我們一般需要建三張表&#xff0c;兩張一方主表&#xff0c;與一張多方從表…

初識影刀:EXCEL根據部門篩選低值易耗品

第一次知道這個辦公自動化的軟件還是在招聘網站上&#xff0c;了解之后發現對于辦公中重復性的工作還是挺有幫助的&#xff0c;特別是那些操作非EXCEL的重復性工作&#xff0c;當然用在EXCEL上更加方便&#xff0c;有些操作比寫VBA便捷。 下面就是一個了解基本操作后&#xff…

[Linux]CentOS軟件的安裝

一、Linux 軟件包管理器 yum 1.Linux安裝軟件的方式 在linux中安裝軟件常用的有三種方式&#xff1a; 源代碼安裝&#xff08;我們還需要進行編譯運行后才可以&#xff0c;很麻煩&#xff09; rpm安裝&#xff08;Linux的安裝包&#xff0c;需要下載一些rpm包&#xff0c;但是…

基于機器學習的鋰離子電池容量估計(MATLAB R2021B)

鋰離子電池已經廣泛應用于電動汽車或混合動力汽車的能源存儲裝置。由于電化學成分的衰退&#xff0c;鋰離子電池隨著使用時間的增加&#xff0c;電池性能不斷退化&#xff0c;導致電池容量和功率發生衰退。電池容量衰退的因素主要有金屬鋰沉積&#xff0c;活性物質分解和電解液…