在Python中将串行端口的数据转换为十进制显示
我正在启动一个从无线电接收器读取数据的程序。数据长度为6字节,每1秒更新一次。程序读取串行端口USB数据,但数据格式不正确。我只知道它应该是一个无符号整数 每个数据字符串以6个字节的形式输入,每个字节表示一个与接收器记录的数据相对应的数字在Python中将串行端口的数据转换为十进制显示,python,Python,我正在启动一个从无线电接收器读取数据的程序。数据长度为6字节,每1秒更新一次。程序读取串行端口USB数据,但数据格式不正确。我只知道它应该是一个无符号整数 每个数据字符串以6个字节的形式输入,每个字节表示一个与接收器记录的数据相对应的数字 import serial t = 0 while t == 0: ser = serial.Serial('/dev/tty.SLAB_USBtoUART', 9600, bytesize=8, stopbits=1, timeout=None,
import serial
t = 0
while t == 0:
ser = serial.Serial('/dev/tty.SLAB_USBtoUART', 9600, bytesize=8, stopbits=1, timeout=None, xonxoff=0, rtscts=0, dsrdtr=0)
s=ser.readline(6)
#s=ser.read(6)
print("Streams received during interval: ")
print (s)
print("__________")
end
我希望得到如下输出:
0 101 0 91 145
但我得到的是:
电动汽车�
我认为输入的数据和它在print语句中的打印方式有问题。在继续之前,我只需要确保数据输入正确。这是因为您正在使用
'%s'%s
语句将字节转换为字符串。它显示为与您的字节对应的任意随机ASCII字符
请尝试将字节打印为整数:
print ' '.join([ord(ss) for ss in s])
好吧,我想我会发布我的解决方案。使用NumPy,我能够轻松地输出正确的数据。我正在使用Dorji DRF4432S接收机和Dorji DRF5150S发射机。这些设置用于从传感器发送模拟电压,该传感器在触发之前基本不输出任何信号,电压保持高电平几秒钟,然后返回零值。希望这可能会帮助一些人寻找这个传感器的编码帮助
import serial
import numpy as np
t = 0
while t == 0:
ser = serial.Serial('/dev/tty.SLAB_USBtoUART', 9600, bytesize=8, stopbits=1, timeout=None, xonxoff=0, rtscts=0, dsrdtr=0)
s=ser.readline(6)
#s=ser.read(6)
print("Streams received during interval: ")
ss=np.fromstring(s, dtype=np.uint8, count=6)
sen_1_group=ss[0]
sen_1_id=ss[1]
sen_1_voltage=ss[2]+ss[3]
sen_1_battery=ss[4]
sen_1_signal=ss[5]
print (ss)
print "Group Id = ", sen_1_group , "Sensor ID = ", sen_1_id
print "Sensor ", sen_1_id, " Voltage = ", sen_1_voltage
print "Sensor ", sen_1_id, " Battery = ", sen_1_battery
print "Sensor ", sen_1_id, " Signal Strength = ", sen_1_signal
print("__________")
end
这导致数据正确显示,如下所示:
>> Streams received during interval:
>>[ 0 101 0 0 84 169]
>>Group Id = 0 Sensor ID = 101
>>Sensor 101 Voltage = 0
>>Sensor 101 Battery = 84
>>Sensor 101 Signal Strength = 169
>>__________
当我现在打印TypeError:sequence item 0:预期的字符串,int foundTry just
print s
,或print map(int,s)