6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SpresenseでBLE-UART変換基板を使ってスマホから入力

Last updated at Posted at 2021-12-17

Qiita Advent calendar2021の記事です。

Spresenseの関係会社に勤務していますが、業務外の個人活動の紹介です。
当記事は会社と関係ありません。

誤った基板上のピン接続により故障する可能性があります。
自己責任でお願いします。

こちらのモジュールを使いスマホからBluetooth経由でSpresenseに入力します。

####接続

Spresense BLE-UART変換基板
GND GND
3.3v VIN
D2 PO_08
D3 PO_06
20211218_055720.jpg

####コード

サンプルコード
#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変換基板から受け取る信号の内容はこちらを参考にしました。

####使い方

  1. スマホのアプリLightBlueでUART通信条件を設定する
  2. スマホのアプリBluefruitConnectを起動し、BLE-UART Converter Boardと接続する
  3. Controllerを選択し、入力したいボタンを押す・離す

####実行中の様子

BluefruitConnectのControllerにはgyroなどの信号も送信できるようなので応用が利きそうです。

12/9の記事とつなげるとToioを動かすことも試せそう。

6
0
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
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?