0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

通過物聯(lián)網(wǎng)管理多臺(tái)MQTT設(shè)備-基于米爾T527開發(fā)板

米爾電子 ? 2024-05-10 08:01 ? 次閱讀

本篇測評(píng)由電子工程世界的優(yōu)秀測評(píng)者“JerryZhen”提供。


本文將介紹基于米爾電子MYD-LT527開發(fā)板的網(wǎng)關(guān)方案測試。

一、系統(tǒng)概述

基于米爾-全志 T527設(shè)計(jì)一個(gè)簡易的物聯(lián)網(wǎng)網(wǎng)關(guān),該網(wǎng)關(guān)能夠管理多臺(tái)MQTT設(shè)備,通過MQTT協(xié)議對(duì)設(shè)備進(jìn)行讀寫操作,同時(shí)提供HTTP接口,允許用戶通過HTTP協(xié)議與網(wǎng)關(guān)進(jìn)行交互,并對(duì)設(shè)備進(jìn)行讀寫操作。

二、系統(tǒng)架構(gòu)

  1. 網(wǎng)關(guān)服務(wù):基于FastAPI框架構(gòu)建的Web服務(wù),提供HTTP接口。
  2. MQTT客戶端:負(fù)責(zé)與MQTT設(shè)備通信,管理設(shè)備連接、消息發(fā)布和訂閱。
  3. 設(shè)備管理:維護(hù)一個(gè)設(shè)備列表,記錄設(shè)備的基本信息和狀態(tài)。

數(shù)據(jù)存儲(chǔ):使用內(nèi)存或數(shù)據(jù)庫存儲(chǔ)設(shè)備數(shù)據(jù),確保數(shù)據(jù)持久化。

三、組件設(shè)計(jì)

MQTT組件

  • 負(fù)責(zé)與MQTT broker建立連接。
  • 訂閱設(shè)備主題,接收設(shè)備發(fā)送的消息。

發(fā)布消息到設(shè)備,實(shí)現(xiàn)遠(yuǎn)程控制。

設(shè)備管理組件

  • 維護(hù)一個(gè)設(shè)備列表,記錄設(shè)備的唯一標(biāo)識(shí)符(如設(shè)備ID)、MQTT主題、連接狀態(tài)等信息。

提供設(shè)備增刪改查的方法。

HTTP組件

  • 基于FastAPI定義HTTP接口。
  • 接收用戶請(qǐng)求,調(diào)用MQTT組件和設(shè)備管理組件進(jìn)行相應(yīng)操作。

返回操作結(jié)果給用戶。

四、接口設(shè)計(jì)

設(shè)備列表

  • GET /devices:返回所有設(shè)備的列表。
  • POST /devices:添加新設(shè)備到網(wǎng)關(guān)。

DELETE /devices/{device_id}:從網(wǎng)關(guān)中刪除指定設(shè)備。

設(shè)備詳情

GET /devices/{device_id}:返回指定設(shè)備的詳細(xì)信息。

設(shè)備數(shù)據(jù)

  • GET /devices/{device_id}/data:獲取指定設(shè)備的最新數(shù)據(jù)。

POST /devices/{device_id}/data:發(fā)送數(shù)據(jù)到指定設(shè)備。

設(shè)備控制

POST /devices/{device_id}/control:發(fā)送控制命令到指定設(shè)備。

五、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)

設(shè)備信息

  • 設(shè)備ID (device_id):唯一標(biāo)識(shí)設(shè)備的字符串。
  • MQTT主題 (mqtt_topic):設(shè)備在MQTT broker上的主題。
  • 連接狀態(tài) (connection_status):表示設(shè)備是否在線的布爾值。

其他設(shè)備屬性(如名稱、描述等)。

設(shè)備數(shù)據(jù)

  • 設(shè)備ID (device_id):關(guān)聯(lián)設(shè)備信息的設(shè)備ID。
  • 時(shí)間戳 (timestamp):數(shù)據(jù)發(fā)送或接收的時(shí)間。

數(shù)據(jù)內(nèi)容 (data):設(shè)備發(fā)送或接收的具體數(shù)據(jù),可以是JSON格式或其他格式。

六、安全性考慮

  • 使用HTTPS協(xié)議提供安全的HTTP通信。
  • 實(shí)現(xiàn)用戶認(rèn)證和授權(quán)機(jī)制,確保只有授權(quán)用戶可以訪問和操作設(shè)備。

對(duì)于敏感操作(如刪除設(shè)備),要求用戶進(jìn)行二次確認(rèn)或提供額外的安全措施。

七、部署與擴(kuò)展

  • 使用Docker容器化部署網(wǎng)關(guān)服務(wù),便于管理和擴(kuò)展。

根據(jù)需要,可以水平擴(kuò)展網(wǎng)關(guān)實(shí)例以處理更多的設(shè)備連接和請(qǐng)求。

八、實(shí)現(xiàn)步驟

  1. 安裝所需的Python庫:fastapi, uvicorn, paho-mqtt等。
  2. 創(chuàng)建FastAPI應(yīng)用并定義路由。
  3. 實(shí)現(xiàn)MQTT組件,包括與MQTT broker的連接、訂閱、發(fā)布等功能。
  4. 實(shí)現(xiàn)設(shè)備管理組件,維護(hù)設(shè)備列表并提供增刪改查的方法。
  5. 實(shí)現(xiàn)HTTP組件,調(diào)用MQTT組件和設(shè)備管理組件處理用戶請(qǐng)求。
  6. 編寫測試代碼,驗(yàn)證網(wǎng)關(guān)的各項(xiàng)功能是否正常工作。

部署網(wǎng)關(guān)服務(wù)并監(jiān)控其運(yùn)行狀態(tài)。

該設(shè)計(jì)方案僅僅是概述,具體實(shí)現(xiàn)細(xì)節(jié)可能需要根據(jù)實(shí)際需求和項(xiàng)目環(huán)境進(jìn)行調(diào)整和優(yōu)化。在實(shí)際開發(fā)中,還需要考慮異常處理、日志記錄、性能優(yōu)化等方面的問題?;谏鲜鲈O(shè)計(jì)方案,以下是一個(gè)簡化版的參考代碼,展示了如何使用FastAPI和paho-mqtt庫來創(chuàng)建一個(gè)物聯(lián)網(wǎng)網(wǎng)關(guān)。需要注意,示例中不包含完整的錯(cuò)誤處理、用戶認(rèn)證和授權(quán)機(jī)制,這些在實(shí)際生產(chǎn)環(huán)境中都是必不可少的。依賴的主要庫版本:

fastapi==0.108.0

paho-mqtt==1.6.1

網(wǎng)關(guān)模擬代碼gateway.py:

from fastapi import FastAPI, HTTPException, Body, status from paho.mqtt.client import Client as MQTTClientfrom typing import List, Dict, Any import asyncio import json app = FastAPI() mqtt_client = None device_data = {}
subtopic="gateway/device/#"
# MQTT回調(diào)函數(shù) def on_message(client, userdata, msg): payload = msg.payload.decode() topic = msg.topic device_id = topic.split('/')[-1] device_data[device_id] = payload print(f"Received message from {device_id}: {payload}") # MQTT連接和訂閱 def mqtt_connect_and_subscribe(broker_url, broker_port): global mqtt_client mqtt_client = MQTTClient() mqtt_client.on_message = on_message mqtt_client.connect(broker_url, broker_port, 60) mqtt_client.subscribe(subtopic) mqtt_client.loop_start() # MQTT發(fā)布消息 async def mqtt_publish(topic: str, message: str): if mqtt_client is not None and mqtt_client.is_connected(): mqtt_client.publish(topic, message) else: print("MQTT client is not connected!") # 設(shè)備管理:添加設(shè)備 @app.post("/devices/", status_code=status.HTTP_201_CREATED) async def add_device(device_id: str): device_data[device_id] = None return {"message": f"Device {device_id} added"} # 設(shè)備管理:獲取設(shè)備列表 @app.get("/devices/") async def get_devices(): return list(device_data.keys()) # 設(shè)備管理:獲取設(shè)備數(shù)據(jù) @app.get("/devices/{device_id}/data") async def get_device_data(device_id: str): if device_id not in device_data: raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=f"Device {device_id} not found") return device_data.get(device_id) # 設(shè)備管理:發(fā)送數(shù)據(jù)到設(shè)備 @app.post("/devices/{device_id}/data") async def send_data_to_device(device_id: str, data: Dict[str, Any] = Body(...)): topic = f"devices/{device_id}" message = json.dumps(data) await mqtt_publish(topic, message) return {"message": f"Data sent to {device_id}"} # 設(shè)備控制:發(fā)送控制命令到設(shè)備 @app.post("/devices/{device_id}/control") async def control_device(device_id: str, command: str): topic = f"devices/device/{device_id}" await mqtt_publish(topic, command) return {"message": f"Control command sent to {device_id}"} # FastAPI啟動(dòng)事件 @app.on_event("startup") async def startup_event(): mqtt_connect_and_subscribe("127.0.0.1", 1883) # FastAPI關(guān)閉事件 @app.on_event("shutdown") async def shutdown_event(): if mqtt_client is not None: mqtt_client.loop_stop() mqtt_client.disconnect() # 運(yùn)行FastAPI應(yīng)用 if __name__ == "__main__": import uvicorn uvicorn.run(app,host="127.0.0.1",port=8000)


設(shè)備1模擬代碼 dev1.py:

import paho.mqtt.client as mqtt
# 連接成功回調(diào)def on_connect(client, userdata, flags, rc): print('Connected with result code '+str(rc)) client.subscribe('devices/1')
# 消息接收回調(diào)def on_message(client, userdata, msg): print(msg.topic+" "+str(msg.payload)) client.publish('gateway/device/1',payload=f'echo {msg.payload}',qos=0)
client = mqtt.Client()
# 指定回調(diào)函數(shù)client.on_connect = on_connectclient.on_message = on_message
# 建立連接client.connect('127.0.0.1', 1883)# 發(fā)布消息client.publish('gateway/device/1',payload='Hello, I am device',qos=0)
client.loop_forever()

設(shè)備2模擬代碼 dev2.py

import paho.mqtt.client as mqtt# 連接成功回調(diào)def on_connect(client, userdata, flags, rc): print('Connected with result code '+str(rc)) client.subscribe('devices/2')# 消息接收回調(diào)def on_message(client, userdata, msg): print(msg.topic+" "+str(msg.payload)) client.publish('gateway/device/2',payload=f'echo {msg.payload}',qos=0)client = mqtt.Client()# 指定回調(diào)函數(shù)client.on_connect = on_connectclient.on_message = on_message# 建立連接client.connect('127.0.0.1', 1883)# 發(fā)布消息client.publish('gateway/device/2',payload='Hello, I am device',qos=0)client.loop_forever()

運(yùn)行網(wǎng)關(guān)代碼,打開網(wǎng)頁得到api接口:7c6c378a-0e60-11ef-9118-92fbcf53809c.jpg? 通過api分別添加設(shè)備1和設(shè)備2,7c950b10-0e60-11ef-9118-92fbcf53809c.jpg 在另外兩個(gè)控制臺(tái)中分別運(yùn)行模擬設(shè)備1和模擬設(shè)備2的代碼通過網(wǎng)頁API向設(shè)備1發(fā)送數(shù)據(jù)7cb817c2-0e60-11ef-9118-92fbcf53809c.jpg 通過網(wǎng)頁API獲得設(shè)備回復(fù)的數(shù)據(jù),設(shè)備代碼中只是簡單的把網(wǎng)關(guān)發(fā)過來的數(shù)據(jù)進(jìn)行回傳7cdabd2c-0e60-11ef-9118-92fbcf53809c.jpg 我們?cè)诰W(wǎng)關(guān)的后臺(tái)可以看到完整的數(shù)據(jù)流7cfb6b80-0e60-11ef-9118-92fbcf53809c.jpg 至此一個(gè)簡易的網(wǎng)關(guān)已經(jīng)實(shí)現(xiàn)了,接下來將會(huì)嘗試實(shí)現(xiàn)樓宇里的最常見的bacnet設(shè)備進(jìn)行通訊管理。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 物聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    2894

    文章

    43266

    瀏覽量

    366329
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    4768

    瀏覽量

    96150
  • MQTT
    +關(guān)注

    關(guān)注

    5

    文章

    627

    瀏覽量

    22285
  • 全志T527
    +關(guān)注

    關(guān)注

    0

    文章

    12

    瀏覽量

    77
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    全志T527國產(chǎn)核心米爾配套開發(fā)板批量上市!

    2023年12月,米爾電子聯(lián)合戰(zhàn)略合作伙伴全志科技,率先業(yè)內(nèi)發(fā)布了國產(chǎn)第一款T527核心開發(fā)板。這款高性能、高性價(jià)比、八核A55的國產(chǎn)核心
    發(fā)表于 02-23 18:33

    米爾全志T527開發(fā)板開箱驗(yàn)機(jī)

    期盼已久的米爾全志T527開發(fā)終于到手了,我們打開看一下開發(fā)板箱都包含哪些寶貝。 比較細(xì)心的是電源還配了好幾種轉(zhuǎn)接插頭,方便插到不同類型的插座。
    發(fā)表于 03-07 10:40

    米爾全志T527開發(fā)板上電與連接WIFI

    米爾全志T527開發(fā)板上電前的準(zhǔn)備工作: 1)T527開發(fā)板1塊,電源1個(gè),開發(fā)套件里都有; 2
    發(fā)表于 03-07 11:16

    米爾全志T527開發(fā)板安裝測試軟件

    在上1貼T527開發(fā)板已上電安裝WIFI熱點(diǎn),這個(gè)帖子說明如何安裝安兔兔測試軟件。 1)安卓13自帶瀏覽器沒有下載并安裝apk功能,請(qǐng)先用u盤安裝QQ瀏覽器等主流瀏覽器。在PC登錄打開
    發(fā)表于 03-07 13:36

    測評(píng)|基于米爾電子MYD-LT527開發(fā)板聯(lián)網(wǎng)網(wǎng)關(guān)方案

    本篇測評(píng)由電子工程世界的優(yōu)秀測評(píng)者“JerryZhen”提供。本文將介紹基于米爾電子MYD-LT527開發(fā)板的網(wǎng)關(guān)方案測試。 一、系統(tǒng)概述基于米爾-全志
    發(fā)表于 05-11 18:03

    米爾-全志T527開發(fā)板評(píng)測試用-通過聯(lián)網(wǎng)管理多臺(tái)MQTT設(shè)備 摘自:優(yōu)秀試用者JerryZhen

    、系統(tǒng)概述 基于米爾-全志 T527設(shè)計(jì)一個(gè)簡易的聯(lián)網(wǎng)網(wǎng)關(guān),該網(wǎng)關(guān)能夠管理多臺(tái)
    發(fā)表于 06-11 15:47

    國產(chǎn)芯,米爾基于全志T527的商顯主板及工業(yè)微型控制器

    前段時(shí)間,給大家推薦過米粉派(MIFANS Pi)T527,它是由米爾電子推出的高性能T527開發(fā)板。而今天主要給大家推薦米粉派T527的兄
    發(fā)表于 06-14 17:26

    通過聯(lián)網(wǎng)管理多臺(tái)MQTT設(shè)備-基于全志T527開發(fā)板

    一、系統(tǒng)概述 基于米爾-全志 T527設(shè)計(jì)一個(gè)簡易的聯(lián)網(wǎng)網(wǎng)關(guān),該網(wǎng)關(guān)能夠管理多臺(tái)
    發(fā)表于 06-21 14:20

    米爾T527系列加推工控和工控機(jī),更多工業(yè)場景DEMO

    和MYD-LT527-GK-B微型工控機(jī)。MYD-LT527-GK工控由工業(yè)開發(fā)板和擴(kuò)展底板組成,方便客戶使用米爾工業(yè)
    發(fā)表于 06-21 17:54

    米爾首發(fā)-全志T527開發(fā)板-國產(chǎn)8核A55-免費(fèi)試用】米爾全志T527開發(fā)板開箱驗(yàn)機(jī)

    期盼已久的米爾全志T527開發(fā)終于到手了,我們打開看一下開發(fā)板箱都包含哪些寶貝。 比較細(xì)心的是電源還配了好幾種轉(zhuǎn)接插頭,方便插到不同類型的插座。
    發(fā)表于 06-25 16:35

    米爾首發(fā)-全志T527開發(fā)板-國產(chǎn)8核A55-免費(fèi)試用】米爾全志T527開發(fā)板上電與連接WIFI

    米爾全志T527開發(fā)板上電前的準(zhǔn)備工作: 1)T527開發(fā)板1塊,電源1個(gè),開發(fā)套件里都有; 2
    發(fā)表于 06-25 16:39

    米爾這款首發(fā)的國產(chǎn)核心批量上市了!全志T527

    2023年12月,米爾電子聯(lián)合戰(zhàn)略合作伙伴全志科技,率先業(yè)內(nèi)發(fā)布了國產(chǎn)第一款T527核心開發(fā)板。這款高性能、高性價(jià)比、八核A55的國產(chǎn)核心
    的頭像 發(fā)表于 02-22 08:01 ?619次閱讀
    <b class='flag-5'>米爾</b>這款首發(fā)的國產(chǎn)核心<b class='flag-5'>板</b>批量上市了!全志<b class='flag-5'>T527</b>

    米粉派7折!米爾全志T527發(fā)布Linux系統(tǒng)

    米爾電子首發(fā)的全志高性能T527工業(yè)開發(fā)板——帶邊緣計(jì)算的米粉派(MIFANSPi)自推出市場以來,憑借易用性好、可靠性高、高性能、低門檻、高集成度、開源設(shè)計(jì)、支持二次開發(fā)、軟件資源豐
    的頭像 發(fā)表于 04-18 08:01 ?856次閱讀
    米粉派7折!<b class='flag-5'>米爾</b>全志<b class='flag-5'>T527</b>發(fā)布Linux系統(tǒng)

    兩款新品!基于全志T527的商顯主板及工業(yè)微型控制器

    前段時(shí)間,給大家推薦過米粉派(MIFANSPi)T527,它是由米爾電子推出的高性能T527開發(fā)板。而今天主要給大家推薦米粉派T527的兄弟
    的頭像 發(fā)表于 06-13 08:01 ?547次閱讀
    兩款新品!基于全志<b class='flag-5'>T527</b>的商顯主板及工業(yè)微型控制器

    米爾T527系列加推工控和工控機(jī),更多工業(yè)場景DEMO

    米爾首發(fā)基于全志T527系列核心以來,這款基于八核CPU的高性能國產(chǎn)核心得到廣大客戶的好評(píng)。這款產(chǎn)品支持Android13、Linux5.15操作系統(tǒng),還將適配Ubuntu系統(tǒng),
    的頭像 發(fā)表于 06-21 08:01 ?264次閱讀
    <b class='flag-5'>米爾</b><b class='flag-5'>T527</b>系列加推工控<b class='flag-5'>板</b>和工控機(jī),更多工業(yè)場景DEMO