質問: ser.readline() print(data) ``` ser.read()の前で受信待ち状態になる。 arduino上のプログラムの`if (Serial.available() > 0)`を消して実行したらhogeの内容はちゃんとターミナル上にプリントされた。 '送信'と同じことをするには何を書けばいいの...?Serial.available() > 0 の状態にするにはどうすれば...? どなたか教えていただけると大変助かります。
回答: (timeoutの扱いを勘違いしてたので全面改稿。コメント欄はその痕跡...) 私の環境はWindowsですが、Jupyterで一行ずつ実行してみると、 Pythonでシリアルポートを開いたとたんにArduinoのLEDがチカチカします。 その後間をおいて'A'を送ればArduinoが送信を始めました 。 Mac/Linuxでも同様だとすれば、Pythonのシリアル制御がボートOpen時にDTRをいじっているかなにか、それでArduinoが一旦リセットされているのでは。(ちょっとオシロを引っ張り出すのが面倒なので確認してません) Open(Serialのインスタンス生成)したあと、1秒ぐらい待ってみるとどうなりますか。 オシロ引っ張り出して見てみました。やっぱり、Pythonでポート開いたときにArduinoのリセット端子が落ちています。 ``` void setup() { Serial.begin(115200); pinMode(2,OUTPUT); } void loop() { digitalWrite(2,HIGH); if(Serial.available() > 0){ Serial.println(millis()); } } ``` として見ていると、リセットから2PinがHになるまで1.5秒ぐらいかかっています。余裕を見て2秒くらい待ったほうがいいかも。(アナログのビンテージもののオシロなので画面写真とかはありません)