回答編集履歴

2

実験結果追記

2019/12/28 12:07

投稿

thkana
thkana

スコア7703

test CHANGED
@@ -13,3 +13,37 @@
13
13
  Mac/Linuxでも同様だとすれば、Pythonのシリアル制御がボートOpen時にDTRをいじっているかなにか、それでArduinoが一旦リセットされているのでは。(ちょっとオシロを引っ張り出すのが面倒なので確認してません)
14
14
 
15
15
  Open(Serialのインスタンス生成)したあと、1秒ぐらい待ってみるとどうなりますか。
16
+
17
+
18
+
19
+ ---
20
+
21
+ オシロ引っ張り出して見てみました。やっぱり、Pythonでポート開いたときにArduinoのリセット端子が落ちています。
22
+
23
+ ```Arduino
24
+
25
+ void setup() {
26
+
27
+ Serial.begin(115200);
28
+
29
+ pinMode(2,OUTPUT);
30
+
31
+ }
32
+
33
+
34
+
35
+ void loop() {
36
+
37
+ digitalWrite(2,HIGH);
38
+
39
+ if(Serial.available() > 0){
40
+
41
+ Serial.println(millis());
42
+
43
+ }
44
+
45
+ }
46
+
47
+ ```
48
+
49
+ として見ていると、リセットから2PinがHになるまで1.5秒ぐらいかかっています。余裕を見て2秒くらい待ったほうがいいかも。(アナログのビンテージもののオシロなので画面写真とかはありません)

1

全面改稿

2019/12/28 12:07

投稿

thkana
thkana

スコア7703

test CHANGED
@@ -1,25 +1,15 @@
1
- `ser = serial.Serial('/dev/ttyACM0', 115200,timeout=None)`
2
-
3
- timeout=Noneとしているので
1
+ (timeoutの扱いを勘違いしてので全面改稿。コメント欄はその痕跡...)
4
-
5
- > ser.read()の前で受信待ち状態になる。
6
2
 
7
3
 
8
4
 
9
- ならないはずです
5
+ 私の環境Windowsですが、Jupyterで一行ずつ実行してみると、
10
6
 
11
- `print(data)`
7
+ Pythonでシリアルポートを開いたとたんにArduinoのLEDがチカチカします。
12
8
 
13
- の後
9
+ の後間をおいて'A'を送ればArduinoが送信を始めました
14
10
 
15
- 'print('done.')'
11
+
16
12
 
17
- とか付け足してみたらどうなりすか?
13
+ Mac/Linuxでも同様だすれば、Pythonのシリアル制御がボートOpen時にDTRをいじっているなにか、それでArduinoが一旦リセットされているのでは。(ちょっとオシロを引っ張り出すのが面倒なので確認してません)
18
14
 
19
- データを受信する前に素通りしちゃってるのでは。
20
-
21
-
22
-
23
- `ser = serial.Serial('/dev/ttyACM0', 115200,timeout=100)`
15
+ Open(Serialのインスタンス生成)したあと、1秒ぐらい待ってみるとどうなりますか。
24
-
25
- とかで少し待たせてみては。