【NB-IoT】菜鳥Maker輕鬆上手DSI2598開發板

作者:Ryan Hu

身為一個菜鳥 maker 就是得在被學校課業轟炸的同時還要對任何新事物都抱持絕對的好奇心,這次從 MakerPRO 那裡獲得了一個新開發版,是資策會的新作品 – 第二代 DSI2598,聽說是全台第一個 Arduino-based NB-IOT 的開發版 (搭載 MTK MT2625 chipset),且比第一代好用很多 (雖然我沒用過第一代) ,不過使用起來的確很好上手,至於原因待我在下文娓娓道來。

(圖片來源:資策會)

DSI2598 模組簡介

DSI2598 在硬體規格方面,若用一句話來形容就是 “麻雀雖小五臟俱全”。基本上 DSI2598 就是 Arduino Nano 的變形版本,不論使用的 MCU (不要懷疑就是 ATmega328P),Flash memory,EEPROM 等等都和 Nano 相同,厲害的是在這樣的規格下能夠整合進 NB-IOT 晶片。

(圖片來源:資策會)

至於到底跟 Arduino Nano 有多像,就是像到完全相容 Arduino!可直接利用 Arduino IDE 開發,當然也相容其他 Arduino 周邊模組,使開發起來完全沒壓力。其模組支援的介面也不亞於 Nano,該有的基本上都有涵蓋在內 (如下圖)。

第一代DSI 2598腳位說明(圖片來源:資策會)

第二代DSI 2598腳位功能說明(圖片來源:資策會)

雖然 I/O 在數目上的表現略遜色,但我覺得對於這類型的物聯網產品已經是相當不得了了,因為通常這種低功耗遠距離傳輸的應用都會連接感測器,並將感測器測得的某些目標數值回傳至某個節點 (或終點 eg. 雲端),因此 I/O 數目的多少反而不是這類應用的重點,重點應會擺在有可以讓感測器和 MCU 溝通的介面,而 DSI2598 如上所述,常見的通訊介面像是 I2C,SPI,UART 一個都沒少。

另外一個很大的特點就是 DSI2598 的體積真的很小 (長 6.9 cm * 寬 2.3 cm),對於目前物聯網應用的使用情境我個人覺得是為市場豎立了一個很好的典範。

至於 NB-IOT 晶片,DSI2598 上面這顆採用的是 Quectel 的 BC26 NB-IOT 模組,利用 AT command 與其溝通並進行資料傳輸 (等等的功能測試就可以看到),而他的 AT command 不意外的也是採用 3GPP 所訂之標準規格 (TS 27.005 & TS 27.007)。

值得一提的是菜鳥我在看 BC26 規格的時候,看到了一個有趣的東西,這顆 BC26 有支援 SMS text 和 PDU mode,這讓我想到當初我還不知道 GSM 已經被收回去時,滿心期待想要用 Arduino module 發個 SMS 給我的 iPhone 時的窘境,讓我又有一種我好想知道怎麼用的衝勁 (又挖坑了…)。

其他詳細關於這顆模組表現,我就不一一列出,其餘的資訊若有興趣可以在如下附圖找尋:

DSI2598 基本功能測試

大致介紹完 DSI2598 硬體相關的資訊,接著就是實戰的時候了!剛剛說上手容易,的確是這樣沒錯,就像上述所提到的,把它當成有 NB-IOT 功能的 Arduino nano 即可,不過雖說如此,還是有些小地方得注意一下,以免失足。

MAC 開發者先等等

在這裡先提醒一下使用 Mac 做開發的同好朋友,目前很遺憾的,DSI2598 還不能在 Mac 上做開發。不知道看到這裡是否有人和我一樣頭上冒出多個問號,“剛不是說 DSI2598 就是變形版的 Nano 嗎?那有什麼好不能用的?”,因此我當時認為理應沒問題才是。當我興致勃勃的將 DSI2598 用 USB 接上我的 Macbook 後,大概五秒鐘,我的螢幕呈現下圖的狀況:

(圖片來源:Ryan)

對,死機了,然後重啟,為了排除是我其他應用程式影響的可能性,再嘗試一次的結果仍然如上圖情況,雖說很想知道是什麼原因造成此現象,不過我挖給自己的坑實在太多…暫時決定不再跟自己過不去,詢問廠商過後才得知 Mac 目前並不支援 DSI2598 的開發,只好默默期待他們有天能支援 Mac。

燒錄 Blink 範例程式確認 DSI2598 正常運作

而身為一個合格的韌體工程師,不具有一台 Windows based 的筆電是不行的,畢竟韌體開發多數的軟體還都只有支援 Windows,因此接下來所有敘述的開發情形皆是在 Windows 下完成

養成好習慣,拿到任何新板子時首先要做的是確定板子是否沒問題。

再次強調,同好朋友們以往怎麼用 Arduino Nano 就怎麼用 DSI2598,例如:開發版選擇 Arduino nano,COM 選擇對應的 port 等等,嘗試先燒錄 Arduino 基礎範例 Blink 程式,結果竟然失敗了。Arduino 顯示的錯誤訊息如下圖的 log:

以過去的經驗告訴我,這十之八九和 bootloader 脫離不了關係。嘗試 debug 後發現連透過其他 Arduino 開發版燒新的 bootloader 進去都有障礙,我就想一定又是什麼很蠢的錯誤…果然不出所料是 bootloader 沒錯,這裡由於篇幅緣故我就直接講結論,罪魁禍首就是 Arduino 版本的問題,由於我的 Windows 筆電算新,安裝的 Arduino 版本是 1.8.9,強調一下,Arduino IDE 版本若是 1.8.5 以上的同好朋友,在 工具” 底下選擇 “處理器” 時要選擇 ATmega328P (Old bootloader),(不是 ATmega328P 喔!)不然一定燒錄失敗的。

(圖片來源:Ryan)

設定 APN

成功燒錄 Blink 程式並正常運作後,接著就可以試試讓 NB-IOT 連上網路。而連上網路的第一步就是要設定 NB-IOT 模組的 APN (Access Point Name) 以獲得 IP。

首先得先下載設定 APN 的 code,在此附上程式碼下載連結:DSI2598_ATcommand.ino。下載後將程式碼編譯燒錄。

上述在介紹 NB-IOT 模組時有提到,若要對這顆 BC26 下指令,必須透過 UART 介面並使用 AT command 來完成,因此成功燒錄後打開 Serial console 並調整其 baud rate 為 115200,接著就可以開始下 AT command 的指令了,不要擔心指令都已經幫大家準備好了,如下方所述操作即可完成 APN 的設定:

STEP1 呼叫模組是否就緒
於 Serial console 中的 input bar 輸入:AT按下 enter 後會得到一個 “OK” 的回覆如下圖

STEP2 啟用 APN
在上圖相同處繼續輸入:AT+QGACT=1,1,”apn”,”internet.iot”
輸出:OK

STEP3 註冊 APN
輸入:AT+QCGDEFCONT=”IP”,”internet.iot”
輸出:OK

STEP4
頻寬設定
輸入:AT+QBAND=1,8
輸出:OK
AT+QLEDMODE=1
功能是讓二代板的NB標示LED燈開始閃若,作為是否聯網的標的。
閃爍頻率快:未聯網
閃爍頻率慢:已連網

STEP5 重新啟動模組
輸入:AT+QRST=1
輸出:(只有這個指令會有亂碼狀況)

以上五個步驟若都有照順序走,基本上不太會有問題,每個指令下完都會得到模組回覆的 “OK” (除 STEP5),這樣就完成 APN 的設定了!

設定檢查

再來要進行 “設定檢查” 看看 NB-IOT 模組目前 APN 的狀態,SIM 卡,取得 IP 等等:

STEP1 SIM 卡狀態查詢
(設定完 APN 後 console 不用關繼續接著下指令) 輸入:AT+CPIN?
輸出:+CPIN : READY \n\n OK

STEP2 APN 狀態查詢
輸入:AT+CEREG?
輸出:+CEREG= 0,1 \n\n OK (表示已經進入APN的網域)*

STEP3 訊號強度查詢
輸入:AT+CESQ
輸出:+CESQ: 39,0,255,255,24,62 \n\n OK
(代表意義:xx, 0, 255, 255, 255,xx:0~99,0:未有訊號,99:找不到訊號)

STEP4 IP 查詢
輸入:AT+CGPADDR=1
輸出:+CGPADDR: 1,10.168.191.88 (粗體即為得到之 IP) \n\n OK

大功告成!

*註:
若 +CEREG 不是回 0,1 有其他兩種可能如下:
+CEREG= 0,2,表示已經尚未註冊入APN的網域。
+CEREG= 0,0,表示沒有SIM卡。

IDEAS chain

到這已經搞定了所有 NB-IOT 相關的設定,既然 NB-IOT 是為低功耗遠距傳輸的技術,那勢必一定得要有個 “節點” 可以接收來自 NB-IOT 所挾帶的訊息,而目前最常見也最主流的作法就是上雲端。說到這就不得不說資策會這次真的為 maker 的市場做出了相當大的努力,IDEAS chain 是資策會開發的雲端數據平台,以多元服務的整合設計,讓新創團隊與開發者簡單、快速導入物聯網數據應用,降低 IoT 結合雲端服務建置門檻。

廢話不多說,直接來試試看怎麼用。

首先進入 IDEAS chain 的官網,從註冊先開始。
登入 —> 沒有帳號? —> 輸入資料創建帳號,點選建立 —> email 收信,點選按鈕,激活帳號。以上步驟相當簡易,成功收到認證信件就如下圖所示:

(圖片來源:Ryan)

認證成功後轉跳回 IDEAS chain 之官網,點選右上角之 專案管理” 並且登入就可以看到如下圖所示:

(圖片來源:Ryan)

點選新增專案” 填寫後點選建立,就可以在如上圖這個頁面下拉看到已經新增的專案:

(圖片來源:Ryan)

接著點選已建立之專案,如下圖 (一) 轉跳至專案畫面後,點選 新增裝置”,填寫裝置資訊完成後點選建立如下圖 (二)。

圖 (一)(圖片來源:Ryan)

圖 (二)(圖片來源:Ryan)

再來,點選如上圖 (二) 專案裝置右邊紅框中所展示之按鈕,往下拉可看到右邊有個 “ + ” (也以紅框展示) 符號之按鈕,點選下去以新增感測器”

(圖片來源:Ryan)

如上方填寫新增裝置時相同,填寫感測器相關的資訊,確認無誤後按下建立之按鈕。就可以在看到如上方在這個裝置底下建立的感測器 (Arduino GPS module) (至於左邊那個應該是現在 IDEAS chain 的版本會 default 一個感測器給每個裝置,可刪無妨)。

到這步大致上感測器的資訊處理完畢,接下來就是最重要的重頭戲 – 上傳資料。上傳資料這個部分是最重要也需要最注意的部分,因為需要在這些步驟取得某些資訊才有辦法將資料順利的從 local 端傳至 cloud,像是專案金鑰裝置編號等等。

前往 “專案管理” 的頁面,點選如下圖 (三) 之按鈕會看到下圖 (四) 之畫面,第一行及為專案金鑰 (很重要請別外流)

圖 (三)(圖片來源:Ryan)

圖 (四)(圖片來源:Ryan)

接著前往 “裝置管理” 的頁面找到 “裝置編號 (DID)”,如下圖。

(圖片來源:Ryan)

最後找到自己剛剛新增的感測器,點選下圖紅框表示之按鈕,第一行即為 “感測器編號 (SID)”

(圖片來源:Ryan)

這三項重要的資訊 (專案金鑰,裝置編號,以及感測器編號) 得先記下來,等等在寫 code 時會需要用到,以便能順利將我們的資料傳至雲端。

至於相關開發人員的文件,像是 API 怎麼 call,IDEAS chain 都已經準備了相當完善的文件供使用者下載,這裡我們就直接來試試上傳資料需要操作哪些步驟。

首先我已經將需要的 code 整理好放在 drive 裡,這裡是下載連結:•t.ly/YE8YD,下載下來解壓縮後,可以看到內含 BC26.h 和 DSI2598-ideaschain.ino 兩個檔案,其中需要做更改的部分只有 BC26.h 中前面的幾個 String 而已,如下圖所示:

由 comment 可以看出,剛剛要我們記下的三項重要資訊就是分別填在 String 內,其餘的都不用作更動,直接用 Arduino IDE 打開 DSI2598-ideaschain.ino 之檔案,編譯燒錄,成功後打開 Serial console 欣賞美麗的成果。

若過程中皆順利,在 Serial console 中也沒有看到非比尋常的 printout,這時就可以到 IDEAS chain 官網看看剛剛忙了半天設定的感測器,是否有數值上的改變,基本上照著上述步驟是做絕對沒問題的!

雖說有 default 的數值可以上傳,菜鳥我還是想上傳一些很酷的東西,目前的想法是想要利用一顆 Ardunio GPS module 搭配 DSI2598 定時回傳我所在的座標到雲端上,紀錄我一天的路徑,是為簡易的 tracker (眼尖的人應該就可以看到我在打專案裝置的時候就有露出些馬腳),不過考量的點目前有兩個,第一,IDEAS chain 現在看起來尚未支援單一 API 處理兩種數據,所以倘若我要傳經緯度上去,我得分別傳,還得設兩個感測器 (?)。第二,把自己私人的隱私訊息暴露在雲端,好像有點愚蠢……。

總之,這樣一整個開箱流程走下來,我真的覺得 DSI2598 搭配 IDEAS chain 完全提供了物聯網開發者所需要的東西,用大家最熟悉的 Arduino 就能夠快速實踐各種 LPWAN 的應用,大大降低了物聯網的開發成本,感謝 MakerPRO 和資策會,讓菜鳥 maker 我又再次大開眼界!

 

Ryan Hu

對於 IOT 軟硬整合相關有極大興趣,鍾愛無人機,目前獨自完成的專案像是瓦力號、GPS 自動語音導覽系統、NTP 網路自動校時時鐘,喜歡流浪。
Ryan Hu

Author: Ryan Hu

對於 IOT 軟硬整合相關有極大興趣,鍾愛無人機,目前獨自完成的專案像是瓦力號、GPS 自動語音導覽系統、NTP 網路自動校時時鐘,喜歡流浪。

Share This Post On

2 Comments

  1. 我可否申請一個來試試?

    Post a Reply

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *