[精讚] [會員登入]
77

【Arduino/LinkIt 7697】實作小小的 MQTT Publish & Subscribe

若是要多點對多點傳輸資料,那使用 MQTT 即可快速的達成我們所需的目的

分享此文連結 //n.sfs.tw/15718

分享連結 【Arduino/LinkIt 7697】實作小小的 MQTT Publish & Subscribe@小編過路君子
(文章歡迎轉載,務必尊重版權註明連結來源)
2022-04-02 16:52:36 最後編修
2022-03-30 19:31:26 By 過路君子
 

大家好,這裡是又發現新大陸的小編過路君子

真的運氣很好,同個關卡會掉兩種素材,機率各 50%,結果一直掉另一個小編不需要的素材......

 

 

當我們今天有一百個感測器且有一百個接收站,但是每個接收站所要接收的資料又各異,有什麼方式能讓我們快速達成任務呢?

那我們能簡單想出的方法大概是:http 或是 udp 吧。但是這時就變成要我們主動地去處理收發的問題,有點麻煩。

當只有一個工程師這樣想的時候,他會自己寫一個;當有三位工程師這樣想的時候,就會變出了一個套件,而這就是我們今天的主題 —— MQTT 協定。

 

那我們照慣例,在開始之前先付上小編所使用的設備、軟體規格。

小編在這裡是使用 LinkIt 7697,事實上程式碼跟 Arduino 一模一樣,基本上可以直接移植,只有接線不同而已。

但如果不是使用麵包版,是使用 Grove 模組的話,那基本上......一模一樣。

軟體名稱 版本或發行商
MQTT.fx 1.7.1
LinkIt 7697 聯發科技
USB Driver CP210x
Arduino IDE 1.8.19
PubSubClient 2.6.0

 

 

Step.1 安裝 PubSubClient

因為我們在使用 MQTT 的時候會使用到第三方函式庫 PubSubClient,而該函式庫從 2.7.0 開始有使用到非標準的 C 函式庫,又由於 LinkIt 7697 實在過於老舊,所以最高只能使用到 2.6.0。

所以我們先來安裝 PubSubClient 吧!

(所有圖片點擊都可以放大、變高清)

唯一要注意的就只有不要選到 2.6.0 以後的版本就好了,這邊快速帶過。

看到上圖就代表安裝好了,可以關閉這個畫面了。

更新的按鈕雖然很誘人,但是我們不能按,各位忍住誘惑啊!

 

 

Step2. 安裝 MQTT.fx

那既然是 MQTT 就一定會有 broker、publisher 和 subscriber 這三個角色,而我們今天只會實作 publisher 和 subscriber。

所以 broker 的部分我們會使用第三方公開的,那既然是第三方的,請各位實作的時候千萬別太頻繁的送出 publish,約莫一秒一次 publish 即可,否則會被當成 DDoS 攻擊而封鎖無法使用。

請各位從下方選取或使用自己習慣的第三方 broker 網址來用吧,埠都是 1883。

1. broker.emqx.io
2. test.mosquitto.org
3. broker.hivemq.com

小編會以使用 test.mosquitto.org 來做示範,因為下方的程式碼也是使用這個網站,這樣就不需要再另外做更改。

 

選好了嗎?那因為我們還需要一個監控畫面來查看我們的 LinkIt 7697 是否有成功將訊息 publish 出去。

那小編在這裡使用的軟體是 MQTT.fx 1.7.1,所以我們先來下載並安裝一下。

下載點:https://www.jensd.de/wordpress/?p=2746

然後因為小編是使用 Window 10 的,所以選倒數第二個來下載。

下載好了之後,點擊該執行檔並依照指示一直按 Next 即可。

 

 

Step3. 將溫度濕度模組接到LinkIt 7697上

因為原作者在程式碼中是將溫濕度感測器接在 D3,那小編也懶得去改,所以直接沿用。

 

 

Step4. 寫入程式並燒錄到LinkIt 7697內

相關的程式碼小編式直接找別人現成的程式碼來用,那原出處在這:ghliaw / NPTU-Shore-Course-MQTT-NodeRED

下載下來會是一個壓縮檔,直接解壓縮即可,解壓縮完畢之後點進去應該可以發現一個「01_MQTT_DHT11」的資料夾。

再點進去,就可以看到我們要的檔案躺在裡面了喔~

 

基本上程式碼可以被我們拿來直接使用,我們只需要小小的修改幾處地方即可。

刪除 #include<SPI.h> 和  #include <WiFiNINA.h>,並替換成 #include <LWiFi.h>。

 

將 DHTTYPE 後面接的值換成我們溫濕度模組的型號,Github上的預設是 DHT11,那因為小編手上拿到的是 DHT22,所以小編在這邊改成 DHT22。

至於各位是否要更改就請自行確認手上的溫濕度模組是否是 DHT11 囉。

 

原作者是跟他自己的 WiFi 機做連線,所以使用的當然是他的 WiFi 登入密碼。

所以我們要換成我們自己本身的 WiFI 名稱(ssid)和密碼(password)。

 

對於 broker 來說,client_id 是唯一的,當今天有第二個相同 ID 的使用者連線進來時,broker 會自動踢掉先加入的那位,留下後加入的那位。

那畢竟此程式碼是公開的,所以如果不修改有可能會被不知名的人士踢掉,所以我們修改一下,值無所謂,只要不跟其他人重複即可。

 

這邊也是怕有人跟我們同時使用此程式碼,造成我們的資料相互汙染,所以將最前面的「ghliaw」改成隨便的一個字串即可。

至此,程式碼準備工作結束,可以直接燒錄了。

 

 

Step5. 設定 MQTT.fx

進入設定介面。

MQTT.fx 有提供產生隨機 ID 的功能,那我們就給他產生一下,千萬別用預設值,要不不知道什麼時候就會被不明人士踢掉。

當我們將這一切都準備好之後,就可以讓 MQTT.fx 正式的跟公開公用的 broker 來取得連線。

接下來就是要來 Subscribe 主題了。

剛剛在更改程式碼的時候,有一部分是要將「ghliaw」改成我們自己喜歡的字串,那這邊的 xxx 也是。

 

 

Step 6. 啟動 LinkIt 7697 的 MQTT 服務

只要將序列埠監控視窗打開即可。

從 WiFi 連線上到感應器送出第一條訊息的這段時間,大約十秒,所以如果接下來沒訊息並不是出錯,給他一點時間。

實際收到訊息的效果如上圖,其中的 temp 就是溫度,而 hum 則是濕度,各位可以比較看看是否跟序列埠監控視窗上的數值一致呢。

 

 

Step 7. 使用 MQTT 控制 LinkIt 7697 上的 LED

此程式碼的作者並非僅有提供單向的傳輸,也提供了讓 LinkIt 7697 去 Subscribe 某一主題,並針對該主題去執行相對應的動作。

各位有沒有發現原本是熄滅的內建 LED 燈泡亮起來了呢?原作者提供了三種操作方式:

0 1 2
關閉 LED 燈 開啟 LED 燈 使 LED 燈閃爍

 

除此之外也可以偷偷回去看一眼序列埠監控視窗喔。

 

 

至此,全部結束!

原作者寫的這個小小的範例基本上就包含了所有 MQTT Client 的行為,只要稍稍修改,便可以拿來玩出很多花樣。

例如:裝一個接著馬達的 LinkIt 7697 在電燈開關旁邊,使用 MQTT Publish 指令出去讓他自動敲擊電燈開關,這樣晚上躺在床上要關燈時就方便很多了。

 

 

 

後記

寫 Windows 系統的文章圖片都一堆,寫 Linux 系統的文章程式碼都一堆。

END

你可能感興趣的文章

【C++】使用SFML製作讓方塊落下的畫面 從開啟新視窗延伸過來的應用(?),配合上一篇所使用到開啟一個可渲染視窗的那堆程式碼的延伸。

【C++】使用SFML創建新視窗和新增圖標(ICON)並隱藏DOS 筆記,怕自己以後忘記怎麼創建並開啓一個新視窗

【Wickct】如何製作一個簡單的動態響應頁面和傳遞參數至其他頁面 身為一個後端架構程式,這個功能當然是非常重要之一

【C++】SFML安裝於Microsoft Visual Studio 2019 此方法僅適用單個C++專案,因為一次就適用整台電腦的方式有人寫了,而且寫得非常不錯。

【C++】class練習 — 檢測該字串是否為迴圈 第一次的C++結構式寫法,雖然以後應該會見怪不怪,但畢竟是第一次所以還是想保存下來

【C++】使用struct array和一維int array模擬二維int array 主要是因為用sort去排序int array的二維陣列小編懶得研究,於是就研究了一種維持一維陣列但是有二維陣列效果的程式,小編就廢~~

我有話要說


限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

【開箱】高捷少女collection總集篇1 由希萌創意寄來的大包裹!裡面究竟有什麼呢?小編就帶大家來看看!

高捷少女:布拉格體驗㊦ 「各位想到盧卡站的乘客,請到我們左手邊排隊!」婕兒大聲地喊道。     「這孩子怎麼穿著地鐵站制服?童工嗎?」一位大嬸歪頭問道。

高捷少女:購票大作戰① 「各位乘客,本班機即將降落,感謝各位乘客的搭乘……」隨著空中小姐的廣播音,那架飛機逐漸降落在地面,裡面的乘客們也紛紛開始整理自己的行李。 那個有著歐美人五官的少女抓緊包包,看著外面的小港機場,臉上緩緩

【日翻中歌詞】ピースサイン(Peace Sign) 那一天從我們的頭頂 輕掠而過的那架飛機 有點不可思議 還記得 為何呢?毫無意義 

【歌評】蓮台野夜行 - 少女秘封倶楽部 少女秘封俱樂部 我們的主角終於出場啦!這首歌一反蓮台野夜行的固有風格,總是華麗的開始又華麗的結束!