user1957292
user1957292

Reputation: 71

Sending and reading ASCII values in pySerial

I am trying to communicating with a scale that does communication in ASCII format using python and pySerial. I have no experience how ever using ASCII format. So I have basic questions. How would I send a a character T for example using pySerial and terminate it with CRLF using ASCII format? I tried

 myserialport.write('TCRLF')
 myserialport.write('T\r\n')
 myserialport.write('T\n\r')

I am also trying to read data from the scale which I would expect to be in a form of '208.01 g' for example. But when I use

myserialport.read(10)

or

myserialport.readline(10)

I get this from the scale

]ëýýÿ]W
ÿ]u_u]ÿ]uÕ
ýWýWë]uÝõW
ÿ½õÿ½WW]Ýý
WýW]Wÿ½ÿ×ë

From googling it seems as pySerial should receive data in ASCII format by default, and send it as well...but I am lost as to why its not working. Any help would be appreciated.

Upvotes: 0

Views: 15208

Answers (2)

user1957292
user1957292

Reputation: 71

The issue was ground connection on USB to Serial Converter (Pin 7 needed to be grounded). If you have same issue, check your pin out. (Fisher Scintific scales use Pin 7 as ground, which is not normal as pin 5 is ground...odd...) Thanks all.

Upvotes: 0

Anton Belousov
Anton Belousov

Reputation: 66

This is the right way to send a character with CRLF to a serial port:

myserialport.write('T\r\n')

Regarding messy response - make sure that you set the baudrate, the number of data bits, stop bits and parity bits correctly. You can find the required values in the scale's datasheet.

For example:

from serial import Serial, SEVENBITS, STOPBITS_ONE, PARITY_EVEN
myserialport = Serial('/dev/ttyS0', baudrate=9600, bytesize=SEVENBITS, parity=PARITY_EVEN, stopbits=STOPBITS_ONE)

Upvotes: 1

Related Questions