No Code AI(肉寇)AI自動化兩日精通|實體6小時+線上6小時
|

【開箱評測】MTDuino IOT開發板:NB-IoT及GPS功能介紹

   

作者:柯大

為提供快速開發物聯網各種應用,解決移動型不同應用場域,邁特電子特別推出一款裝置,具有省電、長距離傳輸、低功耗通訊廣域網路,也支援開源開發環境Arduino IDE及Micro Python 的開發板 – MTDuino。

MTDuino開發板正面照

MTDuino開發板背面照

此開發板除了提供標準MCU所具有的類比、數位IO接腳、I2C、SPI、UART等功能外,也內建高感度6軸感測器,更內建具有NBIoT及Cat-M1二種低功耗物聯網通訊傳輸模組,讓不同應用都可利用本開發板快速建立雛型,進入小量開發及應用場域驗證。

MTDuino採用低功耗SAMD21 Cortex®-M0+ 32bit ARM MCU,內建LSM6DS3 ,6軸動作感測器,結合BG77 雙模低功耗通訊模組,模組也內建GPS衛星定位功能,可支援GPS、GLONASS、Galileo、BeiDou、QZSS 等主要的全球衛星定位系统,最特別的是這個開發板相容Arduino Nano33 IoT開發板,只要選擇Arduino Nano33 IoT開發板,即可輕易上手。

開發板主要配置如下:

更進一步來看看開發板其他功能及規格如下:

MTDuino腳位定義

MTDuino開發板方塊圖如下:

MTDuino功能方塊圖

相容Arduino Nano33 IoT開發板接腳圖如下:

圖片來源:Arduino.cc

相容Arduono Nano開發板接腳圖如下:

圖片來源:Arduino.cc

支援NB-IoT的功能介紹

MTDuino內建BG77 NB-IoT模塊,它的主要規格如下:

1.支援通訊模式:LTE Cat NB2 / Cat NB1 / EGPRS

2.頻段支持:全球性覆蓋

3.數據速率:最大下行速率為127 kbps,最大上行速率為158 kbps

4.支援的頻段如下:

(1) LTE Cat M1 (LTE-FDD: B1/B2/B3/B4/B5/B8/B12/B13/B18/

      B19/B20/B25/B26/B27/B28/B66/B85*)

(2)LTE Cat NB2 (LTE-FDD: B1/B2/B3/B4/B5/B8/B12/B13/B18/

                B19/B20/B25/B28/B66/B71/B85*)

5.內建GPS:支援GNSS (GPS/GLONASS/BeiDou/Galileo/QZSS)

由於BG77模組具NB-IoT(LTE Cat NB2)及Cat-M1(LTE Cat M1)二種為物聯網(IoT)應用而設計的通訊技術,在此特別簡單說明一下這二種通訊方式的不同。

(1) 頻段:NB-IoT和Cat-M1使用不同的頻段。NB-IoT使用更低的頻段,這意味著它的訊號可以更深地穿透建築物和地下,這對於需要長距離通訊的應用非常有用。Cat-M1使用較高的頻段,這意味著它具有更高的資料速率,並且可以支持更多同時連接的設備。

(2) 資料速率:Cat-M1比NB-IoT提供更高的資料速率。Cat-M1的最高速率可達1Mbps,而NB-IoT的最高速率為250kbps。

(3) 資料傳輸量:Cat-M1可以支援較大的資料傳輸量,而NB-IoT則主要針對小型資料傳輸。

(4) 電池壽命:由於NB-IoT使用更低的頻段,因此它需要更少的功率來傳輸資料。這使得NB-IoT裝置的電池壽命可以更長。而Cat-M1裝置由於使用較高頻段的關係,需要較多的能源,其電池壽命通常比NB-IoT裝置短。

(5) 覆蓋範圍: 如果您需要在較偏遠地區或室內使用,NB-IoT可能更好,因為它使用的低頻段訊號可以更深入建築物和地下。

綜上所述,NB-IoT和Cat-M1都有其優勢和不同的應用場景。如果您需要長距離和低功率傳輸資料,可選擇NB-IoT;如果您需要較高速傳輸資料則可選擇Cat-M1。

國內電信公司服務比較

1.中華電信:

(資料來源:中華電信網站)

中華電信NB-IoT 頻段為是Band 8、900MHz,Cat M1 頻段是走Band 3、1800MHz。

2.遠傳電信

(資料來源:遠傳電信網站)

(資料來源:遠傳電信網站)

3.亞太電信

(資料來源:亞太電信網站)

(資料來源:亞太電信網站)

4.台灣大哥大-依照企業客戶的需求,推出每月5MB、12MB、25MB及40M四種NB-IoT彈性資費方案,月租費最低只要10元起,即可享有萬物聯網的服務。(資料來源:台灣大哥大電信網站)。

BG77模組使用方式

BG77 模組預設的傳輸率為115200bps,其基本AT指令集及其使用方式如下:

  1. AT:檢查模組是否正常運作。 使用方式:輸入 AT 指令,若回應 OK 則代表模組正常運作。
  2. AT+CFUN:設定模組的功能等級。 使用方式:輸入 AT+CFUN=1,啟用完整功能等級。
  3. AT+CGMI:查詢製造商資訊。 使用方式:輸入 AT+CGMI,回應會顯示製造商名稱。
  4. AT+CGMM:查詢產品型號資訊。 使用方式:輸入 AT+CGMM,回應會顯示產品型號。
  5. AT+CGMR:查詢軟體版本資訊。 使用方式:輸入 AT+CGMR,回應會顯示軟體版本。
  6. AT+CGSN:查詢模組序號資訊。 使用方式:輸入 AT+CGSN,回應會顯示模組序號。
  7. AT+CIMI:查詢 SIM 卡 IMSI 資訊。 使用方式:輸入 AT+CIMI,回應會顯示 SIM 卡 IMSI。
  8. AT+COPS:手動或自動選擇網路運營商。 使用方式:輸入 AT+COPS=0,進行自動選擇網路運營商。
  9. AT+CSQ:查詢訊號強度。 使用方式:輸入 AT+CSQ,回應會顯示訊號強度。
  10. 使用 AT+CGDCONT 指令設定 APN,例如:AT+CGDCONT=1,”IP”,”your_apn”。
  11. AT+CGACT:啟用或停用 PDP 連線。 使用方式:輸入 AT+CGACT=1,啟用 PDP 連線。
  12. AT+QMTOPEN:建立 MQTT 連線。 使用方式:輸入 AT+QMTOPEN=0,”broker.hivemq.com”,1883,建立到hivemq.com 的 MQTT 連線。
  13. AT+QMTPUB:發佈 MQTT 訊息。 使用方式:輸入 AT+QMTPUB=0,0,0,0,”test message”,向 Topic “0” 發佈訊息 “test message”。
  14. AT+QMTSUB:訂閱 MQTT 訊息。 使用方式:輸入 AT+QMTSUB=0,0,”topic1″,1,訂閱 Topic “topic1″。
  15. AT+HTTPINIT:初始化 HTTP 服務。 使用方式:輸入 AT+HTTPINIT,初始化 HTTP。
  16. GPS指令:使用AT+QGPS、AT+QGPSLOC、AT+QGPSEND等指令可以開啟GPS定位功能、獲取GPS定位信息、停止GPS定位等操作。
  17. HTTP/HTTPS指令:使用AT+QHTTPURL、AT+QHTTPGET、AT+QHTTPPOST、AT+QHTTPSVERIFY等指令可以設置HTTP/HTTPS訪問的URL、發送GET或POST請求、驗證HTTPS證書等操作。

開箱實測

現在開始來以Arduino IDE 測試MTDuino IoT開發板。

1.首先將MTDuino IoT開發板,以Micro USB接到電腦USB端。

2.開啟Arduino IDE,電腦將自動找到開發板驅動程式,及對映的Com Port通訊埠,如下圖:

3.輸入以下程式碼:

#include
#include "wiring_private.h"
#define BG77_PWRKEY_PA27 26 /* PWRKEY */
#define BG77_RSYTKEY_PA08 27 /* RSTKEY */

#define BG77Serial Serial2

void setup() {
pinMode(BG77_PWRKEY_PA27, OUTPUT);
digitalWrite(BG77_PWRKEY_PA27, LOW);
delay(100);
digitalWrite(BG77_PWRKEY_PA27, HIGH); // 啟動BG77模組
delay(2000);
digitalWrite(BG77_PWRKEY_PA27, LOW);
delay(1000);
BG77Serial.begin(115200); // 初始化BG77串口,設定鮑率為115200
Serial.begin(9600); // 初始化USB串口,設定鮑率為9600
while (!Serial) {
;
}

}

void loop() {
if (BG77Serial.available()) { // 檢查BG77串口是否有數據
int c = Serial2.read(); //讀取軟BG77串口的數據
Serial.write(c); //輸出到USB串口
}

if ( Serial.available()) { //檢查USB串口是否有數據
int c = Serial.read(); // 讀取軟USB串口的數據
BG77Serial.write(c); // 輸出到BG77串口
}
}

MTDuino IoT開發板採用SAMD21 MCU,並將UART1(Serial2)連接BG77通訊模組,將MCU D26(PA27)接BG77的PowerKey,D27(PA08)接BG77模組Reset接腳,BG77啟動時須送出HIGH,並延遲2秒,做為模組初始供電,如上面程式:digitalWrite(BG77_PWRKEY_PA27, HIGH); // 啟動BG77模組。

另也要初始化模組通訊埠傳輸率(預設:115200bps,以Serial2連接BG77),如上面程式:BG77Serial.begin(115200);  // 初始化BG77串口,設定鮑率為115200

4.將上面程式碼上傳後,打開Serial monitor,在上方輸入欄中輸入AT指令,可先輸入”AT”,查看模組是否有回覆”OK”。

5.測試一下上面提到的BG77模組基本AT指令,如下圖:


6.其他常用指令如下,可以測一測:

(1) 查詢sim是否安裝插入狀態,輸入:AT+CPIN
若回應為READY,表示SIM卡存在且不需要輸入PIN。
若回應為 SIMPIN,則需要輸入PIN。
若回應為 ERROR,則需要檢查SIM卡是否存在。

(2)查詢是否已註冊入網,輸入:AT+CEREG
命令返回:CEREG: 0,1

(3)設定啟用APN:AT+QGACT=1,1,”apn”,”internet.iot”
中華電信NB-IoT服務的APN :“internet.iot”
遠傳電信APN:”nbiot”
台灣大哥大APN:”twm.nbiot”

(4)設定後查詢APN是否設定,等待一分鐘再查詢是否已經註冊入網。
輸入:AT+CGDCONT
命令返回:+CGDCONT: 1,”IP”,”internet.iot”,”10.163.208.172″,0,0,0,0

(5)取得IP位址:
輸入:AT+CGPADDR=1
命令返回:+CGPADDR: 1,10.173.51.153,32.1.180.0.226.63.68.55.79.124.56.107.125.29.232.216

(6)收訊訊號強度RSSI查詢:
輸入:AT+CSQ
命令返回:+CSQ: 21,99
OK
收訊訊號強度RSSI查詢回應內容的第一組數值,為收訊訊號強度,表示RSSI在 -100dBm到 -99dBm之間,轉換公式:
輸入:AT+CESQ
命令返回:+CESQ: 99,99,255,255,20,42

GPS功能AT指令測試

MTDuino IOT採用BG77 雙模低功耗通訊模組,模組也內建GPS衛星定位功能,可支援GPS、GLONASS、Galileo、BeiDou、QZSS 等主要的全球衛星定位系统,以下測試一下GPS功能。

BG77 GPS功能可以AT 指令啟動及讀取,相關指令如下:

(1) AT+QGPS=1  //開啟 GNSS GPS功能

(2) AT+QGPSEND //停止GNSS GPS功能

(3) AT+QGPSLOC? //讀取GPS位址

     +QGPSLOC: 130618.0,3150.8076N,11711.9039E,0.8,89.5,2,0.00,0.0,0.0,110919,12

(4) AT+QGPSLOC=(mode:0,1,2),(time=0-3600秒,自動輸出間隔時間) //讀取GPS位址,

以不同格式回覆,如令如下:

例如:

AT+QGPSLOC=0

+QGPSLOC: 131050.0,3150.8069N,11711.9032E,1.2,90.7,3,0.00,0.0,0.0,110919,08

OK

AT+QGPSLOC=1

+QGPSLOC: 131117.0,3150.806972,N,11711.903278,E,1.3,90.6,3,0.00,0.0,0.0,110919,07

OK

AT+QGPSLOC=2

+QGPSLOC: 131140.0,31.84678,117.19838,1.3,90.5,3,0.00,0.0,0.0,110919,07

OK

AT+QGPSLOC=2,1 //每隔1秒自動回傳位置.

+QGPSLOC: 131305.0,31.84678,117.19838,1.8,89.9,3,0.00,0.0,0.0,110919,07

OK

+QGPSLOC: 131306.0,31.84678,117.19838,1.0,89.9,3,0.00,0.0,0.0,110919,08

+QGPSLOC: 131307.0,31.84678,117.19838,1.0,89.9,3,0.00,0.0,0.0,110919,08

+QGPSLOC: 131308.0,31.84678,117.19838,0.9,89.9,3,0.00,0.0,0.0,110919,08

AT+QGPSLOC=2,0 //取消自動回傳位置功能。

+QGPSLOC: 131431.0,31.84678,117.19838,0.9,89.7,3,0.00,0.0,0.0,110919,09

OK

抓取GPS範例程式如下:

#include
#include "wiring_private.h"
#define BG77_PWRKEY_PA27 26 /* PWRKEY */
#define BG77_RSYTKEY_PA08 27 /* RSTKEY */
#define BG77_GPS 9 /* GPS Status */
#define BG77Serial Serial2 // BG77 對映MTDuino_NBGPS 格板Serial2
#define BG77 Serial2 // BG77 對映MTDuino_NBGPS 格板Serial2

String gpsData = "";
long gettry=0;

void setup(void) {
BG77Serial.begin(115200); // 初始化BG77串口,設定鮑率為115200
Serial.begin(115200); // 初始化USB串口,設定鮑率為115200
delay(100);
pinMode(BG77_PWRKEY_PA27, OUTPUT);
pinMode(BG77_GPS, OUTPUT);
digitalWrite(BG77_PWRKEY_PA27, LOW);
delay(1000);
digitalWrite(BG77_PWRKEY_PA27, HIGH);
delay(2000);
digitalWrite(BG77_PWRKEY_PA27, LOW);
delay(1000);

Serial.println("BG77模塊已啟動");
BG77Serial.println("ATE0");
sendATcommand("AT","OK",5000);
sendATcommand("AT+QGPSCFG="priority",0","OK",1000);
sendATcommand("AT+QGPSCFG="autogps",1", "OK",1000); // 設置模組自動啟動GPS定位
sendATcommand("AT+QGPSEND","OK",1000); // 停止GPS定位
sendATcommand("AT+QGPS=1","OK",2000); // 啟動GPS定位
Serial.println("BG77模塊GPS已啟動");
for(int i=1;i<5;i++) { digitalWrite(BG77_GPS, HIGH); delay(100); digitalWrite(BG77_GPS, LOW); delay(100); } } void loop(void) { gpsData=sendATcommand("AT+QGPSLOC=2", "+QGPSLOC: ", 3000); //獲取GPS定位數據 if (gpsData.indexOf("+QGPSLOC: ") != -1 ) { gpsData=gpsData.substring(0,gpsData.indexOf("\r\n")); Serial.println(gpsData); //Serial.print("GPS位置:"); //讀取成功中LED閃爍100ms digitalWrite(BG77_GPS, HIGH); delay(100); digitalWrite(BG77_GPS, LOW); String location = gpsData.substring(gpsData.indexOf(":") + 1); // Parser 讀取資料字串 int comma1 = location.indexOf(","); int comma2 = location.indexOf(",", comma1 + 1); int comma3 = location.indexOf(",", comma2 + 1); int comma4 = location.indexOf(",", comma3 + 1); int comma5 = location.indexOf(",", comma4 + 1); int comma6 = location.indexOf(",", comma5 + 1); int comma7 = location.indexOf(",", comma6 + 1); int comma8 = location.indexOf(",", comma7 + 1); int comma9 = location.indexOf(",", comma8 + 1); int comma10 = location.indexOf(",", comma9 + 1); // Extract latitude and longitude String latitude = location.substring(comma1 + 1, comma2); String longitude = location.substring(comma2 + 1, comma3); // Extract date and time String time = location.substring(0,comma1); String date = location.substring(comma9 + 1, comma10); // Convert time to Taiwan date time Serial.print(date); Serial.print(","); Serial.println(time); int year = date.substring(4, 6).toInt() + 2000; int month = date.substring(2, 4).toInt(); int day = date.substring(0, 2).toInt(); int hour = time.substring(0, 2).toInt() ; hour+= 8; // Convert to Taiwan time if(hour>23) {hour-=24; day+=1;}
int minute = time.substring(2, 4).toInt();
int second = time.substring(4, 6).toInt();

Serial.print("Date: ");
Serial.print(year);
Serial.print("/");
Serial.print(month);
Serial.print("/");
Serial.println(day);
Serial.print("Time: ");
Serial.print(hour);
Serial.print(":");
Serial.print(minute);
Serial.print(":");
Serial.println(second);
Serial.print("Latitude: ");
Serial.println(latitude);
Serial.print("Longitude: ");
Serial.println(longitude);
}
else {
gettry+=1;
Serial.print("GPS定位中...");
Serial.println(gettry);
}

delay(1000);

}

String sendATcommand(String command, String expectedResponse, int timeout) {
String response = "";
BG77Serial.println(command); // 發送AT指令
long int time = millis();
while ((time + timeout) > millis()) {
while (BG77Serial.available()) {
//delay(1);
char c = BG77Serial.read();
//Serial.print(c);
response += c;
if (response.indexOf(expectedResponse) != -1) {
return response;
}

}
}
}

輸出如下:

小結

本次僅就MTDuino IoT開發板基本AT指令及GPS功能介紹,下一篇將介紹如何利用內建的6軸感測器相關外加感測器,結合NBIoT功能以MQTT及HTTP方式傳送即時感測試及GPS位置至物聯網平台。

ChingChang Ko

訂閱MakerPRO知識充電報

與40000位開發者一同掌握科技創新的技術資訊!

Author: ChingChang Ko

MakerPRO社群技術顧問 柯大創客屋社群創辦人,柯大有近30年資訊電子產業研發經驗,關心最新技術,並投入不綴並於社群分享技術經驗文。亦熱心指導新興團隊參與技術創意競賽,獲獎無數。專長包括物聯網軟硬體整合、整體服務平台規劃設計;熟悉各種物聯網開發板及藍芽、WiFi、NFC、Zigbee、LoRa等通訊技術並熟悉各種物聯網開發板:Arduino、Edison、Linkit one 、Ameba、Raspberry,精通物聯網低功耗通訊技術LPWAN:LoRa、Sigfox、NBIoT。

Share This Post On
468 ad

2 Comments

  1. 請問開發板哪裡買得到?

    Post a Reply
    • 原廠(邁特電子)回覆,目前還未開放一般用戶購買,如果是企業行號,可以小批量購買(可至他們的粉專發送訊息聯繫:https://www.facebook.com/mightynet.co)

      Post a Reply

Submit a Comment

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