SPRESENSEからPCにデータを直接取り込めるといろいろと便利なので検討をしてみました。いくつか方法が考えられます。

(1)拡張ボードのUSB機能を使って、SDカードに蓄積されたデータを取得する
(2)拡張ボードのUARTを使って、PCとシリアル通信をしてデータを取得する
(3)メインボードのUARTを使って、PCとシリアル通信してデータを取得する

せっかくなら拡張ボードなしで通信をしたいところです。なので、今回は(3)の方法を試してみることにしました。一番の問題は、メインボードのIO電圧が1.8VでUART変換基板の電圧が3.3Vという点。

手元にあるUSB-UART変換基板はFTDI製のチップですが、3.3V設定で入力閾値電圧は1.2Vなので、Spresenseからの出力はうまくいきそう。一方で、FTDIからの出力電圧つまりSpresenseへの入力電圧が2.7VなのでここがSpresenseが受け付けてくれるかどうか微妙なところ。





まぁ、壊れることはないだろうということで試してみました。接続を次に示します。






Spresenseと通信するためのプログラムツールとして、Processingを選択しました。Arduino IDEはProcessingをベースにしているので、並べるとUIが似ていていい感じですね。





Spresense側のスケッチを次に示します。


void setup() {
Serial.begin(115200);
Serial2.begin(921600);
while (Serial.available() > 0) Serial.read();
while (Serial2.available() > 0) Serial2.read();
}

void loop() {

while (Serial.available() > 0) {
int inByte0 = Serial.read();
Serial2.write(inByte0);
}

while (Serial2.available() > 0) {
int inByte1 = Serial2.read();
Serial.write(inByte1);
}
}



Processingのコードを以下に示します。


import processing.serial.*;
Serial myPort;
PFont gothic;

void setup() {
size(500, 500);
background(0);
gothic = createFont("MS Gothic", 24);
printArray(Serial.list());
myPort = new Serial(this, Serial.list()[1], 921600);
}

int cnt = 0;
void draw() {
if (myPort.available() > 0) {
String message = myPort.readString();
message = trim(message) + ":" +cnt;
textSize(24);
text(message, 50, 50+cnt*30);
String ret = "Hi!" + cnt + "\r\n";
myPort.write(ret);
++cnt;
}
}


実際に動かしてみました。




なんとレベル変換なしでもうまく通信ができました!Baudrate も高めに設定していますが、かなり安定して通信しています。





これで、メインボードとPCとの間のデータのやりとりが楽になりました。SpresenseのメインボードとProsessingを使えば、データ解析は捗りそうです!
(^^)/~
















FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)

  • 出版社/メーカー: スイッチサイエンス(Switch Science)
  • メディア: おもちゃ&ホビー