前回紹介したSORACOM(ソラコム)のSORACOM AIRのSIMカードを利用して、今回は実際にArduinoで3G通信を試してみます。今回利用する3G通信のためのモジュールはSORACOM認定モジュールにもなっているTABrain社の3GIMを使います。
今回の電子工作レシピ
完成までの時間目安:60分
必要なパーツ
目次
- Arduinoで使える3G通信モジュール「3GIM」について
- 3GIMの特徴
- 3GIMでできること
- 3GIMをArduinoで使ってみる
- 本体の接続について
- SORACOM Air側の準備
- プログラム側の準備
- サンプルスケッチを動かしてみる
- まとめ
1. Arduinoで使える3G通信モジュール「3GIM」について
前回もSORACOM認定モジュール一覧のところで紹介しましたが、現在Arduinoで3G通信を考えた場合、選択肢があまりないのが現状です。その中でも、技適が通っていて国内で利用が可能なモジュールの一つであるTABrain社の3GIMを今回使ってArduinoで3G通信をしてみます。
この3GIMはNTTドコモ社のMVNO回線を利用したSIMカードを利用して3G通信が可能なモジュールで、2016年12月現在、IIJmio、SORACOM Air、DTI、So-net(0SIM含む)、BiglobeなどのSIMカードでの利用が可能になっています。
3GIMの特徴
3GIMの特徴をあげると、
- サイズが小さい
- 電力消費量が少ない
- Arduinoでのライブラリ・サンプルスケッチなどが充実している
- UART通信が可能
- GPSモジュールも搭載している
という点があげられます。特に今回利用するArduinoのサンプルやドキュメントはサイト上およびマニュアルでかなり充実しているので、Arduinoで3G通信をするのに最適なモジュールとなっています。
[関連リンク]
3GIMでできること
実際に3GIMでできることをあげると、
- HTTP/GET・HTTP/POST機能(SSLも利用可)
- 現在時間の取得
- IMEI(ネットワーク利用制限携帯電話機照会)の取得
- 電波受信強度(RSSI)の取得
- UART通信速度設定など
- TCP/IP機能
- SMS送信機能
- SIMカードプロファイル設定機能
- 機内モード設定機能
- HL8548-GのATコマンドスルーパスモード切換え機能
- GPS位置情報(GPS/GGLONASS)の取得
と、豊富な機能を利用することが可能です。
2. 3GIMをArduinoで使ってみる
ある程度の概要がわかったところで、さっそく3GIMを使ってArduinoで3G通信をしてみたいと思います。
本体の接続について
3GIMは、本体に3G通信用のアンテナと、GPSアンテナ(別売)を接続して利用します。
また、本体には端子が6つあり、それぞれ写真のような役割を持っています。実際に利用する場合は、同封されているピンヘッダをこの6ピンに対してはんだ付けしてブレッドボードなどにさして利用すると便利です。
ピン番号 | 名称 | 機能など | Arduino側 |
1 | PWR_ON | 電源のON/OFF制御(開放または0でON、1でOFF) | 任意 |
2 | RX | UARTインタフェース(RX) | D5ピン |
3 | TX | UARTインタフェース(TX) | D4ピン |
4 | IOREF | PWR_ON,RX,TXのロジック電圧(1.8v~5V) | 3.3V or 5V |
5 | VCC | 電源電圧(3.3V~4.2V) ※1 | 3.3V |
6 | GND | グラウンド | GND |
※1. 2016年12月5日より3GIMのversion2.1の販売が開始されています。V2.1では、これまでのバージョンでは最低電圧が3.3V~4.2Vではなく3.6V~4.2Vだったため、Arduinoから直接電源を取ることができず電源回路を作成する必要があったのですが、今回のバージョンから下が3.3Vとなったため、Arduinoと直接つなぐことができ(電流は1A程度の確保が必要)、回路がすっきりするようになりました。
3GIMはArduinoとUARTによるシリアル通信を行い操作が可能であり、送信のやりとりを行うUARTのインタフェースRX(受信)、TX(送信)はArduinoのD4、D5ピンを利用します。
今回1番のPWR_ONは後ほどプログラム側で指定しますがD7ピンを接続しました。
これで、Arduinoと3GIMの接続が完了したので、SIMカードとプログラムの準備に移ります。
SORACOM AIR側の準備
今回はSORACOM AirのSIMカードを利用することにしましたので、SORACOM AirのSIMカードを利用できる状態にしておきます。SIMカードの登録などの手順はSORACOMのサイトやラズベリーパイ入門で詳しく取り上げていただいているので、そこを参考に進めてみてください。3GIMで利用できるSIMカードのサイズはmicroSIMのサイズなので、nanoSIMなどの場合は、写真のようにアダプタを装着する必要があります。
プログラム側の準備
プログラム側では、3GIMのサイトからライブラリをダウンロードして追加しておく必要があります。
最新版のライブラリは下記のページのダウンロード・技術情報の項目からダウンロードが可能です。2016年12月現在、Arduino UNOで利用するライブラリは「a3gim_R4.1.zip」が最新です。
ダウンロードしたzipをArduinoのIDEの上部メニュー「スケッチ」-「ライブラリをインクルード」-「.zipのライブラリをインストール」を選択して追加してください。
Arduino側へのライブラリの追加が完了したら、Arduinoで3GIMを使うための準備が完了です。
サンプルスケッチを動かしてみる
実際にサンプルスケッチを動かしてみます。ライブラリの追加が完了しているとArduino IDEの「ファイル」-「スケッチの例」のリストに「a3gim」という項目ができていますので、その中のサンプルを動かして、3GIMを動作させてみます。具体的な関数の役割など関しては、次回以降、実際にプログラムを作成しながら理解していきます。
サンプルプログラム – blink_led
まず3GIMが正常に接続できているか確認する意味でも、3GIMモジュール上のLEDをLチカさせるプログラムです。
// 3GIM(V2) sample sketch -- setLED #include <SoftwareSerial.h> #include <a3gim.h> #define INTERVAL 1000 // Blink interval #define baudrate 9600UL const int powerPin = 7; // 3gim power pinIf not using power control, 0 is set. void setup() { Serial.begin(baudrate); delay(3000); // Wait for Start Serial Monitor Serial.println("Ready."); _retry: Serial.print("Initializing.. "); if (a3gs.start(powerPin) == 0 && a3gs.begin(0, baudrate) == 0) Serial.println("Succeeded."); else { Serial.println("Failed."); Serial.println("Shutdown.."); a3gs.end(); a3gs.shutdown(); delay(30000); goto _retry; // Repeat } Serial.println("Blinking.."); } void loop() { a3gs.setLED(true); delay(INTERVAL); a3gs.setLED(false); delay(INTERVAL); } // END
setup関数内で3GIMの初期化や利用のための設定を行った後、loop関数内a3gs.setLED(true);とa3gs.setLED(false);部分でLEDをオンオフしているプログラムとなっていますね。動作させると動画のようにLEDがチカチカします。
サンプルプログラム-シリアルモニターで3GIMの操作
次は、3GIMに搭載されているコマンドをシリアルモニターを利用して操作するプログラムです。3GIMのマニュアルに掲載されているコマンド一覧をもとに、SORACOMのSIMカードを3GIMに設定してみます。
#include <SoftwareSerial.h> SoftwareSerial Serial3g(4, 5); const unsigned long baudrate = 9600; void setup() { Serial.begin(baudrate); Serial3g.begin(baudrate); pinMode(7,OUTPUT); digitalWrite(7,HIGH); delay(5); digitalWrite(7,LOW); //3GIMシールド電源ON Serial.println("Ready."); } void loop() { if (Serial3g.available() > 0) { char c = Serial3g.read(); Serial.print(c); } if (Serial.available() > 0) { char c = Serial.read(); Serial.print(c); // Echo back Serial3g.print(c); } }
このプログラムをArduinoに書き込むとシリアルモニターに「Ready.」と表示されたあと10秒程度待って3GIMの準備ができると「Welcom to 3GIM(v2)」と表示されますので、その後コマンド入力が可能です。コマンド送信のためシリアルモニターの改行コードを「CRおよびLF」にした上で、$から始まるコマンドを送信してみてください。ここでは、下記のコマンドを入力した結果になります。
最初、準備が完了する前に$YTコマンドを送信していますが、準備完了前なので、反応がなく、何も出力は表示されていません。その後、「WELCOM~」で準備完了後に再度$YTコマンドを送信していますが、今度は「NG 122 +GET」となっています。これは、SIMカードの3GIMへの設定がまだなので、NGとなっています。ですので、そのあと通信を必要としない$YVでバージョン情報はきちんと表示されることを確認したのち、$PSコマンドでSORACOM AirのAPN設定をします。設定が完了後、改めて$YTコマンドで現在の時刻取得を行うと成功して現在の時刻が表示されていることがわかります。
SORACOM Airの管理画面を確認すると、時刻取得時に発生した、データ通信が計測されていることが確認できました。
これで、Arduinoで3GIM使って3G通信、ようやくスタートラインに立つことができましたね!
まとめ
今回は3GIMの準備から簡単なサンプルスケッチの動作までを学びました。次回からはほかのサンプルのほか、Arduinoで3G通信ができるとどんなことができるのか3GIMを使っていろいろ試していきたいと思います!
■関連記事
SORACOM Airを使ってArduinoで通信できる?~Arduinoで3G通信をする方法
ラズベリーパイとSORACOM Airでインターネット接続!(1)登録編