2017年3月10日金曜日

浅草ギ研さんの BLESerial2 を使ってモジュール側に信号を送信してみた

概要

環境

  • Arduino UNO
  • Arduino IDE 1.6.7
  • BLEモジュール BLESerial2
  • 砲弾型 赤色LED 1 個
  • 抵抗 1KΩ x2, 470Ω x 1
  • ジャンパケーブル 2 本

配線

Arduino の TX ピンを使って BLE モジュールに信号を送信します
bleserial2_tx_circuit.jpg

基本はここ に記載されている回路図を元に配線しているだけです
BLE モジュールから出ている TX ケーブルは直接 Arduino の TX ピンに接続しません
途中にいくつか抵抗を挟んでいます
Arduino の TX ピンからだと

Arduino TX ピン -> 抵抗 1KΩ -> BLE モジュール TX -> 抵抗 1KΩ + 抵抗 470Ω -> Arduino GND

になります
BLE モジュール TX と抵抗 1KΩ + 抵抗 470Ω の部分は分岐しています

P.S 20160420
この分岐の部分でなんで分圧しているのかあらためて確認してみたのですが、マイコン側の基準電圧が 5v マイコンの場合は BLESerial2 の TX ピンに 3.3v がかかるようにするために分圧回路を組んでいます
なのでマイコンの基準電圧が 3.3v の場合は TX ピンに入る電圧を分圧する必要はありません
http://www.robotsfx.com/robot/BLESerial2.html
このページの「接続例」の部分に記載がありました

左上の BLE モジュールの RX ピンが適当な場所に刺さっているのは撮影のため適当に場所にピン止めしているだけなので、回路には関係ありません

Arduino 側のプログラム

今回はシリアルで読み込んだ値をそのまま Serial.write で BLE モジュール側に送信するプログラムを作成しました

int rsvData = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  if(Serial.available() > 0){
    rsvData = Serial.read();
    Serial.write(rsvData);
    delay(100);
  }
}

プログラムは非常に簡単です
書いたらコンパイルしておきましょう

動作確認

さて、動作確認です
Arduino に書き込む際は Arduino の TX ピンを抜いておきましょう
まずコンパイルしたプログラムを Aruduino に書き込みます
書き込めたらシリアルで入力する必要があるのでシリアルコンソールを立ち上げておきます

書き込めたら例のごとく iPhone アプリの LightBlue を使って動作確認しましょう
まず LightBlue を使って BLESerial2 に接続します
接続できたらサービスの一覧に「Notify」があるのでタップします
Notify の状態になったら Arduino のシリアルコンソールに何か文字を入力してみましょう
すると LightBlue 側で Notify していたアプリが BLE モジュールから値を受け取れるのが確認できると思います
bleserial2_notify_data.png

写真では「0x31」という値が取得できています
これはシリアルコンソールで「1」を入力したときに取得できた値です
複数の文字列とかを入力すると受信できるデータも複数になると思います

最後に

3 回に渡って浅草ギ研さんの BLESerial2 の検証を行ってきました
簡単にまとめると

  • BLE アプリははじめから書き込まれており電源を入れるだけで動作する
  • BLE モジュール上の RX は write リクエストを行った際にシリアル信号として受信できる
  • BLE モジュール上の TX は Arduino 等からのシリアル情報を BLE モジュール上に送信するために利用できる

というのがメイン機能かと思います
Web で調べた限りですが、SmartBasic や C の開発用の API は公開されておらず自分で BLE アプリを作るのは無理そうです ( できる!というのを知っている方がいれば是非教えていただきたい。。。)

なので、簡単なデータの送受信を行うだけであれば十分ですが、独自のサービスを定義してデータを送りたいとか少し大きめのデーバの送受信を行う場合は BLESerial2 だけだと厳しいかもしれません

付属の説明書にもあったのですが、

15バイト以上のデータを送る場合は、15 バイト以内のデータを 20ms 間づつ空けてから送信するようにしてください

とありましたので、用途的には簡単な独自ビーコンといったところでしょうか

参考サイト

0 件のコメント:

コメントを投稿