I will describe Binary transmission and reception using pyserial as a reminder.
Reference: Binary data using pyserial (python serial port) Among them, the Serial.write () method of pyserial sends only the character string data. Is written.
You can send a Binary-converted version so that the output is something like "\ x00". ("\ X" means to interpret the following two characters as hexadecimal integer values.)
As a conversion example It describes how to use array – fixed data type sequence.
import serial import array #I want to send Binary Data b = [0xc0, 0x04, 0x00] print(b) #It is converted to a decimal number and displayed. # >>>[192, 4, 0] #Method using conversion array to Python Binary b_data=array.array('B', [0xc0, 0x04, 0x00]).tostring() print(b_data) # >>>b'\xc0\x04\x00' #Method using conversion bytes for Python Binary b2_data = bytes(b) print(b2_data) # >>>b'\xc0\x04\x00' #Both are the same when compared. print(b_data==b2_data) # >>>True
It is easier to use bytes (), so use this. It can be used when exchanging in Binary mode of TWELITE mentioned in the previous article.
#Send, for example senddata=[0xA5,0x5A,0x80,0x07,0x00,0x00,0x00,0x64,0xFF,0xFF,0x02,0x67] print(senddata) #Print output will be in decimal notation # [65, 90, 128, 7, 1, 0, 0, 100, 255, 255, 2, 103] #Convert to Binary send_binary =bytes(senddata) # bytearray()May be # send_binary =bytearray(senddata) print(send_binary) #Send data Binary # b'\xa5Z\x80\x07\x01\x00\x00d\xff\xff\x02g' #Send by pyserial with serial.Serial('COM12', 115200) as ser: print('---') ser.write(send_binary) print('---')
with serial.Serial('COM12', 115200) as ser: #Specify the number of bytes to read in the read argument. b_reply = ser.read(23) #When reading all b_reply = ser.read_all() print(b_reply) # >>> b'\xa5Z\x80\x04\xdb\xa1\x98\x01\xe3\x04\xa5Z\x80\x07\x01\x04\x00\x013<")\x04' #It is necessary to specify how many bytes and what type to read using the struct module. #This time, 23 bytes are read in 1-byte increments. #23B is the same as having 23 Bs lined up. B is an unsigned char type in C language, and in Python it is an integer of 1 Byte. reply =struct.unpack('23B',b_reply) print(reply) # >>> 165, 90, 128, 4, 219, 161, 152, 1, 227, 4, 165, 90, 128, 7, 1, 4, 0, 1, 51, 60, 34, 41, 4 #The last 4 is(EOT)End of transmission character (End)-of-Transmission character） #Analyze according to the specifications of what number of Byte has which information.