はじめての電子工作超入門

第53回 SORACOM Air×3GIMによるArduinoの3G通信〜Arduinoで3G通信をする方法

dsc_0071

前回紹介したSORACOM(ソラコム)のSORACOM AIRのSIMカードを利用して、今回は実際にArduinoで3G通信を試してみます。今回利用する3G通信のためのモジュールはSORACOM認定モジュールにもなっているTABrain社の3GIMを使います。

今回の電子工作レシピ

完成までの時間目安:60分
必要なパーツ

目次

  1. Arduinoで使える3G通信モジュール「3GIM」について
    1. 3GIMの特徴
    2. 3GIMでできること
  2. 3GIMをArduinoで使ってみる
    1. 本体の接続について
    2. SORACOM Air側の準備
    3. プログラム側の準備
    4. サンプルスケッチを動かしてみる
  3. まとめ

1. Arduinoで使える3G通信モジュール「3GIM」について

写真1 TABrain社の3GIM(Ver2.1)

写真1 TABrain社の3G通信モジュール3GIM(Ver2.1)

前回も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でできることをあげると、

  1. HTTP/GET・HTTP/POST機能(SSLも利用可)
  2. 現在時間の取得
  3. IMEI(ネットワーク利用制限携帯電話機照会)の取得
  4. 電波受信強度(RSSI)の取得
  5. UART通信速度設定など
  6. TCP/IP機能
  7. SMS送信機能
  8. SIMカードプロファイル設定機能
  9. 機内モード設定機能
  10. HL8548-GのATコマンドスルーパスモード切換え機能
  11. GPS位置情報(GPS/GGLONASS)の取得

と、豊富な機能を利用することが可能です。

 

2. 3GIMをArduinoで使ってみる

ある程度の概要がわかったところで、さっそく3GIMを使ってArduinoで3G通信をしてみたいと思います。

本体の接続について

写真2 3GIM本体と3G用アンテナ・GPS用アンテナ

写真2 3GIM本体と3G用アンテナ・GPS用アンテナ

3GIMは、本体に3G通信用のアンテナと、GPSアンテナ(別売)を接続して利用します。

写真3 アンテナ接続箇所

写真3 アンテナ接続箇所

また、本体には端子が6つあり、それぞれ写真のような役割を持っています。実際に利用する場合は、同封されているピンヘッダをこの6ピンに対してはんだ付けしてブレッドボードなどにさして利用すると便利です。

写真4 3GIMのピン配置

写真4 3GIMのピン配置

 

ピン番号 名称 機能など 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ピンを利用します。

写真4 3GIMとArduinoを接続

写真5 3GIMとArduinoを接続

今回1番のPWR_ONは後ほどプログラム側で指定しますがD7ピンを接続しました。

これで、Arduinoと3GIMの接続が完了したので、SIMカードとプログラムの準備に移ります。

 

SORACOM AIR側の準備

今回はSORACOM AirのSIMカードを利用することにしましたので、SORACOM AirのSIMカードを利用できる状態にしておきます。SIMカードの登録などの手順はSORACOMのサイトラズベリーパイ入門で詳しく取り上げていただいているので、そこを参考に進めてみてください。3GIMで利用できるSIMカードのサイズはmicroSIMのサイズなので、nanoSIMなどの場合は、写真のようにアダプタを装着する必要があります。

写真6 3GIM本体のSIMソケットとSIMカード

写真6 3GIM本体のSIMソケットとSIMカード

 

プログラム側の準備

プログラム側では、3GIMのサイトからライブラリをダウンロードして追加しておく必要があります。

最新版のライブラリは下記のページのダウンロード・技術情報の項目からダウンロードが可能です。2016年12月現在、Arduino UNOで利用するライブラリは「a3gim_R4.1.zip」が最新です。

3GIM(3G IoT Module) Ver2 について

写真7 Arduino UNO用3GIMライブラリ

写真7 Arduino UNO用3GIMライブラリ

ダウンロードした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 – 現在の時刻を取得
$YV – ファームウェアのバージョンを表示
$PS – 「APNホスト ユーザー名 パスワード」を引数にして、SIMカードのAPN設定

 

図1 シリアルモニターでのコマンド送信

図1 シリアルモニターでのコマンド送信

最初、準備が完了する前に$YTコマンドを送信していますが、準備完了前なので、反応がなく、何も出力は表示されていません。その後、「WELCOM~」で準備完了後に再度$YTコマンドを送信していますが、今度は「NG 122 +GET」となっています。これは、SIMカードの3GIMへの設定がまだなので、NGとなっています。ですので、そのあと通信を必要としない$YVでバージョン情報はきちんと表示されることを確認したのち、$PSコマンドでSORACOM AirのAPN設定をします。設定が完了後、改めて$YTコマンドで現在の時刻取得を行うと成功して現在の時刻が表示されていることがわかります。

SORACOM Airの管理画面を確認すると、時刻取得時に発生した、データ通信が計測されていることが確認できました。

図2 SORACOM Airのデータ通信料

図2 SORACOM Airのデータ通信料

 

これで、Arduinoで3GIM使って3G通信、ようやくスタートラインに立つことができましたね!

 

まとめ

今回は3GIMの準備から簡単なサンプルスケッチの動作までを学びました。次回からはほかのサンプルのほか、Arduinoで3G通信ができるとどんなことができるのか3GIMを使っていろいろ試していきたいと思います!

 

■関連記事

SORACOM Airを使ってArduinoで通信できる?~Arduinoで3G通信をする方法
ラズベリーパイとSORACOM Airでインターネット接続!(1)登録編

電子工作マニュアル Vol.2
赤川シホロ

電子工作や新しいデバイスをこよなく愛するエンジニア。日常生活のちょっとしたことを電子工作で作って試して、おもしろく過ごしたいと日々考えています。