LoginSignup
39
22

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-12-09

谷ゼミの落書き帳10日目です!

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

前回の記事に引き続き、arduinoを使った電子工作系のネタになります。
ゆるーく書きます。

背景

前回の記事を書いた際に、実はけっこう久しぶりにarduinoに触りました。
久々に開封して色々遊んでいたら、ふとこんなものが出てきました。
Bluetoothモジュールです。

じつは前回ご紹介したこのキットの中にもBluetoothモジュール入っているのですが、こっちのは技適が通っていないっぽくて(マークがないので)、実質使えなかったんですよ。

で、キットを頂いたときにそのことに気づいて、せっかくだからBluetooth連携もしてみたいなってことで、自分で別途購入したのが、冒頭に紹介した方のモジュールでした。(サイトにも技適マーク入りって書いてある!)
WRL-12580mz.jpg

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

目標

スマホからLチカさせる。

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

Bluetoothモジュールの使い方

さて、まずこれどうやってつなぐのか皆目検討もつかん。
まず何より今まで使ってきたセンサー君たちと違って、こいつ自身にピンがねえ。
詰んだなあ。
と思いながらまじまじと眺めていると、モジュールの裏面に各ピン(というか穴)の説明が。
IMG_20130610_220233.jpg
「なるほどね。とりあえずボードとはそうやって接続するのね、ははーん。」
「で、ピンは?」ってなってようやく気づきました。
上記の画像のようにピンソケットかませてピンさすということに。

そんでもってもうこの後も色々悪戦苦闘してたのですが、もう説明するのもアホらしいのでこうです。
_20181210_002743.JPG
多分上記の写真じゃわかりづらいかもしれないのですが、結局はこれです。
Cellophane_tape.jpg
(だって半田ごてなんてないんだもん)

そして構成はこちらのサイト丸パクリ参考にしました。

ちなみに自分の構成はこんな感じ。
(イラスト描く気力がないので、写真で。。。もし要望あればイラスト書きます。)
_20181210_002914.JPG
_20181210_002847.JPG

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

プログラム

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);
    }
  }
}

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

スマホ側

さて、今回はBluetooth連携なので、もう一つBluetooth端末が必要です。
まあそこは当然スマホ使います。
そして色々調べた結果、自分で信号送信用のアプリを作るよりも、こういう既存のアプリを使った方が楽そうで、早速インストール。

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

アプリを起動して、デバイスで該当のモジュールを選択すると、下記のような画面に。
75169.jpg
右下のButtonsを押すと、
75168.jpg
デフォルトで複数のボタンが配置されてる。
そして右上の点々ボタンを押して設定を開くと、
75167.jpg
なんと送信する値を変更できる。
(いや。まじ。クソ便利。)

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

結果

できた。



ひとまずこんな感じで動作確認完了です。

まとめ

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

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

結局、色々調べてみたらここの記事に助けられた。

どうやらBLEモジュールなどで、D0(RX)ピンやD1(TX)ピンに頻繁にアクセスするコードを書いていたり、D0(RX)ピンやD1(TX)ピンとの交信中に書き込みを行おうとするとこのエラーが発生するみたい。

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

以上になります。

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

39
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
22