--- tags: 新人資訊 GA: G-YWCCFEGXSJ --- [新人資訊](https://hackmd.io/@newman/portal-info) # 技術-開發板 #3-在 Arduino 實作 MQTT Client 在上一回合中已經搞定網路連線部分,接下來準備往雲端丟資料了,怎們丟呢?大體上有兩種,頻繁而少量的適合用 MQ 這種較輕量化的通信協定,資料大一點且搭配即時運算邏輯的則採用 REST Api,但它的 Server 端占用資源較多而不適合很頻繁的呼叫。從此篇文章 (https://funprojects.blog/2018/12/07/rabbitmq-for-iot/) 我才了解,MQ 又分最輕量化的 MQTT 和稍微複雜的 AMQP,而這三種 Rabbit MQ 全部支援,因此我申請了雲端的 Rabbit MQ (https://www.cloudamqp.com/) 來實驗,先把雲端環境準備好,如下 Little Lemur 免費方案額度超大,實驗用綽綽有餘。  隨意建一個 instance,命名為 newmanMessage  點選 newmanMessage 顯示詳細資料中,有一個 MQTT 屬性區塊,記好這四個欄位,client 連線需要指定的。  進到 newmanMessage 的管理介面,建立一個 Queue 命名為 newcore-iot  在 Exchange 頁籤中的 amq.topic 建立一個新的 Routing key newcore-iot 導到剛剛建立的 queue   按下 Bind 之後該區塊出現 Binding 成功的圖樣,newcore-iot 也必須記住,client 需要用到。  現在開始寫 Arduino 端的程式,之前為了 wifi client 而寫的程式必須保留,因為它是連線的基礎。另外 include 必要的函示庫 (這是內建,不用安裝),設好幾的常數存放 MQTT 所需要的參數值,並做 Global 變數型別宣告。  主程式流程先執行連網動作,再執行 mq 連線,連練都完成後執行一次發布訊息和訂閱一個 topic newcore-to-device,預期功用是擔任 server 傳送指令給裝置端的重要樞紐。   從 COM Port 監視視窗中已經確認 WiFi 連線成功後,MQTT 也成功了,下一步就是到雲端平台去看看吧。  雲端平台果然顯示有訊息傳入,執行 Get Message 確認內容「Hello from Arduino」無誤,Arduino 已經與雲端的 Rabbit MQ 溝通成功了。   以上發送訊息部分很單純如預期,但「訂閱」訊息的行為非常怪異,程式連線成功後會自動建立一個 queue,也非我指定的 newcore-to-device 反倒出現以下一個怪怪的 queue,預設板子離線後就會消失,後來我把 clean session 參數指定為 false 後,則此 queue 可持續存留,在此發送訊息會順利觸發 callback(),勉強算有測通,但掌握度還差。   邁向 IoT 系統又前進一小步,接下來還要測通 REST Api,然後還需要回頭把 MQ 機制搞的更清楚,此通訊模式在物連網系統中的角色算是相當吃重。 By Newman Chen 2022/4/11 Updeated 「Subscription part」at 2022/5/4 參考資料: https://funprojects.blog/2018/12/07/rabbitmq-for-iot/ https://www.cloudamqp.com/
×
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