--- tags: Jetson Nano, Basic, NVIDIA, 基礎, 教學, 環境安裝, 設定, Mac, 勇哥, Yungger --- 參考:https://zhuanlan.zhihu.com/p/80809006 # Jetson Nano - MQTT Broker (Mosquitto) ## 安裝 - 更新 Ubuntu 的套件清單 $ sudo apt update - 安裝 Mosquitto MQTT Broker $ sudo apt install -y mosquitto - 安裝 Mosquitto Client $ sudo apt install -y mosquitto-clients ## 測試 :::info - MQTT 基本概念 ![](https://i.imgur.com/S2e4gYV.jpg) - 訊息訂閱者 (Subscriber) 向 Mosquitto MQTT Broker 訂閱 Sensor/Temperature/Room1 的 主題 (Topic), - 訊息發佈者 (Publisher) 上傳一個 hello world 的訊息到 Mosquitto MQTT Broker, 主題為 Sensor/Temperature/Room1 ::: 訂閱並監聽訊息的測試程式碼: ```python= # ex_MQTT_Subscribe.py import paho.mqtt.client as mqtt MQTT_SERVER = "192.168.0.119" # localhost="127.0.0.1" MQTT_PORT = 1883 MQTT_TOPIC = "ai_car" MQTT_CLIENT = "" # 連線 MQTT 伺服器 def on_connect(client, userdata, flags, rc): rcList = { 0: "Connection successful", 1: "Connection refused - incorrect protocol version", 2: "Connection refused - invalid client identifier", 3: "Connection refused - server unavailable", 4: "Connection refused - bad username or password", 5: "Connection refused", } print("Connection result code {} : {}".format(rc, rcList[rc])) # 將訂閱主題寫在 onConnectCBK 中, 如果失去連線或再重新連線時, 將會重新被訂閱 client.subscribe(MQTT_TOPIC) # 當接收到從伺服器發送的訊息時要進行的動作 def on_message(client, userdata, msg): print("Topic:{}, Payload:{}".format(msg.topic, msg.payload.decode('utf-8'))) # 轉換編碼utf-8才看得懂中文 # Declare a mqtt object client = mqtt.Client(client_id=MQTT_CLIENT) # 設定連線時的 Callback 函式動作 client.on_connect = on_connect # 設定接收到訊息的 Callback 函式動作 client.on_message = on_message # 設定連線(IP, Port, 連線時間) client.connect(MQTT_SERVER, MQTT_PORT, 60) # listen message published forever client.loop_forever() ``` ![](https://i.imgur.com/9BU9vPs.jpg) 發佈訊息的測試程式碼: ```python= # ex_MQTT_Publish.py import paho.mqtt.client as mqtt import random import json import datetime import time MQTT_SERVER = "192.168.0.119" # localhost="127.0.0.1" MQTT_PORT = 1883 MQTT_TOPIC = "ai_car" MQTT_CLIENT = "" # 設置日期時間的格式 ISOTIMEFORMAT = '%m/%d %H:%M:%S' # 連線設定 # 初始化地端程式 client = mqtt.Client(client_id=MQTT_CLIENT) # 設定連線資訊(IP, Port, 連線時間) client.connect(MQTT_SERVER, MQTT_PORT, 60) while True: # 要發佈的測試資料 t0 = random.randint(0, 30) t = datetime.datetime.now().strftime(ISOTIMEFORMAT) payload = {'Temperature' : t0 , 'Time' : t} print(json.dumps(payload)) # 將測試資料發佈到指定的主題, 每隔 5 秒發佈一次 client.publish(MQTT_TOPIC, json.dumps(payload)) time.sleep(5) ``` ![](https://i.imgur.com/xMNpOM6.jpg)