はじめに
IoT Connect Mobile Type S というNTTコミュニケーションズが提供している通信回線を M5Stack用SIM7080G搭載CAT-M/NB-IoT+GNSSユニット で動かしてみます。
まずは、このモジュールで通信環境が整うかどうかがポイントになるので、今回は疎通確認までを記事にまとめました。
必要なもの
- M5Stack用 SIM7080G搭載 CAT-M/NB-IoT+GNSSユニット(アンテナつき)
- M5Stack Core2 IoT開発キット
- IoT向けモバイルデータ通信サービス IoT Connect Mobile Type S のSIMカード
環境
- PlatformIO
- ライブラリ:TinyGSM
サンプルコード
main.cpp
// SIM7080用のモデムモジュール
#define TINY_GSM_MODEM_SIM7080
#include <M5Core2.h>
#include <TinyGsmClient.h>
// APN設定
const char APN[] = "mobiledata.ntt.com";
const char LTE_USER[] = "";
const char LTE_PASS[] = "";
TinyGsm modem(Serial2);
TinyGsmClient client(modem);
// モデムの初期化
void initSim(){
// シリアル通信の開始
Serial2.begin(115200, SERIAL_8N1, 33, 32);
delay(6000);
// モデムの初期化
Serial.println("Initializing modem...");
if(!modem.init())
{
Serial.println("Failed to restart modem.");
}
// モデムの情報を表示
String modemInfo = modem.getModemInfo();
Serial.println("modem.getModemInfo()");
Serial.println(modemInfo);
// SIMカードのチェック
Serial.println("Checking SIM card...");
if (!modem.getSimStatus()) {
Serial.println("SIM card not inserted.");
return;
}
// ネットワークモードと優先モードの設定
const int NETWORK_MODE = 2; // 2: Automatic, 13: GSM only, 38: LTE only, 51: GSM and LTE only
const int PREFERRED_MODE = 1; // 1: CAT-M only, 2: NB-IoT only, 3: CAT-M and NB-IoT
bool result;
do {
result = modem.setNetworkMode(NETWORK_MODE);
Serial.println("Setting network mode to " + String(NETWORK_MODE) + ": " + (result ? "OK" : "NG"));
delay(500);
} while (!result);
do {
result = modem.setPreferredMode(PREFERRED_MODE);
Serial.println("Setting preferred mode to " + String(PREFERRED_MODE) + ": " + (result ? "OK" : "NG"));
delay(500);
} while (!result);
// ネットワークへの接続待ち
Serial.println("Waiting for network...");
if (!modem.waitForNetwork()) {
Serial.println("Failed to connect to network.");
return;
}
// ネットワークへの接続状態を表示
Serial.println("Network connected: " + String(modem.isNetworkConnected()));
// APNへの接続
Serial.println("Connecting to APN: " + String(APN));
if (!modem.gprsConnect(APN)) {
Serial.println("Failed to connect to APN.");
return;
}
// GPRSへの接続状態を表示
Serial.println("GPRS connected: " + String(modem.isGprsConnected()));
// SIMカード、IMEI、オペレーター、ローカルIP、信号強度などの情報を表示
Serial.println("SIM CCID: " + modem.getSimCCID());
Serial.println("IMEI: " + modem.getIMEI());
Serial.println("Operator: " + modem.getOperator());
Serial.println("Local IP: " + modem.localIP().toString());
Serial.println("Signal quality: " + String(modem.getSignalQuality()));
}
void setup(){
M5.begin(true, true, true, false);
initSim();
}
void loop(){
Serial.print(".");
delay(5000);
M5.update();
}
その他の注意点
終わりに
個人的には、使うサービスはどこでも良いのですが、いろいろ選択できた方が自由度が高いので、IoT Connect Mobile Type Sで動作することが確認できたのは良かったです。
ここまで来ると、1NCEも使ってみたくなりますね。