株式会社XSHELL デベロッパー 植田歩
概要
- Arduino互換の格安ワンボードマイコン RobotDyn - STM32F103(以降STM32と呼ぶ)
- 高性能シングルボードコンピューター Raspberry Pi 3
この2つを組み合わせて使う。
Raspberry Piは電源を大量消費するので常時起動させず、必要な時以外は電源を落としておきたい。
低消費電力なSTM32をRaspberry Piの電源制御に使い、Raspberry Piではセンサーから値の取得・処理・通信をやらせる。
これであれば単三電池3本程度で長期運用が可能なデバイスが作れると目論んだ。
ただし今回紹介するのは「STM32とRaspberry Piのシリアル通信」だけをゴールとする。
環境
- Raspberry Pi 3
- OS 2017-08-16-raspbian-stretch-lite.img
- robotdyn STM32F103 Dev.Board
- Mac OS X El Capitan
- 秋月電子FT232RL USBシリアル変換モジュール
- 秋月電子超小型USBシリアル変換モジュール
STM32ボードのPIN配置
設定
Raspberry Piの設定:
vi /boot/cmdline.txt
console=serial0,115200の削除(viならxで一文字削除)
sudo systemctl stop serial-getty@ttyAMA0.service
sudo systemctl disable serial-getty@ttyAMA0.service
sudo systemctl stop serial-getty@ttyS0.service
sudo systemctl disable serial-getty@ttyS0.service
インターフェース設定でSSHとシリアルを許可
MACから接続してみる
ls /dev/tty.*
screen /dev/tty.usbserial-A1032MA9 115200
STM32にスケッチ書き込み
STM32からloopを送出するだけのスケッチを書く。
下記のような感じ(このコードは未検証)
# define LED_PIN (PB13)
void setup(){
Serial.begin(9600);
Serial1.begin(9600);
}
void loop(){
Serial.println("loop");
Serial1.println("loop");
delay(1000);
}
どこにさすか、シリアルポートの番号間違えると動かないので注意。
ここが一番肝心!!!
STM32だとシリアルポートが3箇所あるはずなのでSerial1とかSerial2とか適宜変更する。
Serial.begin(9600);
Serial1.begin(9600);
ラズパイとSTM32をシリアル接続。
ラズパイにSSHログインしてSTM32とシリアル接続。
screen /dev/ttyS0 9600
STM32に書き込んだSerial.println1("loop");が来たら成功
# 成功
loop
loop
loop
調査
ls -hl /dev/*|grep S0
sudo apt-get install screen
sudo apt-get install setserial
setserial -g /dev/tty
sudo stty -F /dev/ttyAMA0
sudo stty -F /dev/ttyS0
dmesg |grep ttyAMA0
sudo lsof | grep AMA0
使用中だったらこれで切る
cat < /dev/ttyS0
株式会社XSHELL デベロッパー 植田歩
XSHELLはSBCを使いやすくするソリューションを提供しています。
isaax、IoTitぜひご使用になってご意見を頂きたく思います。
共に素晴らしいプロジェクトを実現させましょう!