Я пытаюсь связаться с платой через последовательный (rs232) порт, используя PySerial.
Плата - это Renesas rl78, ниже приведен мой пример кода.(По сути, я пытаюсь выполнить некоторые предопределенные команды. Поэтому здесь commands
- это снова команда, которая возвращает список других команд)
import serial, time, io
ser = serial.Serial()
ser.port = "/dev/cu.usbserial"
ser.baudrate = 19200 # as used for HyperTerminal
ser.timeout = 10 #non-block of 10 seconds
ser.bytesize = serial.EIGHTBITS
ser.parity=serial.PARITY_NONE
ser.stopbits=serial.STOPBITS_ONE
ser.xonoff = False
ser.rtscts = True
ser.dsrdtr = True
ser.dtr = True
ser.rts = True
try:
ser.open()
except Exception, e:
print "error open serial port: " + str(e)
exit()
if ser.is_open:
try:
#ser.reset_input_buffer() #flush input buffer, discarding all its contents
#ser.reset_output_buffer() #flush output buffer, aborting current output
#write data
ser.write(b'commands\r')
ser.reset_input_buffer()
time.sleep(2)
in_wait = ser.in_waiting
while True:
if in_wait != 0:
output = ser.read(in_wait)
print(output)
break
else:
break
ser.close()
except Exception, e1:
print "error communicating...: " + str(e1)
else:
print "cannot open serial port "
И с точки зрения устройства, мынужно нажать return
(возврат каретки \ r), чтобы выполнить команду, используя любое терминальное приложение.то есть HyperTerminal или Serial для Mac.
Таким образом, приведенный выше код не возвращает никакого вывода, а просто пустую строку (это то, что вы получаете в терминале, когда просто нажимаете return (\ r)).Устройство ведет себя так, как будто оно получило возврат (\ r), а команда полностью игнорируется.
Чтобы убедиться, что это не проблема с PySerial, я попытался использовать PySerial's miniterm , чтобыполучить это поведение терминала, и я смог успешно выполнить команды
Опять же, здесь выгода заключается в том, чтобы установить CR в качестве EOL для успешного выполнения команд.
python -m serial.tools.miniterm -e --eol=CR
Итак, яЯ озадачен тем, что не так с моим кодом и почему он не выполняет команды.