SSブログ

SPRESENSEをProcessingを使ってPCと通信させてみた! [SPRESENSE]

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が受け付けてくれるかどうか微妙なところ。


DSC_0589.JPG


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


Spresense_FTDI.png



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


2019-07-21.png


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;
  }
}


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


DSC_0588.JPG

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


2019-07-21 (2).png


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






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

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

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








nice!(35)  コメント(0) 
共通テーマ:趣味・カルチャー

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。