- Python version: 2.6.6
- PySerial version: 2.5
- Arduino board: Duemilanove 328
I have written some code to simulate some hardware I'm working with and uploaded it to the Arduino board. This code works. I know this, because I get the expected response from HyperTerminal.
However, when I try to connect using PySerial the connection does not error, but I get no response to the commands I send.
Why might this be?
Python code
import serial
def main():
sp = serial.Serial()
sp.port = 'COM4'
sp.baudrate = 19200
sp.parity = serial.PARITY_NONE
sp.bytesize = serial.EIGHTBITS
sp.stopbits = serial.STOPBITS_ONE
sp.timeout = 0.5
sp.xonxoff = False
sp.rtscts = False
sp.dsrdtr = False
sp.open()
sp.write("GV\r\n".encode('ascii'))
value = sp.readline()
print value
sp.write("GI\r\n".encode('ascii'))
value = sp.readline()
print value
sp.close()
if __name__ == "__main__":
main()
NB: the code on the Arduino sends back \r\n
at the end of a response to a command.
HyperTerminal configuration:
Edit
I have found that if I increase the timeout to 10 seconds and add a sp.readline()
before I send anything, then I get responses to both commands.
How long is the hardware handshake usually between PySerial and an Arduino or USB RS-232 ports?
\r\n
. Although regular text lines are typically terminated\r\n
, Sent commands are usually only terminated by the single character\r
, as they would be typed in by a human user. If the\n
is sent, it might be interpreted as the start of the next command and potentially hang or trigger other spurious undesirable results. – RufusVS