Приложение PySerial запускается в оболочке, а не по сценарию py - PullRequest
5 голосов
/ 20 февраля 2010

У меня есть очень простой скрипт на python, который использует pySerial для отправки данных через последовательный порт на мой Arduino. Когда я выполняю эту строку построчно в оболочке python, она работает просто отлично, но когда я помещаю ее в файл «.py» и пытаюсь запустить его, ничего не происходит. Хотя последовательные огни на моем UART действительно мигают. Так что что-то проходит, но это мусор (я проверял).

Вот простой код.

import serial

ser = serial.Serial('COM3',9600,timeout=.2)
ser.write('A')
ser.close()

Я уже пробовал добавлять спящие режимы, но, похоже, ничего не исправляет. Есть идеи?

Ответы [ 6 ]

7 голосов
/ 22 февраля 2010

ОК, я понял!

Перед выполнением записи необходимо использовать такой код:

time.sleep(1)
ser.setDTR(level=0)
time.sleep(1)

В противном случае, Arduino автоматически сбрасывается при получении последовательного соединения по какой-либо причине. яй!

1 голос
/ 04 мая 2017
import serial
import time 

ser = serial.Serial('/dev/ttyACM1', 9600, timeout=1)
time.sleep(3)      # this will needed for initializing arduino
serial.write(b'1') # b is necessary for byte
1 голос
/ 14 ноября 2010

Я заметил, что если вы работаете в 64-битной Windows, то pyserial просто не работает. Я использую Python 2.7, и после установки версии x86 через учетную запись администратора, и с использованием вышеупомянутого кода

time.sleep(1)

ser.setDTR(level=0)

time.sleep(1)

добавленный перед записью, и после запоминания закрытия порта я смог заставить его работать как скрипт, а не только через CLI Также убедитесь, что вы запускаете графический интерфейс Python или командную строку от имени администратора. Это также сделало успешную разницу для меня. Кроме того, убедитесь, что последовательный монитор на Arduino закрыт перед запуском кода.

0 голосов
/ 10 марта 2016

В моем случае сработало следующее.

    time.sleep(1)
    ser.setDTR(level=1) 
    time.sleep(1)
0 голосов
/ 02 февраля 2013

Могу я предложить еще один спящий режим, на этот раз, после закрытия последовательного порта.

import serial

ser = serial.Serial('COM3',9600,timeout=.2)

ser.write('A')

ser.close()

time.sleep(3000) 

//for a first test, give a whopping 3 seconds

//sleep(100), 100 ms (0.1 second) may be enough in final product

Обоснование состоит в том, что компьютеры становятся такими быстрыми (превышение производительности моего первого x86 в 1 миллион раз)на частоте 4,77 МГц, вероятно, в сто тысяч раз быстрее, чем космический челнок на борту исходного компьютера), что у него может быть время запустить Python, выполнить миллионы инструкций ... закрыть консоль, все это до того, как один байт мог быть отправлен напоследовательный порт.

0 голосов
/ 20 февраля 2010

Может быть, глупо, но попробуйте ввести только «myscript.py» в cmd.exe, если вы используете Windows. Я заметил, что в Windows вам не нужно вводить «python» перед именем скрипта. Это, конечно, для стандартной установки CPython в Windows.

...