【シリアル通信〜基礎編】USBを繋いでArduino Unoとラズパイ間で簡単なシリアル通信を行ってみる
※ 当ページには【広告/PR】を含む場合があります。
2021/06/11
USB接続
事前準備〜Arduino Unoをラズパイに認識させる
$ ls -l /dev/ | grep tty
#...中略
crw-rw---- 1 root dialout 166, 0 6月 10 18:17 ttyACM0
crw-rw---- 1 root dialout 204, 64 6月 10 18:17 ttyAMA0
crw-rw---- 1 root dialout 4, 64 6月 10 18:17 ttyS0
#...
ttyAMA0
ttyS0
$ ls -l /dev/ | grep serial
drwxr-xr-x 4 root root 80 6月 10 18:17 serial
lrwxrwxrwx 1 root root 7 6月 10 18:17 serial0 -> ttyAMA0
lrwxrwxrwx 1 root root 5 6月 10 18:17 serial1 -> ttyS0
serial
ラズパイから送信した信号でArduinoを操作する
Arduino側の実装
#define LED_PIN 13
int flg=0;
void setup() {
pinMode(LED_PIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
flg = Serial.read();
Serial.println(flg);
if (flg == 49) {
digitalWrite(LED_PIN, HIGH);
} else if (flg == 48) {
digitalWrite(LED_PIN, LOW);
}
}
}
ラズパイからの送信
$ echo -n '1' > /dev/ttyACM0
$ stty -F /dev/ttyACM0
#👇出力
speed 9600 baud; line = 0;
-brkint -imaxbel
DTR
$ stty -F /dev/ttyACM0 -hupcl
-hupcl
#👇点灯
$ echo 1 > /dev/ttyACM0
#👇消灯
$ echo 0 > /dev/ttyACM0
余談〜ハード的にDTR無効化を試す
110〜124[Ω]
RST-GND間に挟むのが正しい
Arduinoから送信された信号をラズパイで受け取る
Arduino側から信号を送信
#define LED_PIN 13
void setup(){
Serial.begin(9600);
pinMode(LED_PIN, OUTPUT);
}
void loop(){
Serial.println("LED ON");
digitalWrite(LED_PIN, HIGH);
delay(1000);
Serial.println("LED OFF");
digitalWrite(LED_PIN, LOW);
delay(1000);
}
ラズパイ側のモニタリング
$ sudo screen /dev/ttyACM0 9600
LED ON
LED OFF
LED ON
LED OFF
LED ON
LED OFF
LED ON
LED OFF
LED ON
LED OFF
LED ON
#...略
まとめ
参考サイト
記事を書いた人
ナンデモ系エンジニア
電子工作を身近に知っていただけるように、材料調達からDIYのハウツーまで気になったところをできるだけ細かく記事にしてブログ配信してます。
カテゴリー