前提・実現したいこと
Raspberry Pi 3からArduino DueへUSBを介したシリアル通信で値を送信しようとしています.
以下のコードは10msごとに値を送信するものですが,非常に重く,実行直後は10秒に1つほどしか送れません.その後1秒近くまで縮まりますが,10msには遠く及びません.
ところがコード5行目のシリアル通信の速度を115200から
57600など他の速度に変えると正常に動作します.
これはどうしてでしょうか.
念の為,Arduino側のプログラムを載せますが,Arduino側が受信していようといまいと,速度に変わりはありません.
また,ArduinoからRaspberry Piへの通信はすでに試しており,115200bpsでも問題なく送信できることを確認しています.
USBケーブルが原因??とも思いましたが,片方向は正常に動いている上に,ごく普通の1mのケーブルなので,たかだか115200bpsでどうにかなるものにも思えません.
ArduinoDueからRaspberry Piへの送信は問題なくできました.
該当のソースコード
実行するとエラーなどは出ませんが,whileのループにものすごく時間がかかります.
ser.writeの1行で止まっているようです.
- Raspberry Pi側コード()
python
1import serial 2import time 3 4def main(): 5 ser = serial.Serial('/dev/ttyACM0', 115200) 6 time.sleep(2) 7 t0 = time.time() 8 9 while True: 10 sendbytes = str(int(4096 * (time.time() - t0) / 5 % 4096)).encode() + b$ 11 ser.write(sendbytes) 12 print(str(int(4096 * (time.time() - t0) / 5 % 4096)) + "." ) 13 time.sleep(0.01) 14
- 実験の際にArduinoに書き込まれているプログラム
c
1void setup() { 2 //シリアル通信(USB)の設定 3 Serial.begin(115200); 4} 5 6void loop() { 7 if(Serial.available() > 0){ 8 String receiveline = Serial.readStringUntil('.'); 9 Serial.println(receiveline); 10 } 11}
補足情報(FW/ツールのバージョンなど)
- Raspberry PI 3 Model B
- Raspbian GNU/Linux 9.4 (stretch)
- Arduino Due
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。