工作と競馬2

電子工作、プログラミング、木工といった工作の記録記事、競馬に関する考察記事を掲載するブログ

SORACOMのIoT SIM plan-D D-300MBとLTE-M Shield for Arduinoを使ってみる(1) --- 手始めにArduino UNOと組み合わせて動かす ---

概要

SORACOMのIoT SIM plan-D D-300MBとLTE-M Shield for Arduinoを使い、通信できることを確認した。



背景と目的

ここ最近作成に取り組んできた家庭菜園系アイテムである自動水やり器観察用カメラは、自宅ベランダで動かしているのだが、今後は畑やビニールハウスといった場所でも稼働させたい。そこで、価格と容量のバランスに優れたLTE通信の選択肢を検討していたところ、今年SORACOMから出た300MB/月までは330円(SMSなし)という低価格の通信プランである IoT SIM plan-D D-300MB に魅力を感じた。 というわけで、実際に使って試してみる。



詳細

0. 目標

  • モジュールをマイコン等と接続し、画像データ(300kB程度)をクラウドに送信できるようにする
  • スリープ等、使用しないときに消費電力を抑える手段を知っておく


0. 環境

お試しなので、Arduino UNOを使ってLTE-M Shield for Arduinoとやりとりし、データがLTEで飛ばせればOK。


1. 調達

自作のシステム組み込みを想定し、以下を調達することにした。SIMカードと通信モジュールの開発ボードだ。費用は7000円程度の初期投資と、月々の通信料330円を足してもまあ小遣いで十分遊べる範囲だ。

  • SORACOM IoT SIM plan-D D-300MB データ通信のみ
  • LTE-M Shield for Arduino(LTEモジュール基板部分を以降BG96と呼ぶ)

soracom.jphttps://soracom.jp/services/air/cellular/price_specific_area_sim/#D-300MB

soracom.jp


2. デバイス稼働時間を SORACOM Harvest へ送信する

https://users.soracom.io/ja-jp/guides/starter-kits/arduino/harvest/

上記に従って、とりあえず送信できるか試す。

2.1 USBドライバーのインストール

https://users.soracom.io/ja-jp/guides/starter-kits/arduino/development-environment/

上記に従い、PCに、CP210x Universal Windows Driverをダウンロードし、zipを解凍してインストーラを叩く。


2.2 ハードウェア接続

以下のように、Arduino UNOに接続した。SIMカードも挿してある。USBケーブルはPCへ。

2.3 ネットワーク設定の書き込み

ボーレートと改行コードに注意。

※注意 安易にコピペすると、行末に思わぬ改行コードが付加されていることに気づかずエラーになるため、手入力するのが無難。

AT+CGDCONT=1,"IP","soracom.io","0.0.0.0",0,0,0,0
AT+QCFG="nwscanmode",0,0
AT+QCFG="iotopmode",0,0
AT+QCFG="nwscanseq",00,1

2.4 SORACOMコンソール上でセットアップ

SIMは、コンソールで受け取り完了通知をした時点で登録されているので、使用開始した。 参考URLの通りなので、SORACOM harvestのセットアップを行った。ちなみに、SORACOM harvestの利用料金は1日5.5円だが、SIM 1枚は無料使用枠で賄えるようなので、とりあえず今回はお金はかからない。

2.5 TinyGSM ライブラリのインストールとスケッチの書き込み

参考URLに従い、TinyGSM ライブラリをダウンロードし、Arduino IDEでzip形式のライブラリとしてインクルード。 send_uptime_with_soracom.inoを書き込んだ。

2.6 データの確認

シリアルコンソールを開き、ボーレートを115200bpsに変更して、しばらく待っていると以下の通り、送信された。

SORACOMコンソールで確認した結果。ちゃんとデータが受信されている。


3. ボーレートの変更

Arduino UNOとBG96の間は9600bpsのシリアル通信でATコマンドのやりとりしていて、LTE区間での速度はさすがにもっと出せるはずなので、このままだとこの部分がボトルネックになってしまいそうだ。そこで、ボーレートを上げてみる。

情報を漁ってみたところ、

https://github.com/vshymanskyy/TinyGSM#baud-rates

に記載があり、

https://github.com/vshymanskyy/TinyGSM/blob/a57014d0e6ef5a5431a68ec444c2aabfbd89defb/src/TinyGsmCommon.h

などを参考に、send_uptime_with_soracom.inoを変更した。

  #define BAUDRATE 57600 // 適宜変更

  :

  // まずArduino UNO側ソフトウェアシリアルを9600bpsで有効化
  LTE_M_shieldUART.begin(9600);

  // BG96をリセット
  CONSOLE.print(F("modem.restart()"));
  modem.restart();
  CONSOLE.println(F(" done."));

  // ATコマンドでボーレートを変える
  LTE_M_shieldUART.print("AT+IPR=" + String(BAUDRATE) + "\r\n");

  // レスポンス
  // 正しく変更されればOKのレスポンスがある
  String input = LTE_M_shieldUART.readString();
  CONSOLE.print(F("modem setBaud: "));
  CONSOLE.println(input);

  // BG96が変更できたら改めてArduino UNO側ソフトウェアシリアルを変更
  LTE_M_shieldUART.begin(BAUDRATE);

  // 調整用、入れた方がいいかも
  delay(1000);

  // 以降、ATコマンドで通信
  :

いろいろ試したころ、57600bpsが最高だった。115200bpsでもOKのレスポンスはあるがそれ以降の通信がうまくいかなかった。 念のためMAIN_TX,MAIN_RX端子の波形を観察し、実際に変更されているか確認したところ、確かに変更されていた。115200bpsはSoftwareSerialにジッタや割り込み処理遅延などがあるせいか?原因はよくわからなかった。もしかしたら、ESP32などを使えばもっと115200まで行けるかも?後で試してみたい。

とはいえ、とりあえずデフォルトの6倍までは上げられたのでひとまず良しとする。



まとめと今後の課題