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());
}
}
####使い方
- toioの電源を入れる
- ArduinoIDEのシリアルモニタを開く
- Bluetoothデバイスのリストが表示されるので、toioのデバイス番号をプログラム中の(1)の部分を書き換える
- 再度コンパイルし書き込む
- 数字の1, 2, 3, 4, 9を入力すると、対応するtoioの動作が起きるはず
とりあえず動きました。
気が向いたらUIを工夫しようと思います。
#####備考
動かなくて困ったコードの部分をコメントアウト(A)(B)(C)で印をつけました。
(A) 配列のポインタを渡したら配列のサイズまでは送れなかったので、別の引数で渡した。
(B) 配列に入れたシリアル通信の命令を送るとき1文字づつ送ると動かなかった。
(C) 配列の終わりを"\0"にしないとSerial.printで表示したとき化ける。