BDMで作っていたEveryTouchをスマホを使って実現するのに必要だったので、ble4.0モジュールである浅草ギ研のBLESerial2で、ArduinoとiPhoneの通信を試みた。
http://www.robotsfx.com/robot/BLESerial2.html
を参考にArduinoとbleモジュールを接続。ただし、Arduinoがble4.0で受信した信号をパソコンで見たいので、TX/RXは空けたい。そこで、SoftwareSerialを使い、ArduinoのD12をRX、D13をTXとしてbleモジュールにつなぐ。
モジュールの電源は3.3Vであることに注意!
Arduinoのプログラムは以下
http://blog.livedoor.jp/sce_info3-craft/archives/9072219.html を参考にさせて頂いた。
#include <SoftwareSerial.h>
#define BT_RX 10
#define BT_TX 11
#define LED 13
int rsvData = 0;
int sersorVal = 0;
SoftwareSerial btSerial(BT_RX, BT_TX);
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
btSerial.begin(9600);
pinMode(LED, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
if(btSerial.available() > 0){
rsvData = btSerial.read();
Serial.println(rsvData);
if( rsvData == 1 ){
digitalWrite(LED, HIGH);
} else if( rsvData == 0 ){
digitalWrite(LED, LOW);
}
}
}
これをArduinoに焼き付けて、iPhoneでLightBlueというアプリを立ち上げる。
やってみるものの、上手く行かない。
説明書をよく見ると、bleモジュールのTXはAruduinoのTX、RXはArduinoのRXにつなぐようにという指示が書いてあった。単純に接続が逆だった。配線を入れ替えると、上手くいった。
試しに、ble経由で数字をiPhoneにかえしてみる。
#include <SoftwareSerial.h>
#define BT_RX 10
#define BT_TX 11
#define LED 13
int rsvData = 0;
int sersorVal = 0;
SoftwareSerial btSerial(BT_RX, BT_TX);
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
btSerial.begin(9600);
pinMode(LED, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
if(btSerial.available() > 0){
rsvData = btSerial.read();
if( rsvData == 1 ){
digitalWrite(LED, HIGH);
Serial.write("hello\n");
btSerial.write(0x12);
} else if( rsvData == 0 ){
digitalWrite(LED, LOW);
Serial.write("good night\n");
btSerial.write(0x11);
}
}
}
ちゃんと返却値もiPhoneに届いている。
LightBlueは結構便利なアプリでした。これで、手元のボタン押したらiPhoneで画像処理を開始するみたいなことができそう。