我的ESP32實做書籍:https://youyouyou.pixnet.net/blog/post/121105860
博客來網址:https://www.books.com.tw/products/0010901195


如前一篇所說(NBIoT是什麼?),NBIoT可以大幅降低企業佈署設備的WiFi需求,也可避免因為場域WiFi不穩定所造成的問題,那麼NBIoT要如何實做?

本文將會以NBIoT傳輸MQTT,並以電腦的MQTTLens進行接收為例,說明整個傳輸接收流程。

首先我們必須準備NBIoT的模組,以筆者所開發的ESP32開發整合版就有留NBIoT接口,我們的NBIoT使用的晶片是基於聯發科(MTK-2526)的BC26模組,雖然他是USB外型,但並非USB傳輸格式,只是我們帥氣的黃董認為做成USB外型比較堅固耐用,並且可以後續進行串接。

NBIOT

關於上面的擴充版,詳細規格資料可以參考附件:https://t.ly/waON,使用範例可以參考以下四篇文章

說明一 燈號:https://youyouyou.pixnet.net/blog/post/120417760

說明二 USB Power:https://youyouyou.pixnet.net/blog/post/120418861

說明三 I2C LCD:https://youyouyou.pixnet.net/blog/post/121069748

說明四 SPI TF卡:https://youyouyou.pixnet.net/blog/post/119643441


一、NBIoT基礎設定:

目前NBIoT大多採用ATCommand通訊,若讀者已經取得上面的擴充版及任何的NBIoT SIM卡,那就可以開始下面的流程。

1. 在ESP32上安裝ATCommand溝通程式:https://t.ly/4XWR,此程式會將ESP32的序列通訊輸入轉至NBIoT(Serial2 RX:16、TX:17)中,這樣我們就可以手動來下達AT命令

2. ATI:ATI是查詢系統版本,不過我們會用來測試BC26是否正常,輸入ATI後,會得到BC26的回覆如下圖。若無回應,那就必須檢查模組是否有插好。另外就是ESP32 1.0.6的版本也會造成無法回應,因此先選擇1.0.4。

image

3. AT+QCCID :此指令用於檢查SIM卡狀態,一般來說,會列出該SIM卡的卡號,如下圖,若SIM卡未安裝,則會顯示ERROR

image

4.AT+QCGDEFCONT?:詢問APN設定方式,由於不同系統商會有不同的APN(APN, Access Point Name)設定,例如下圖就是以中華電信或遠傳電信為例,兩者都採用"IPV4V6","internet.iot"為APN,當我們利用這個指令查詢時,就會得到這個結果,下一步就是利用這個指令來設定這張NBIoT模組的APN。要注意的是這裡的「?」一定要使用半形「?」不可使用全形「?」。

image

5.AT+QCGDEFCONT=<<APN設定名稱>>:上一步詢問SIM卡的APN後,我們將APN名稱放到指令最後,例如以遠傳NBIoT為例,其指令如下「AT+QCGDEFCONT="IPV4V6","internet.iot" 」,

image

到此為止,就完成NBIoT的設定工作,以上五個步驟只須做一次,以後NBIoT模組只要開機會就自動以APN尋找當地有服務的基地頭,並完成網路註冊(上網)。


二、NBIoT資料傳輸

當NBIoT完成APN設定後,就可以準備傳輸資料了,請依照以下步驟。

1. AT+CEREG? :詢問基地台註冊狀態,也就是否有找到服務的基地台,若回應為「+CEREG: 0,1 」代表註冊完成,可以準備傳輸資料,若是「+CEREG: 0, 0」或「+CEREG: 0,2 」都是代表無法上網,可能是訊號不佳,或者當地無服務等問題。

image

2.AT+CESQ:詢問網路狀態,也就是詢問網路訊號強弱,以下圖而言,第一個數字為39,代表網路訊號還不錯,數字為0~63之間,越大代表網路訊號越好,10以下就必須注意傳輸可能會很不穩定,建議更換布置地點或增加天線強度,還有就是「99」則是故障的意思。

image

到這裡我們已經確認NBIoT已經完成連線,下一步我們以MQTT連線到免註冊的Broker:mqtt.eclipseprojects.io,進行一次的推播為例。

3. AT+QMTOPEN=0,"<<MQTT 伺服器>>",<<port>>:NBIoT開啟MQTT伺服器,若是使用「eclipseprojects」的話,指令全部為「AT+QMTOPEN=0,"mqtt.eclipseprojects.io",1883」,此時回應除了OK之外,再等候幾秒就會得到伺服器的回應「+QMTOPEN: 0,0」,代表伺服器已經收到要求,正在等候連線。

image

4. AT+QMTCONN=0,"<<ClientID>>":連線到MQTT伺服器,這裡的ClientID用亂數即可,例如本例為「AT+QMTCONN=0,"ESP32-1234567890"」,如果兩個裝置使用相同的ClientID就會無法連線,不過這裡要注意,從步驟3的AT+QMTOPEN到 AT+QMTCONN,時間不可超過60秒(沒有詳細計算),若時間太久,伺服器會關閉,連線就會失敗。若伺服器的回應是「+QMTCONN: 0,0,0 」代表連線成功,可以推播主題了。

image

5. AT+QMTPUB=0,0,<<qos>>,<<retain>>,"<<你的主題>>","<<內容>>":將內容推播到你的主題內,例如我要將溫度「28」推播到主題「yourTopic/class205/temp」時,我的指令為「AT+QMTPUB=0,0,0,0,"yourTopic/class205/temp","28"」,代表我要用qos=0,不要retain傳送28到主題「yourTopic/class205/temp」內,若伺服器回覆為「+QMTPUB: 0,0,0」就代表伺服器已經收到資料。

image

6. 到MQTTLens查看訂閱主題:此時到電腦的MQTTLens(或手機MQTTDash等APP)查看是否有收到訂閱的資料

image

用NodeRed接收,並用Dashboard的Gauge呈現

image   image

 

7. AT+QMTCLOSE=0:關閉MQTT伺服器連線,當傳輸完畢後,若短期內不會再使用,可以關閉與MQTT的連線,節省電源。

image

到此為止,我們就完成一次的MQTT推播,當然啦,這次我們是手動傳輸,目的是讓讀者了解MQTT的傳輸流程,未來系統要實際使用時,要寫一個自動傳輸的程式,這部份後續再分享。

除了用MQTTLens來接收之外,也可以利用NodeRed來接收並儲存資料,並可以利用Dashboard來呈現,Nodered可以說是搭配MQTT最好用的工具了。

 


對於NBIoT有興趣的夥伴,可以參考本課程喔:https://www.accupass.com/event/2108191504441162446390

  -ESP32及擴充版模組簡介
  -NBIoT傳輸測試
  -MQTT推播與訂閱
  -ESP32藍芽BLE掃描及MQTT
  -Nodered資料流設計
  -Dashboard介面設計

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 夜市 小霸王 的頭像
    夜市 小霸王

    夜市小霸王

    夜市 小霸王 發表在 痞客邦 留言(1) 人氣()