# Unity專案使用MQTT進行通訊 現成的MQTT框架有許多種,這篇筆記紀錄使用**paho.mqtt.m2mqtt**框架進行開發 ## 安裝NuGet套件管理員 [下載](https://github.com/GlitchEnzo/NuGetForUnity/releases)給Unity使用的NuGet套件管理員[GlitchEnzo/NuGetForUnity](https://github.com/GlitchEnzo/NuGetForUnity) 下載完成後點擊.unitypackage進行安裝 ## 安裝M2Mqtt 安裝完成後在Unity的工具列會出現NuGet選項,點擊NuGet>Manage NuGet Packages  開啟NuGet後,在搜尋框裡搜尋M2Mqtt,安裝M2Mqtt by Paolo Patierno  ## 建立與Broker的連線 在Assets>Scripts目錄內點選右鍵,建立C# Script,這裡使用ConnectToBroker作為檔名  開啟檔案後首先需要先引用package ```csharp=5 using uPLibrary.Networking.M2Mqtt; using uPLibrary.Networking.M2Mqtt.Messages; using TMPro; ``` 這裡要注意的是5,6行為MQTT的package,第7行為使用到UI元件(TextMeshProUGUI)會用到的package,不一定需要引用,可依照自己需求引用 ```csharp= using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Net; using uPLibrary.Networking.M2Mqtt; using uPLibrary.Networking.M2Mqtt.Messages; using TMPro; public class ConnectToBroker : MonoBehaviour { //填寫MQTT Broker的IP位址 private string MQTT_BROKER_ADDRESS = "127.0.0.1"; //宣告一個字串存放MQTT接收到的內容 private string mqttPayload = ""; //宣告一個顯示MQTT接收到內容的物件 public GameObject object; // Start is called before the first frame update void Start() { //建立一個MQTT Client MqttClient client = new MqttClient(MQTT_BROKER_ADDRESS); //增加事件,當收到訊息時會觸發client_MqttMsgPublishReceived client.MqttMsgPublishReceived += client_MqttMsgPublishReceived; //將要訂閱的topic放在string陣列裡面 string[] topic = { "sensor/temp" }; //設定對應於topic的QoS Level byte[] qosLevels = { MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE }; //建立訂閱 client.Subscribe(topic, qosLevels); //呼叫Connect建立連線,第一個參數為ClientID(可自訂),二三個參數為Broker的帳號及密碼 client.Connect("Hololens","username","password"); } // Update is called once per frame void Update() { //將UI中的文字更新為收到的值 object.transform.GetComponent<TextMeshPro>().text = mqttPayload; } void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e) { //將收到的內容放進mqttPayload字串,供Update使用 mqttPayload = System.Text.Encoding.Default.GetString(e.Message); } } ``` 而下列則是用C#Public連線 ```csharp= using System.Text; using uPLibrary.Networking.M2Mqtt; //填寫MQTT Broker的IP位址 string MQTT_BROKER_ADDRESS = "127.0.0.1"; //宣告一個字串存放MQTT輸出的內容 string strValue = ""; //建立一個MQTT Client MqttClient client = new MqttClient(MQTT_BROKER_ADDRESS); //建立訂閱,第一個參數為Topic,第二個為預輸出值 client.Publish("sensor/temp",Encoding.UTF8.GetBytes(strValue)); //呼叫Connect建立連線,參數為ClientID(可自訂) client.Connect("Machine"); ``` 訂閱與發佈混合: 先基礎宣告IP,MqttClient 在開始的地方建立MQTT Client => 增加事件 => 建立連線 => 建立訂閱 在自訂發布函式裡面 Json格式填入 => json格式轉成字串 => 建立訂閱
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up