一、情境說明
NBIoT 資料傳輸量直接反應於費用上,使用 MQTT 傳送感測器與控制 DSI2598 可以降低傳輸量並且提高傳輸效率。
二、硬體材料
-
DSI2598
-
SHT11 (or DHT22)
-
NeoPixel(WS2812) 8pcs 環形LED
-
3D 列印外殼(可在此取得)
-
M3 螺絲
三、程式碼
程式碼放置於 Github 歡迎有興趣研究者自由取用。
相依 Arduino Library
-
DHT sensor library
-
Adafruit NeoPixel
四、程式說明
DSI2598_TemperatureBox_Ideaschain.ino
主程式,固定週期讀取感測器數據並且上傳 Ideaschain
bc26.cpp
BC26 NBIOT module 函式庫。
bool BC26Init(long baudrate, const char *apn, int band)
初始化 BC26
-
baudrate: ATmega328p 與 BC26 之間溝通的鮑率。建議先手動將 BC26 設定鮑率固定
-
apn: 電信服務商APN,每間電信公司皆會有所不同。
-
band: NBIOT頻段,每間電信公司皆會有所不同。
bool BC26ConnectMQTTServer(const char *host, const char *user, const char *key, int port)
連線 MQTT Broker/Server
-
host: MQTT Server domain name or IP address, ideaschain 為 "iiot.ideaschain.com.tw"
-
user: MQTT Server 登入使用者帳號。ideaschain 可於裝置頁簽中找到
-
key: MQTT Server 登入金鑰。ideaschain 為不填
-
port: MQTT TCP 連接埠,通常為 1883
bool BC26MQTTPublish(const char *topic, char *msg, int qos)
發布 MQTT 訊息
-
topic: MQTT topic 字串 , ideaschain 為 "v1/devices/me/telemetry"
-
msg: 訊息內容字串
-
qos: MQTT QOS,通常為 0
int getBC26CSQ(void)
取得BC26模組訊號強度。
bool BC26MQTTSubscribe(const char *topic, int qos, void (*callback)(char *msg))
訂閱 MQTT 訊息
-
topic: MQTT topic 字串
-
qos: MQTT QOS,通常為 0
-
callback: 帶入 callback function,當此 Topic 有訊息進來時要做的動作。
void BC26ProcSubs(void)
檢查 subs topic 是否有資料進來,有就會自動跳到 callback function執行,來達到接近事件驅動的效果。此函式必須放在主迴圈中經常性執行。
bc26.h
函式庫的標頭檔,包含原型宣告以及定義等。
五、補充資料
進一步資料請參閱附件說明手冊與程式碼。