arduinoとAndroidスマホをBluetooth連携させる

[谷ゼミの落書き帳](https://qiita.com/advent-calendar/2018/drawing_pad_from_tani_seminar)10日目です！

ちょっと今回の記事は自分の勉強中のことの備忘録的に使わせてもらおうと思います。
（というかただネタがない。けど、カレンダーに穴を空けたくない。）

[前回の記事](https://qiita.com/kotarotaro_A/items/d109f2019b2b81f83d57)に引き続き、arduinoを使った電子工作系のネタになります。
ゆるーく書きます。

#背景
前回の記事を書いた際に、実はけっこう久しぶりにarduinoに触りました。
久々に開封して色々遊んでいたら、ふと[こんなもの](https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-4F36)が出てきました。
Bluetoothモジュールです。

じつは前回ご紹介した[このキット](http://osoyoo.com/ja/2015/03/11/osoyoo-sensor-modules-kit-for-arduino/)の中にもBluetoothモジュール入っているのですが、こっちのは技適が通っていないっぽくて（マークがないので）、実質使えなかったんですよ。

で、キットを頂いたときにそのことに気づいて、せっかくだからBluetooth連携もしてみたいなってことで、自分で別途購入したのが、冒頭に紹介した方のモジュールでした。（サイトにも技適マーク入りって書いてある！）
![WRL-12580mz.jpg](https://qiita-image-store.s3.amazonaws.com/0/212804/156784f2-15b8-26dc-dcfb-6fa20de99096.jpeg)

しかし、購入した当時は、仕事が忙しく買ってから１回も使ってなかったので、この機会に使ってみてここにメモを残します。

#目標
スマホから[Lチカ](https://dic.nicovideo.jp/a/l%E3%83%81%E3%82%AB)させる。

非常に簡単なゴールですが、ひとまず初めて触ってみるのでこれを目標にしてチャレンジ開始。

#Bluetoothモジュールの使い方
さて、まずこれどうやってつなぐのか皆目検討もつかん。
まず何より今まで使ってきたセンサー君たちと違って、こいつ自身にピンがねえ。
詰んだなあ。
と思いながらまじまじと眺めていると、モジュールの裏面に各ピン（というか穴）の説明が。
![IMG_20130610_220233.jpg](https://qiita-image-store.s3.amazonaws.com/0/212804/31b2bb95-8ec1-5674-051b-c47be23e15f0.jpeg)
「なるほどね。とりあえずボードとはそうやって接続するのね、ははーん。」
「で、ピンは？」ってなってようやく気づきました。
上記の画像のようにピンソケットかませてピンさすということに。

そんでもってもうこの後も色々悪戦苦闘してたのですが、もう説明するのもアホらしいのでこうです。
![_20181210_002743.JPG](https://qiita-image-store.s3.amazonaws.com/0/212804/a939fbed-71e8-d3c8-7969-bd265b3faf9f.jpeg)
多分上記の写真じゃわかりづらいかもしれないのですが、結局はこれです。
![Cellophane_tape.jpg](https://qiita-image-store.s3.amazonaws.com/0/212804/b2e7d607-43e2-8a51-3bb7-b8922432c956.jpeg)
（だって半田ごてなんてないんだもん）

そして構成は[こちらのサイト](https://thinkit.co.jp/story/2013/03/06/3995?page=0%2C1)を~~丸パクリ~~参考にしました。

ちなみに自分の構成はこんな感じ。
（イラスト描く気力がないので、写真で。。。もし要望あればイラスト書きます。）
![_20181210_002914.JPG](https://qiita-image-store.s3.amazonaws.com/0/212804/892cf032-d781-34e8-5187-e8459d174acd.jpeg)
![_20181210_002847.JPG](https://qiita-image-store.s3.amazonaws.com/0/212804/e79ae5bd-5ef4-a801-95ec-8f0faac2cef5.jpeg)

Lチカ１個だけだと流石にそっけないので、受信した値によって５つのLEDを点灯させたいと思います。

#プログラム
```c++:sample_blt.ino
void setup() {
  //11520bpsでポートを開く
  Serial.begin(115200);
  //Lチカ用の出力ピン指定
  for(int i=8;i<13; i++)
  {
     pinMode(i, OUTPUT); 
  }
}

void loop() {
  //シリアルポートに到着してるデータのバイト数が0より大きい場合
  if (Serial.available() > 0) {
    int input = Serial.read();
    //受信確認でログ吐かせてみた
    Serial.println(input);

    //受信したデータによってどのピンのON/OFFかを切り替える
    if(input == 'a')
    {
      digitalWrite(8, HIGH);
    }
    else if(input == 'b')
    {
      digitalWrite(8, LOW);
    }

    if(input == 'c')
    {
      digitalWrite(9, HIGH);
    }
    else if(input == 'd')
    {
      digitalWrite(9, LOW);
    }

    if(input == 'e')
    {
      digitalWrite(10, HIGH);
    }
    else if(input == 'f')
    {
      digitalWrite(10, LOW);
    }

    if(input == 'g')
    {
      digitalWrite(11, HIGH);
    }
    else if(input == 'h')
    {
      digitalWrite(11, LOW);
    }

    if(input == 'i')
    {
      digitalWrite(12, HIGH);
    }
    else if(input == 'j')
    {
      digitalWrite(12 , LOW);
    }
  }
}
```

こんな感じです。
自分の勉強不足なのですが、１行目のシリアルポート開ける時に指定するbpsにどのようなルールがあるのか把握してないです。
参考にしたコードそのまま使ってます。
ここは引き続き勉強します。

#スマホ側
さて、今回はBluetooth連携なので、もう一つBluetooth端末が必要です。
まあそこは当然スマホ使います。
そして色々調べた結果、自分で信号送信用のアプリを作るよりも、[こういう](https://play.google.com/store/apps/details?id=com.circuitmagic.arduinobluetooth&hl=ja)既存のアプリを使った方が楽そうで、早速インストール。

アプリを起動する前に、スマホの設定画面からBluetoothを選択して、Bluetoothモジュールを先に接続しといてあげます。
PINが求められるので、1234と入力してください。

アプリを起動して、デバイスで該当のモジュールを選択すると、下記のような画面に。
![75169.jpg](https://qiita-image-store.s3.amazonaws.com/0/212804/faf491b3-dea1-9af2-1dc7-446bb620c2ed.jpeg)
右下のButtonsを押すと、
![75168.jpg](https://qiita-image-store.s3.amazonaws.com/0/212804/25bcad39-d17a-d80b-bb73-9715cf2f32f7.jpeg)
デフォルトで複数のボタンが配置されてる。
そして右上の点々ボタンを押して設定を開くと、
![75167.jpg](https://qiita-image-store.s3.amazonaws.com/0/212804/12742664-dd4f-052e-d4ec-168aec79b041.jpeg)
なんと送信する値を変更できる。
（いや。まじ。クソ便利。）

ということで、先ほどソースコード上に設定した値を各ボタンで送れるようにしてあげると完成です。

#結果
できた。
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Bluetooth連携確認中。 <a href="https://t.co/6XkfDe7alg">pic.twitter.com/6XkfDe7alg</a></p>&mdash; あーたろ (@kotarotaro_A) <a href="https://twitter.com/kotarotaro_A/status/1071760263605415936?ref_src=twsrc%5Etfw">2018年12月9日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
ひとまずこんな感じで動作確認完了です。

#まとめ
と、非常に簡単ですが、arduinoとAndroidスマートフォンをBluetoothで連携させてみました。
記事にすると大したことしてないですが、モジュールとarduinoどうやってつなげるのかの２時間くらい悪戦苦闘したり、インストールしたスマホアプリが全然Bluetoothデバイス検知してくれなかったり、けっこう大変でした。

そして何より困ったのは、ソースコード編集してボードに書き込もうとすると、書き込みに失敗する現象が発生。
IDEのポートとかの設定をやり直してもダメで、IDEを再起動してもダメで、しまいにはボードからピン全部引っこ抜いてみたら、書き込み成功。

結局、色々調べてみたら[ここの記事](https://qiita.com/imanishisatoshi/items/13c9ce92874a5919e4d4)に助けられた。
>どうやらBLEモジュールなどで、D0(RX)ピンやD1(TX)ピンに頻繁にアクセスするコードを書いていたり、D0(RX)ピンやD1(TX)ピンとの交信中に書き込みを行おうとするとこのエラーが発生するみたい。

いやー、色々大変でした。
通信周りはあまり触れたことがないので、勉強不足なことがたくさん。
それでもなんとか動かすことができたので楽しく遊ぶことができました。

以上になります。

記事が10日目ということで、今年も残りあと21日ですかね？
最後まで楽しみましょう。