はじめに
2021年9月に発売されたM5Stack CAT-M UNIT(SIM7080G搭載)を動かしてSORACOMまで送信した話です。
Tomorrow! UnitCatM with sim7080g with Telec and SoftBank certification, pic.twitter.com/5IA58W61Y0
— M5Stack (@M5Stack) September 9, 2021
初めにTwitterを見たときは日本で使えるのか不明だったのでスルーしていました。
ですが最近国内での使用レポートを見かけるようになりそれならばと購入してみました。
**CAT-M(LTE Cat.M1)**とは4G LTE の携帯電話通信網を利用し広範囲・省電力でIoT機器に適した通信規格です。SORACOMではDOCOMOとKDDI網が利用でき1回線ごと月110円~からと個人でも手を出しやすいです
Interface 無線通信モジュール一覧 セルラー系
MCT向けの省電力LPWA規格「LTE Cat.M1」、国内提供は免許が必要で携帯電話キャリアが中心に-INTERNET Watch
M5Stackには3G 拡張ボードがありますが近々3G網が終わるということもありそれに代わる通信モジュールになります。
自己紹介
農業Iotにチャレンジ中!
モットーは「楽をするためなら手間は惜しまない」
好きなM5Stack製品は M5StickC 最近は#スタックチャン が気になってます
好きなSORACOMサービスは バイナリーパーサーです
ハードウェア
https://shop.m5stack.com/products/sim7080g-cat-m-nb-iot-unit
https://docs.m5stack.com/en/unit/cat_m
http://www.cathay.jp/product/lte/SIM7080G.pdf
SIM7080G搭載類似商品
https://www.waveshare.com/wiki/SIM7080G_Cat-M/NB-IoT_HAT
https://www.waveshare.com/pico-sim7080g-cat-m-nb-iot.htm
https://nextstep.official.ec/items/55779084
モジュールモデル | SIM7080G |
---|---|
制御コマンド | ATコマンド |
Cat-M | 上り: 1119Kbps 下り: 589Kbps |
通信インターフェース | UART: baud 115200 8N1 |
プロトコルサポート | TCP / UDP / HTTP / HTTPS / TLS / DTLS / PING / LWM2M / COAP / MQTT |
スタンバイ動作電流 | 49.4mA |
価格 |
|
技適マークも印字してあります
NB-IoTにも対応してますがよく知らないのでここでは触れません
回路図
https://static-cdn.m5stack.com/resource/docs/static/assets/img/product_pics/unit/cat_m/cat_m_sch_01.webp
VCC 5V入力を3.3Vに降圧しモジュール内でSIM_Vcc 1.8v を生成しています 。
(モジュール動作電圧は2.7V~4.8VDC)
NETLIGHTにつながる青色LEDが通信接続中は早く点滅します。64ms ON, 300ms OFF
PWRKEYにパルスを送るとモデムのリセットできるそうですがSTATUSと0Ωで直結してあります。
今回は手元にあったDocomoのNANOsimを挿して使いました
スケッチ
SORACOM公式製品の
通称 | 画像 |
---|---|
あのボタン | |
しろボタン | |
ひげボタン | |
にせボタン |
を真似してM5StickCとCAT-M UNITで「まねボタン(仮称)」を作ってみました。
ボタンを押すとSORACOM Harvestにボタンの状態とバッテリーレベルを送信します。
今回は確認のため稼働時間を含め毎分1回送信してます。
(なお電力消費については考慮してないのでそのままでは乾電池で長期間使える本物のボタンのような実用性はありません)まねボタン pic.twitter.com/rIqqxM6Pyd
— mnl_t (@mnlt18) December 15, 2021
TinyGSMライブラリはSIM7080Gに対応しているのでそれを利用します。
client.write()を使いエンドポイント uni.soracom.io:23080 へバイナリーで送信します。
- 参考文献『作って学ぶSORACOM入門』
#include <Arduino.h>
#include <M5StickC.h>
#include "AXP192.h"
#define TINY_GSM_MODEM_SIM7080
#include <TinyGsmClient.h>
#include <ArduinoHttpClient.h>
#define SerialMon Serial
#define SerialAT Serial1
#define ENDPOINT "uni.soracom.io"
TinyGsm modem(SerialAT);
TinyGsmClient client(modem);
typedef struct struct_message {
float batvol;
float usbvol;
uint16_t uptimesec;
bool BtnA;
bool BtnB;
} struct_message;
struct_message myData;
// binary-parser
// batvol:0:float:32:little-endian usbvol:4:float:32:little-endian uptimesec:8:uint:16:little-endian BtnA:10:uint:1:0 BtnB:11:uint:1:0
void setup() {
M5.begin();//default baud rate 115200
M5.Lcd.fillScreen(WHITE);
delay(200);
SerialMon.println("Wait...");
// Set GSM module baud rate
SerialAT.begin(115200, SERIAL_8N1, 33, 32);//M5StickC
delay(1000);
// Restart takes quite some time
// To skip it, call init() instead of restart()
SerialMon.println("Initializing modem...");
// modem.restart();
modem.init();
String modemInfo = modem.getModemInfo();
SerialMon.print("Modem Info: ");
SerialMon.println(modemInfo);
//modem.gprsConnect("soracom.io", "sora", "sora");// 初回だけ必要
SerialMon.print(F("waitForNetwork()"));
while (!modem.waitForNetwork()) SerialMon.print(".");
SerialMon.println(F(" Ok."));
SerialMon.print(F("gprsConnect(soracom.io)"));
modem.gprsConnect("soracom.io", "sora", "sora");
SerialMon.println(F(" done."));
SerialMon.print(F("isNetworkConnected()"));
while (!modem.isNetworkConnected()) SerialMon.print(".");
SerialMon.println(F(" Ok."));
SerialMon.print(F("My IP addr: "));
IPAddress ipaddr = modem.localIP();
SerialMon.println(ipaddr);
}
void loop() {
myData.uptimesec = (uint16_t)(millis()/1000);
myData.batvol = M5.Axp.GetBatVoltage();
myData.usbvol = M5.Axp.GetVBusVoltage();
myData.BtnA = M5.BtnA.wasPressed();
myData.BtnB = M5.BtnB.wasPressed();
if (myData.BtnA || myData.BtnB || (myData.uptimesec % 60 == 0)){
//if (myData.BtnA || myData.BtnB ){
M5.Lcd.fillCircle(40, 60, 30, GREEN);
/* connect */
if (!client.connect(ENDPOINT, 23080)) {
M5.Lcd.fillCircle(40, 60, 30, RED);
SerialMon.println(F("failed."));
delay(3000);
return;
}
/* send */
client.write((const uint8_t*)&myData, sizeof(myData));
SerialMon.print("batvol:");SerialMon.println(myData.batvol);
SerialMon.print("usbvol:");SerialMon.println(myData.usbvol);
SerialMon.print("uptimesec:");SerialMon.println(myData.uptimesec);
SerialMon.print("BtnA:");SerialMon.println(myData.BtnA);
SerialMon.print("BtnB:");SerialMon.println(myData.BtnB);
SerialMon.println("sent.");
char buf[1 * 1024] = {0};
client.readBytes(buf, sizeof(buf));
client.stop();
SerialMon.print("recv:");SerialMon.println(buf);
}
M5.Lcd.fillScreen(BLACK);
M5.update();
delay(100);
}
#SORACOMユーザーコンソール
SORACOMユーザーコンソール -> simグループ管理 -> SORACOM Air for セルラー設定 -> バイナリーパーサー -> フォーマット に入力
:little-endian
を付けるのに注意
batvol:0:float:32:little-endian usbvol:4:float:32:little-endian uptimesec:8:uint:16:little-endian BtnA:10:uint:1:0 BtnB:11:uint:1:0
Unified Endpointに送信しているのでSORACOM Funkを使いボタンを押したらSlackに送信することなどもできます
終わりに
このCAT-M UNITを注文して届く間にも次々とSIM7080Gを載せた製品が予告されています。
日本国内でも販売されるようになればWiFiのないところでのIoTが
より低コストでできるようになりそうで期待が持てます。
something soon. pic.twitter.com/84oGAXiLAc
— M5Stack (@M5Stack) December 8, 2021
Unit CatM+GNSS. with DC/DC. pic.twitter.com/sPfYY5tpBp
— M5Stack (@M5Stack) December 15, 2021
UnitCatM+GNSS is ready to manufactory. pic.twitter.com/gXO7cBa5fQ
— M5Stack (@M5Stack) January 14, 2022
PoECam-W with Telec. CatM+GNSS JP Unit with telec. pic.twitter.com/BxGVL2Pe9a
— M5Stack (@M5Stack) April 9, 2022
StampCatM pic.twitter.com/Z5LjTOQLnL
— M5Stack (@M5Stack) December 13, 2021
StampCatM(sim7080G) works. pic.twitter.com/prUbhwYNWE
— M5Stack (@M5Stack) December 15, 2021
StampCatM pic.twitter.com/rfMN3NijNd
— M5Stack (@M5Stack) December 22, 2021
Keep Developing on StampCatM pic.twitter.com/MVUnN8ATmi
— M5Stack (@M5Stack) December 24, 2021
ThermalOnline-CatM = MLX90640+Sim7080G+RS485+Core+DinRail+IoTBASE pic.twitter.com/Y9vYMpyGgu
— M5Stack (@M5Stack) November 29, 2021
📣📣 So Christmas eve and to help you not get bored during the holidays we've added two new items- a functional base for IoT data transmission and a remote thermal monitoring kit. Have fun catching those items but don't get caught by the evil snowman🎄
— M5Stack (@M5Stack) December 24, 2021
👉https://t.co/NaOsxS46ag pic.twitter.com/pvc7S1h8Ns
ToughCom base board. pic.twitter.com/QEZXv6ZXZX
— M5Stack (@M5Stack) December 27, 2021
AtomDTU Mate ing pic.twitter.com/OZdZI9lcJj
— M5Stack (@M5Stack) February 10, 2022
StampCatM/Cat1 next week. pic.twitter.com/S9yD7nkzoz
— M5Stack (@M5Stack) May 26, 2022
📣STAMP Cat-M is the global version of CatM & NB-IoT dual-mode wireless communication module. Control Via AT Commands, and supports multiple communication protocols. Designed for applications that need low latency and low throughput data communication.
— M5Stack (@M5Stack) June 3, 2022
👉https://t.co/S96lGWLeX4 pic.twitter.com/lctDsexBFw