Qiita Advent calendar2021の記事です。
Spresenseの関係会社に勤務していますが、業務外の個人活動の紹介です。
当記事は会社と関係ありません。
誤った基板上のピン接続により故障する可能性があります。
自己責任でお願いします。
こちらのモジュールを使いスマホからBluetooth経由でSpresenseに入力します。
####接続
Spresense | BLE-UART変換基板 |
---|---|
GND | GND |
3.3v | VIN |
D2 | PO_08 |
D3 | PO_06 |
####コード
サンプルコード
#include <SoftwareSerial.h>
SoftwareSerial toBleUart(2, 3);
// https://learn.adafruit.com/bluefruit-le-connect/controller
boolean checkCRC(uint8_t *buffer)
{
uint8_t len = sizeof(buffer);
uint8_t crc = buffer[len-2];
uint8_t sum = 0;
for (int i = 0; i < (len-1); i++) {
sum += buffer[i];
}
Serial.print("CRC ");
if ((crc & ~sum) == 0) {
Serial.println("PASS");
return true;
}
else {
Serial.println("FAIL");
return false;
}
}
void setup()
{
Serial.begin(115200);
toBleUart.begin(115200);
}
void loop()
{
int i;
uint8_t buf1[5];
i = 0;
while (toBleUart.available())
{
buf1[i] = toBleUart.read();
delay(5); // 必要だった
// Serial.write(buf1[i]);
// if(i == 4)
// Serial.write("\n");
i++;
}
// if(i == 4)
// delay(10);
if(buf1[0] == 0x21)
{
if(buf1[1] == 0x42) // B
{
i++;
switch(buf1[2])
{
case 0x31 : //1
Serial.write("1");
break;
case 0x32 :
Serial.write("2");
break;
case 0x33 :
Serial.write("3");
break;
case 0x34 :
Serial.write("4");
break;
case 0x35 :
Serial.write("up");
break;
case 0x36 :
Serial.write("down");
break;
case 0x37 :
Serial.write("left");
break;
case 0x38 :
Serial.write("right");
break;
}
if(buf1[3] == 0x31)
{
Serial.write(" pressed\n");
}
else
{
Serial.write(" released\n");
}
// checkCRC(buf1);
}
}
// for(i=0; i<10000; i++)
// {
// toBleUart.println(i);
// delay(30);
// }
}
BLE-UART変換基板から受け取る信号の内容はこちらを参考にしました。
####使い方
- スマホのアプリLightBlueでUART通信条件を設定する
- スマホのアプリBluefruitConnectを起動し、BLE-UART Converter Boardと接続する
- Controllerを選択し、入力したいボタンを押す・離す
####実行中の様子
BluefruitConnectのControllerにはgyroなどの信号も送信できるようなので応用が利きそうです。
12/9の記事とつなげるとToioを動かすことも試せそう。