LoginSignup
2
4

More than 5 years have passed since last update.

Arduinoシリアルポートでラズパイと通信する(USB使用)

Posted at

はじめに

最近ラズパイとArduinoでシリアル通信をしてArduinoからモータに信号を出したり、Arduinoに繋いだセンサの値をラズパイで処理したりしています。なんだかんだで安定動作させるまで時間がかかったのでメモしておきます。ちなみに初投稿です。

使用環境・ライブラリ

Raspberry Pi3 modelB+

・node.jsを使用。シリアルポートの制御にNode Serialportというnodeモジュールを使用

Arduino UNO
いつもながらのCっぽい専用言語。

ラズパイ側

serialTest.js
var SerialPort = require('serialport');
var port = new SerialPort('/dev/ttyACM0');
var flag = false;
/*Arduinoからの応答を受け取るdataイベントを登録*/
port.on('data',function(data){
    /*Arduinoを初期化する時、そのシリアルポートが準備されているか確認*/
    if(data.readInt8(0) == -1){
        flag = true;
        console.log("ready");
    }
    /*不正な値を検出して停止*/
    else if(data.readInt8(0) == -2){
        flag = false;
        console.log("abnormal stop");
    }
});
/*以降、flagを用いて処理を分ける。シリアルポートへの書き込みにはport.write(data)を使う*/

Arduino側

serialTest.c
byte dataAry[n];
void setup() {
  Serial.begin(9600);
  //シリアルポートの準備ができるまで待機
  while(!Serial){}
  //準備完了時に-1を送信
  Serial.write(-1);
}
void loop() {}
//シリアルポートにデータがある時呼び出される。
void serialEvent(){
  while(Serial.available()){
    //dataAryの先頭nバイトにシリアルからのデータが読み込まれる。
    Serial.readBytes(dataAry,n);
  }
}

ラズパイ側からシリアルポートを開く命令が届いてからArduinoの準備ができるまで、ラズパイからデータが届かないように注意しましょう。

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