2
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.

spresenseAdvent Calendar 2021

Day 9

Spresense経由でToioを動かす

Last updated at Posted at 2021-12-06

Qiita Advent calendar2021の記事です。

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

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

こちらを参考にSpresense経由でToioを動かしてみました。
https://qiita.com/kenichih/items/a05eac7242d120592fbe
使ったBluetoothモジュールはRN4020です。
https://akizukidenshi.com/catalog/g/gK-11102/

####接続

Spresense RN4020
GND GND
3.3v 5v
D0 TX
D1 RX

####コード

サンプルコード
//#include <SoftwareSerial.h> // これは化けた やり直したらうまくいくかも

//#include <USBSerial.h> // これは不要だった
//USBSerial USBSerial;

// 参考 https://qiita.com/kenichih/items/a05eac7242d120592fbe

void sendCom(char *com, int len0)     // (A)
{
  Serial2.write(com, len0);           // (B)
  Serial.println();
  int n = Serial2.available();
  while (Serial2.available()) 
  {
    Serial.write(Serial2.read());
  }
}

// http://www.picfun.com/musen/musen02.html
// (C)
char com0[2] = "+\r";     // echo on/off
char com1[5] = "sf,1\r";  // 初期化
char com2[2] = "f\r";     // デバイス探し
char com3[2] = "x\r";     // デバイス探しやめ

char comT1[17] = "E,1,C930FAAC6A88\r";        // (1) Toio接続 C930FAAC6A88はデバイスアドレス 予め調べる 
char comT2[24] = "CHW,0015,03100101F00000\r"; // LED赤色ちょっと光る
char comT3[24] = "CHW,0011,01010144020112\r"; // モータ回す
char comT4[24] = "CHW,0011,01010100020100\r"; // モータ止める
char comT9[3] = "k,\r";                       // Toio切断

void setup() 
{
  //https://developer.sony.com/develop/spresense/docs/arduino_developer_guide_ja.html
  // USB on main board      = Serial
  // D0 and D1 on ext board = Serial2
  // USB on ext board       = USBSerial

  Serial.begin(115200);
  Serial2.begin(115200);
  Serial.println("start");

  sendCom(com0, sizeof(com0));
  sendCom(com1, sizeof(com1));
  sendCom(com2, sizeof(com2));
  delay(5000);
  sendCom(com3, sizeof(com3));   
//  sendCom(com4, sizeof(com4));   
}

int i = 0;
 
void loop() 
{ // run over and over
  while (int n = Serial.available()) 
  {
//    Serial.print("usb;pc->bt"); 
    if (n > 2) 
    {  
      while (int n = Serial.available()) 
      {
        Serial2.write(Serial.read());
      }
    }
    else
    {
      char ch1 = Serial.read();
      switch (ch1)
      {
        case '1':
          sendCom(comT1, sizeof(comT1));
          break;
        case '2':
          sendCom(comT2, sizeof(comT2));
          break;
        case '3':
          sendCom(comT3, sizeof(comT3));
          break;
        case '4':
          sendCom(comT4, sizeof(comT4));
          break;
        case '9':
          sendCom(comT9, sizeof(comT9));
          break;
        default:
          Serial2.write(ch1);
      }
    }
  }

  while (int n = Serial2.available()) 
  {
//    Serial.println("pc<-bt");
    Serial.write(Serial2.read());
  }

}

####使い方

  1. toioの電源を入れる
  2. ArduinoIDEのシリアルモニタを開く
  3. Bluetoothデバイスのリストが表示されるので、toioのデバイス番号をプログラム中の(1)の部分を書き換える
  4. 再度コンパイルし書き込む
  5. 数字の1, 2, 3, 4, 9を入力すると、対応するtoioの動作が起きるはず
211206a2.jpg 起動時のシリアルモニタ 赤枠がtoioのデバイス番号。改行はCRのみにした。

とりあえず動きました。
気が向いたらUIを工夫しようと思います。

#####備考
動かなくて困ったコードの部分をコメントアウト(A)(B)(C)で印をつけました。
(A) 配列のポインタを渡したら配列のサイズまでは送れなかったので、別の引数で渡した。
(B) 配列に入れたシリアル通信の命令を送るとき1文字づつ送ると動かなかった。
(C) 配列の終わりを"\0"にしないとSerial.printで表示したとき化ける。

2
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
2
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?