こんにちは すみやです。
今回はスイッチサイエンスから発売されるSARA-R410M LTEモジュールピッチ変換基板を紹介します。このモジュールを使えば、Arduinoなどのマイコンボードを直接LTE回線へ接続することができます。
まずはスイッチサイエンスの商品ページにある通り、ATコマンドでインターネットへ接続してみます。SIMカードは手元にあったドコモ系MVNOのSIMを使用します。

シリアル変換はFTDI USBシリアル変換アダプター Rev.2を使用しました。このモジュールはIOレベルが1.8V なので、NTB0104 レベルシフタ ピッチ変換済みモジュールなどでレベル変換が必要です。スイッチサイエンスのUSBシリアル変換アダプター Type-C版を使用すれば、1.8 VのIOに対応しているため、そのまま接続できます。

ピンアサインが基板の裏面にあるので、正直見ずらいのですが、5 V、GND、RX、TXを確実に配線していきます。また、RTS、PWR_ONをGNDへ接続します。

Arduino IDEのシリアルモニタを使ってATコマンドを入力していきます。
ここまで商品ページの手順通り、インターネットへ接続できました。
ATコマンドで接続することが確認できましたが、よりお手軽にArduinoで使えるTinyGSMというライブラリを使用してみます。Githubからダウンロードもできますが、Arduino IDEのライブラリマネージャからもダウンロードできます。

サンプルとして、WebClientを実行してみます。最初にArduino Unoを試してみましたが、コンパイル後のメモリサイズがギリギリで、動作が安定しなかったのでArduino Megaを使用します。

WebClientのスケッチを編集します。モデムはTINY_GSM_MODEM_SARAR4を選択。コメントアウトを外します。
#define TINY_GSM_MODEM_SARAR4
Arduino Megaはハードウェアシリアルを使用するのでSoftwareSerialの項目はコメントアウトのまま。APNを入力し、書き込みをすると、ATコマンドを叩くより簡単にインターネットに接続することができました。
// Your GPRS credentials, if any
const char apn[] = "YourAPN";
const char gprsUser[] = "";
const char gprsPass[] = "";

接続に成功すると、Webから取得されたTINYGSMのアスキーアートが表示されます。
さて、実際にArduinoで扱うことができたので、動作するものを作ってみます。
LTEモジュールはもちろん屋外で使用できるので、今回は位置情報を送信してみます。

SARA-R410MにはGPSは搭載されていないので、手元にあったM5Stack用のGPSユニットを使用します。
まず、自宅サーバー上に経度緯度をGETメソッドで受信しデータベースに書き込むプログラムを設置しました。
Arduinoのスケッチは先程のHttpClientを改造し、GETメソッドで経度緯度を送信するスケッチを作成します。GPSの受信に関するスケッチは M5StackでGPS付き心拍ロガーを作る を参考にTinyGPS++を利用し、URLに経度緯度を載せ、送信するようにしました。
// Make a HTTP GET request:
SerialMon.println("Performing HTTP GET request...");
client.print(String("GET ") + resource+String(gps.location.lat(),6)+String("&lng=")+ String(gps.location.lng(),6)+ " HTTP/1.1\r\n");
client.print(String("Host: ") + server + "\r\n");
client.print("Connection: close\r\n\r\n");
client.println();

実際に車に搭載し、自宅から黒部ダムの玄関口、扇沢駅まで出かけてみました。


帰宅後、サーバーのログを確認すると、データが送られているのを確認できました。経度緯度を地図にプロットすると、走行した道路の上をきれいになぞっています。長距離、長時間でも問題なくデータを送信することができました。

SDカード等に保存したデータではなく、実際にいる位置からサーバーに送ったデータを連続して表示しています。通信圏内であれば、日本中どこからでもArduinoをインターネットへ接続できます。
今回は経度緯度のみを送信しましたが、他にも様々なデータのテレメトリーシステムを容易に構築できそうです。スイッチサイエンス製SARA-R410M LTEモジュールピッチ変換基板はアンテナ付きで販売中です。