3GIM > Arduino UNO R3 から3G通信 > 1. 3GIMの設定

以下の続きになります。
[3GIM > Arduino UNO R3 から3G通信 \- Qiita](https://qiita.com/sugasaki/items/6a0c76ef307eb9dd9a06)


3GIMにはマイコン（LPC812）が載っており、SIM Profile（SIM設定）、UARTの通信速度を登録することができます。


![Kobito.qG8gUU.png](https://qiita-image-store.s3.amazonaws.com/0/49910/7d7b50fa-62e1-ec0c-acc1-b9b41ef730a8.png "Kobito.qG8gUU.png")



まずはSIMの設定と通信速度の登録を行います。


## 設定用スケッチ（プログラム）monitor.ino

Arduino IDEを起動して以下のスケッチをmonitor.inoという名前で作成します。

``` monitor.ino

unsigned long Baudrate_serialMonitor = 9600; //シリアルモニタの通信速度
unsigned long baudrate_3gim = 9600; //3GIMとの通信速度　　$YB 9600 等で設定


// Serialの設定
#if defined(__SAMD21G18A__) 
  //IoTab, Samd21 module
  #define ioSerial      SerialUSB // USB Serial port(not Serial)
  #define a3gSerial       Serial  // Use serial port
#else
  //Arduino UNO
  #define ioSerial      Serial
  #include <SoftwareSerial.h>
  #define IEM_RXD_PIN       4   // D4(For example,If you use Leonardo or Mega etc. then change to D10..)
  #define IEM_TXD_PIN       5   // D5(For example,If you use Leonardo or Mega etc. then change to D11..)
  SoftwareSerial a3gSerial(IEM_RXD_PIN, IEM_TXD_PIN);    // Serial for IEM Interface
#endif

const int powerPin = 9;     // 3gim power pin(If not using power control, 0 is set.)


void setup() {
  while(!ioSerial);
  ioSerial.begin(Baudrate_serialMonitor);
  a3gSerial.begin(baudrate_3gim);
  
  ioSerial.println("start...");
  ioSerial.println("please wait a moment...");
  pinMode(powerPin,OUTPUT); digitalWrite(9, HIGH); delay(100);
  digitalWrite(powerPin, LOW);

 
  //Welcome to 3GIMが表示されるまで待機
  String str;
  do {
      while (!a3gSerial.available());
      str = a3gSerial.readStringUntil('\n');
      ioSerial.println(str);
  } while (str.indexOf("3GIM") < 0);
  ioSerial.println("Connected");

}

void loop() {
  String str;
  
  if (a3gSerial.available() > 0) {
    String str = a3gSerial.readStringUntil('\n');
    ioSerial.println(str);
  }

  //
  if (ioSerial.available() > 0) {
    char c = ioSerial.read();
    ioSerial.print(c);    // Echo back
    a3gSerial.print(c);
  }
}

```


## Arduino IDEの設定

Arduino IDE メニュー > ツールが以下のような設定になっていることを確認します。ボードがArduino/Genuino UNO 以外になっていればArduino/Genuino UNOを選択します。
同様にシリアルポートもArduino/Genuino UNOを選択します。
（Windowsの場合にはドライバを入れる必要がある場合があります。）

![Kobito.C4ZKoC.png](https://qiita-image-store.s3.amazonaws.com/0/49910/cd12cb03-b4f3-f703-a78b-828518281ef2.png "Kobito.C4ZKoC.png")

シリアルモニターを開き、通信速度と改行の設定を行います。
デフォルトでは9600bpsなので9600bpsを選択して先へ進めます。


![Kobito.1GlUdg.png](https://qiita-image-store.s3.amazonaws.com/0/49910/7dd00a10-fc9a-5b97-9c4f-0f444a5e277c.png "Kobito.1GlUdg.png")


## monitor.inoの動作確認

monitor.inoは3GIMとのコマンドやりとりを行うため（だけ）のプログラムになります。
まずは上記までの設定がうまくいき、3GIMとのやりとりができるかを確認します。 
ArduinoIDEからマイコンボードに書込むボタンを押下し
以下の画像のようにWelcomt to 3GIMと表示されていれば準備OKです。
（startの下の？は時々表示されます。今は気にしないで進めます。）
（Welcomt to 3GIMが表示されるまで十数秒かかります。）

![Kobito.Ae2ws9.png](https://qiita-image-store.s3.amazonaws.com/0/49910/ebdee03c-936d-7750-2de8-4c7da3a8dd8b.png "Kobito.Ae2ws9.png")


### バージョンの取得

もっとも簡単なファームウェアのバージョン取得を行います。
注）3GIMのバージョン番号ではないので誤解しないようにしてください。

Arduino IDEのシリアルモニタのコマンド送信エリアに、$YV と入力し送信ボタンを押します。
以下のように$YV=OK バージョン番号との応答があれば成功です。（おめでとうございます）

![Kobito.2nzfEN.png](https://qiita-image-store.s3.amazonaws.com/0/49910/513209e3-96b8-39c5-33cb-431435900b00.png "Kobito.2nzfEN.png")

![Kobito.01aHTw.png](https://qiita-image-store.s3.amazonaws.com/0/49910/3bfb22a6-99be-4997-111c-b56832846390.png "Kobito.01aHTw.png")

### LEDのON/OFF

「$YL 1」を送信して3GIMのLEDをON/OFFします。
3GIMのLEDが光れば成功です。

![Kobito.2l5F8H.png](https://qiita-image-store.s3.amazonaws.com/0/49910/6fa71a23-d254-27b8-0b46-304927d0f972.png "Kobito.2l5F8H.png")

次は「$YL 0」を送信してLEDを消します。

![IMG_6735.jpg](https://qiita-image-store.s3.amazonaws.com/0/49910/6a089697-3402-c4ea-8f49-cdd63397a959.jpeg "IMG_6735.jpg")




## SIM Profile（SIM設定）
ここまででmonitor.inoの使い方はだいぶわかったと思いますので、次にSIMの設定を行います。
もし間違っても再度やり直しが可能ですので安心して進めてください。

現段階では必須ではないですがSIMカードも今のうちに3GIMにセットしとけば吉です。

### $PSコマンド
以下を送信することでSIMのプロファイルを登録することができます。

`$PS APN Username Password`

以下はSORACOMの例です。
`$PS soracom.io sora sora`

![Kobito.GHTeJ8.png](https://qiita-image-store.s3.amazonaws.com/0/49910/7cd6a1be-243d-8c9a-b8fe-8a38d861e1e3.png "Kobito.GHTeJ8.png")

設定が完了すれば$PS=OKとの応答があります。
![Kobito.MWbBSc.png](https://qiita-image-store.s3.amazonaws.com/0/49910/e36d7f5b-d34c-475f-55eb-d67cae906ca2.png "Kobito.MWbBSc.png")

確認
$PSを送信して設定が反映されているか確認します。
入力したとおりに表示されればOKです。

![Kobito.pwoBoX.png](https://qiita-image-store.s3.amazonaws.com/0/49910/7759c860-eaf8-5df6-4fd4-8428e3a5fece.png "Kobito.pwoBoX.png")




## UARTの通信速度

ハードの環境に合わせてUART通信速度の登録を行います。
初期状態では9600bpsに設定されています。

以下のとおり環境によって通信速度に制限があります。

<pre>
通信ボーレートは、9600bps, 19200pbs、38400bps、57600bps、115200pbsから選択できます。
115200bpsは、ハードウェアシリアル通信時のみ正常に通信可能です。
ソフトウェアシリアル通信時は、57600bpsでは文字化けが起きます。高速利用したい場合は38400bpsを推奨します。
</pre>

ということですが、しばらくは9600bpsで使ってみて不満があれば速度をあげてみてはいかがでしょうか。

### 速度の変更方法

$YBで速度の変更と確認ができます。

$YBを送信すると現在の速度が表示されます。

![Kobito.ZZ0kFq.png](https://qiita-image-store.s3.amazonaws.com/0/49910/9a776b90-4106-dec6-8756-f912dd40e863.png "Kobito.ZZ0kFq.png")

推奨の38400bpsにしてみます。

`$YB 38400`

![Kobito.W5uXCL.png](https://qiita-image-store.s3.amazonaws.com/0/49910/3550d5a4-206b-bb74-afd4-37ad3ee84b54.png "Kobito.W5uXCL.png")

$YB=OKとの応答があれば成功です。
![Kobito.R7mTDA.png](https://qiita-image-store.s3.amazonaws.com/0/49910/28732148-fe0b-079c-b9e1-bdab9ea9ce30.png "Kobito.R7mTDA.png")


ただし、monitor.iniでの3GIMとの通信速度が9600bpsのままなので、このままではmonior.iniでの処理を続行できません。(応答なしや文字化けになります)

ということで、monior.iniを変更します。baudrate_3gimの値を9600→38400に変更します。

baudrate_3gim = 9600;
  ↓
baudrate_3gim = 38400;

![スクリーンショット 2018-01-06 0.30.10.png](https://qiita-image-store.s3.amazonaws.com/0/49910/a04d4e70-6b6b-f474-fbaf-8c8e89aaac68.png "スクリーンショット 2018-01-06 0.30.10.png")

プログラムを変更して再度Arduinoに書き込めばOK。
今までと同じように3GIMとの通信ができます。

![Kobito.ZOUGnd.png](https://qiita-image-store.s3.amazonaws.com/0/49910/73a5e92d-3e2b-132b-910c-e71922b7fa1e.png "Kobito.ZOUGnd.png")

## コマンド
テストによく使うコマンド一覧

|コマンド|説明|
|---|---|
|$YV|バージョンの取得|
|$YR |電波受信強度(RSSI)の取得|
|$YT|現在の日時の取得|
|$YI|IMEIの取得|
|$YL 0|LED消灯|
|$YL 1|LED点灯|




今回は以上です。