Reputation: 65
Here is my code for serial port communication
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib import style
import serial
MCU = serial.Serial('COM35', 115200, timeout=.1)
import time
time.sleep(1) #give the connection a second to settle
while True:
data = MCU.readline()
print(str(data))
but i'm getting in the output as
b'\x0b\x16 )6\x06\x07\x08X\x02\x16,'
(it's Hex+Ascii value)
and this is my input data
uint8_t myBuf[]={11,22,32,41,54,6,7,8,88,2,22,44};
any one know what i'm doing wrong here?
Upvotes: 2
Views: 1884
Reputation: 21
Maybe it will be good idea to try to decode it?
just as idea
while ser.isOpen():
for s in ser.read():
s = ser.readline().decode('utf-8') #reading data from the port with decoding from UTF-8
com = str(s).replace('\n','') #cutting out second pass to the new line
print(s)
Upvotes: 1
Reputation: 814
When you wrote str(data) you requested python to tranlsate the binary data to a readable string (In a readable fromat).
Since there is no readable representation to most of the bytes python just translates them into their hex representation (as a string).
If you want to print them as a list just: list(data).
Upvotes: 1
Reputation: 94
What format do you want your output in? As you suggest, what you have is the correct data but in byte format. For example you could get it as a list of python ints as follows (Python 3):
>>> list(data)
[11, 22, 32, 41, 54, 6, 7, 8, 88, 2, 22, 44]
The struct module may also be useful for you in decoding byte data.
(I can't leave a comment, sorry.)
Upvotes: 2