国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

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

發(fā)布時(shí)間:2024-5-11 18:08    發(fā)布者:swiftman
本篇測評(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é)議對設(shè)備進(jìn)行讀寫操作,同時(shí)提供HTTP接口,允許用戶通過HTTP協(xié)議與網(wǎng)關(guān)進(jìn)行交互,并對設(shè)備進(jìn)行讀寫操作。
二、系統(tǒng)架構(gòu)
  • 網(wǎng)關(guān)服務(wù):基于FastAPI框架構(gòu)建的Web服務(wù),提供HTTP接口。
  • MQTT客戶端:負(fù)責(zé)與MQTT設(shè)備通信,管理設(shè)備連接、消息發(fā)布和訂閱。
  • 設(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接口。
    • 接收用戶請求,調(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è)備。
  • 對于敏感操作(如刪除設(shè)備),要求用戶進(jìn)行二次確認(rèn)或提供額外的安全措施。

七、部署與擴(kuò)展
  • 使用Docker容器化部署網(wǎng)關(guān)服務(wù),便于管理和擴(kuò)展。
  • 根據(jù)需要,可以水平擴(kuò)展網(wǎng)關(guān)實(shí)例以處理更多的設(shè)備連接和請求。

八、實(shí)現(xiàn)步驟
  • 安裝所需的Python庫:fastapi, uvicorn, paho-mqtt等。
  • 創(chuàng)建FastAPI應(yīng)用并定義路由。
  • 實(shí)現(xiàn)MQTT組件,包括與MQTT broker的連接、訂閱、發(fā)布等功能。
  • 實(shí)現(xiàn)設(shè)備管理組件,維護(hù)設(shè)備列表并提供增刪改查的方法。
  • 實(shí)現(xiàn)HTTP組件,調(diào)用MQTT組件和設(shè)備管理組件處理用戶請求。
  • 編寫測試代碼,驗(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)化等方面的問題。基于上述設(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:
  1. from fastapi import FastAPI, HTTPException, Body, status
  2. from paho.mqtt.client import Client as MQTTClient
  3. from typing import List, Dict, Any
  4. import asyncio
  5. import json

  6. app = FastAPI()
  7. mqtt_client = None
  8. device_data = {}  

  9. subtopic="gateway/device/#"

  10. # MQTT回調(diào)函數(shù)
  11. def on_message(client, userdata, msg):
  12.      payload = msg.payload.decode()
  13.      topic = msg.topic
  14.      device_id = topic.split('/')[-1]
  15.      device_data[device_id] = payload
  16.      print(f"Received message from {device_id}: {payload}")  
  17.      
  18. # MQTT連接和訂閱
  19. def mqtt_connect_and_subscribe(broker_url, broker_port):
  20.       global mqtt_client
  21.       mqtt_client = MQTTClient()
  22.       mqtt_client.on_message = on_message
  23.       mqtt_client.connect(broker_url, broker_port, 60)
  24.       mqtt_client.subscribe(subtopic)
  25.       mqtt_client.loop_start()
  26.       
  27. # MQTT發(fā)布消息
  28. async def mqtt_publish(topic: str, message: str):
  29.       if mqtt_client is not None and mqtt_client.is_connected():
  30.          mqtt_client.publish(topic, message)
  31.       else:
  32.          print("MQTT client is not connected!")
  33.          
  34. # 設(shè)備管理:添加設(shè)備
  35. @app.post("/devices/", status_code=status.HTTP_201_CREATED)
  36. async def add_device(device_id: str):
  37.       device_data[device_id] = None
  38.       return {"message": f"Device {device_id} added"}
  39.       
  40. # 設(shè)備管理:獲取設(shè)備列表
  41. @app.get("/devices/")
  42. async def get_devices():
  43.      return list(device_data.keys())
  44.      
  45. # 設(shè)備管理:獲取設(shè)備數(shù)據(jù)
  46. @app.get("/devices/{device_id}/data")
  47. async def get_device_data(device_id: str):
  48.       if device_id not in device_data:
  49.           raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=f"Device {device_id} not found")
  50.       return device_data.get(device_id)
  51.       
  52. # 設(shè)備管理:發(fā)送數(shù)據(jù)到設(shè)備
  53. @app.post("/devices/{device_id}/data")
  54. async def send_data_to_device(device_id: str, data: Dict[str, Any] = Body(...)):
  55.       topic = f"devices/{device_id}"
  56.       message = json.dumps(data)
  57.       await mqtt_publish(topic, message)
  58.       return {"message": f"Data sent to {device_id}"}
  59.       
  60. # 設(shè)備控制:發(fā)送控制命令到設(shè)備
  61. @app.post("/devices/{device_id}/control")
  62. async def control_device(device_id: str, command: str):
  63.       topic = f"devices/device/{device_id}"
  64.       await mqtt_publish(topic, command)
  65.       return {"message": f"Control command sent to {device_id}"}
  66.       
  67. # FastAPI啟動(dòng)事件
  68. @app.on_event("startup")
  69. async def startup_event():
  70.       mqtt_connect_and_subscribe("127.0.0.1", 1883)
  71.       
  72. # FastAPI關(guān)閉事件
  73. @app.on_event("shutdown")
  74. async def shutdown_event():
  75.       if mqtt_client is not None:
  76.          mqtt_client.loop_stop()
  77.          mqtt_client.disconnect()
  78.       
  79. # 運(yùn)行FastAPI應(yīng)用
  80. if __name__ == "__main__":
  81.       import uvicorn
  82.       uvicorn.run(app, host="127.0.0.1", port=8000)
復(fù)制代碼

設(shè)備1模擬代碼 dev1.py:
  1. import paho.mqtt.client as mqtt

  2. # 連接成功回調(diào)
  3. def on_connect(client, userdata, flags, rc):
  4.     print('Connected with result code '+str(rc))
  5.     client.subscribe('devices/1')

  6. # 消息接收回調(diào)
  7. def on_message(client, userdata, msg):
  8.     print(msg.topic+" "+str(msg.payload))
  9.     client.publish('gateway/device/1',payload=f'echo {msg.payload}',qos=0)
  10.    
  11. client = mqtt.Client()

  12. # 指定回調(diào)函數(shù)
  13. client.on_connect = on_connect
  14. client.on_message = on_message

  15. # 建立連接
  16. client.connect('127.0.0.1', 1883)
  17. # 發(fā)布消息
  18. client.publish('gateway/device/1',payload='Hello, I am device',qos=0)

  19. client.loop_forever()
復(fù)制代碼

設(shè)備2模擬代碼 dev2.py
  1. import paho.mqtt.client as mqtt

  2. # 連接成功回調(diào)
  3. def on_connect(client, userdata, flags, rc):
  4.     print('Connected with result code '+str(rc))
  5.     client.subscribe('devices/2')

  6. # 消息接收回調(diào)
  7. def on_message(client, userdata, msg):
  8.     print(msg.topic+" "+str(msg.payload))
  9.     client.publish('gateway/device/2',payload=f'echo {msg.payload}',qos=0)

  10. client = mqtt.Client()

  11. # 指定回調(diào)函數(shù)
  12. client.on_connect = on_connect
  13. client.on_message = on_message

  14. # 建立連接
  15. client.connect('127.0.0.1', 1883)
  16. # 發(fā)布消息
  17. client.publish('gateway/device/2',payload='Hello, I am device',qos=0)

  18. client.loop_forever()
復(fù)制代碼

運(yùn)行網(wǎng)關(guān)代碼,打開網(wǎng)頁得到api接口: 通過api分別添加設(shè)備1和設(shè)備2, 在另外兩個(gè)控制臺(tái)中分別運(yùn)行模擬設(shè)備1和模擬設(shè)備2的代碼通過網(wǎng)頁API向設(shè)備1發(fā)送數(shù)據(jù) 通過網(wǎng)頁API獲得設(shè)備回復(fù)的數(shù)據(jù),設(shè)備代碼中只是簡單的把網(wǎng)關(guān)發(fā)過來的數(shù)據(jù)進(jìn)行回傳 我們在網(wǎng)關(guān)的后臺(tái)可以看到完整的數(shù)據(jù)流 至此一個(gè)簡易的網(wǎng)關(guān)已經(jīng)實(shí)現(xiàn)了,接下來將會(huì)嘗試實(shí)現(xiàn)樓宇里的最常見的bacnet設(shè)備進(jìn)行通訊管理。
本文地址:http://m.qingdxww.cn/thread-856853-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • 利用SAM E54 Xplained Pro評(píng)估工具包演示CAN轉(zhuǎn)USB橋接器以及基于CAN的主機(jī)和自舉程序應(yīng)用程序
  • 使用SAM-IoT Wx v2開發(fā)板演示AWS IoT Core應(yīng)用程序
  • 使用Harmony3加速TCP/IP應(yīng)用的開發(fā)培訓(xùn)教程
  • 集成高級(jí)模擬外設(shè)的PIC18F-Q71家族介紹培訓(xùn)教程
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 又粗又大的机巴好爽欧美 | 久久久噜噜噜久久老司机 | 久久久久久久久女黄 | 国产成人v视频在线观看 | 欧美亚洲一二三区 | 免费精品国产 | 欧美尺寸又黑又粗又长 | 亚洲日韩欧美一区二区在线 | 羞羞视频在线 | 亚洲欧美一二三区 | 国产开嫩苞视频 | 直接进入免费看黄的网站 | 麻豆高清| 在线精品视频免费观看 | 99久久免费精品视频 | 午夜色视频在线观看 | 99视频精品全国免费 | 黑人巨大人精品欧美三区 | 最近国产在线观看免费完整版 | 我被拉拉口的好爽 | 一级做a爰视频免费观看2019 | 香蕉久久精品国产 | 91麻豆精品 | 久久精品亚瑟全部免费观看 | 亚洲欧美久久精品 | 久久er精品视频 | 全部老头和同性老头xxxxx | 欧美国产在线看 | 呦女网址www呦女 | 99精品wwxx在线观看 | 亚洲免费成人在线 | 牛牛色婷婷在线视频播放 | 日美欧韩一区二去三区 | 99精品国产兔费观看久久99 | 午夜影院一级片 | 欧美人成片免费看视频不卡 | 日本在线视频二区 | 日韩欧美视频一区二区三区 | 久久99热这里只有精品免费看 | 欧洲一卡2卡三卡4卡免费网站 | 欧美成人免费 |