Проблема Pyserial с Arduino - работает с оболочкой Python, но не в программе - PullRequest
9 голосов
/ 24 октября 2009

Хорошо, я уверен, что моя схема Arduino верна и код для нее. Я знаю это, потому что когда я использую последовательный монитор, встроенный в IDE Arduino, и отправляю «H», светодиод горит, когда я посылаю «L», этот светодиод выключается.

Теперь я сделал программу на Python

import serial
ser = serial.Serial("COM4",9600)
ser.write("H")

Когда я запускаю код, светодиод мигает на секунду, а затем снова гаснет. Однако, когда я делаю каждую из этих строк отдельно в оболочке, она работает так, как и должна.

Есть идеи?

Ответы [ 3 ]

8 голосов
/ 09 февраля 2011

Когда вы открываете последовательный порт, это приводит к сбросу Arduino. Поскольку Arduino требуется некоторое время для загрузки, весь ввод идет в битовую корзину (или, вероятно, в загрузчик, который знает, что с ним известно). Если вы вставите спящий режим, подождите, пока появится Arduino, чтобы получить ваш серийный код. Вот почему он работает в интерактивном режиме; Вы ждали 1,5 секунды, необходимых для запуска программного обеспечения.

Я подтвердил, что открытие последовательного порта сбрасывает мой Arduino Uno ; Я высветил программу, которая будет мигать светодиодом из процедуры setup() - вызова open("/dev/ttyACM0") было достаточно для запуска сброса. Это ИМХО запутанная и недокументированная морщина в серийной поддержке.

6 голосов
/ 17 июля 2010

У меня была такая же проблема, и она работает, если я добавляю задержку около 2 секунд от открытия последовательного соединения до записи на нее, 1 секунды было недостаточно.

1 голос
/ 23 августа 2013

Просто, чтобы было немного понятнее, я изменю код, чтобы все могли видеть, что нужно добавить!

import serial
import time
ser = serial.Serial("COM4",9600)
time.sleep(3)
ser.write("H")

Добавление в режим сна помогает без проблем открыть сериал!

...