从传感器端口读取数据,转换数据流

Read Data from Sensor Port, Convert Datastream

您好,我想转换 Sensordata 但无法正常工作。

代码有什么问题:

while True:
ser = serial.Serial('/dev/ttyUSB0',115200, timeout = 1)
b = ser.readline()         # read a byte string
print(b)
string_n = b.decode()  # decode byte string into Unicode  
    #string = string_n.rstrip() # remove \n and \r
flt = string_n        # convert string to float
print(flt)
data.append(flt)           # add to the end of data list
time.sleep(0.1)            # wait (sleep) 0.1 seconds

ab += 1 
ph = 1
print (ab)
ser.close()

我得到:

/dev/ttyUSB0
connected to: /dev/ttyUSB0 pi b'\xaa\x01\x03\x00\xae\xaa\x02\x03\x00\xaf\xaa\x01\x03\x00\xae\xaa\x00\x03\x00\xad\xaa\x02\x03\x00\xaf\xaa\x01\x03\x00\xae\xaa\x00\x03\x00\xad\xaa\x01\x03\x00\xae\xaa\x02\x03\x00\xaf\xaa\x01\x03\x00\xae\xaa\x02\x03\x00\xaf\xaa\x00\x03\x00\xad\xaa\x01\x03\x00\xae\xaa\x02\x03\x00\xaf\xaa\x01\x03\x00\xae\xaa\x02\x03\x00\xaf\xaa\x01\x03\x00\xae\xaa\x02\x03\x00\xaf\xaa\x01\x03\x00\xae\xaa\x02\x03\x00\xaf\xaa\x00\x03\x00\xad' Traceback (most recent call last): File "/home/pi/wave1.py", line 35, in string_n = b.decode() # decode byte string into Unicode
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xaa in position 0: invalid start byte

我有这个传感器:https://wiki.seeedstudio.com/Microwave-Sensor-24GHz-Doppler-Radar-Motion-Sensor-MW2401TR11/

我有一个覆盆子,不是 arduino 或开发板。

你能帮我转换数据吗?

问候 W

你遇到的第一个问题是,在你第一次阅读之前,传感器会在序列中吐出一段时间。在您提供的 link 上的示例代码中,它读出 5 个字节并确保第一个是 \xaa.

这对你来说意味着你想在开始时阅读一次并丢弃结果。然后再读一遍,如果可以的话一次5个字节。

另一种方法是只获取最后 5 个字节并丢弃其余部分。还要验证读取以 \xaa 开头,然后像示例程序中那样使用每个字节。

data = b'\xaa\x01\x03\x00\xae' \
       b'\xaa\x01\x03\x00\xae' \
       b'\xaa\x02\x03\x00\xaf' \
       b'\xaa\x00\x03\x00\xad'

last_report = data[-5:]
print(last_report)
print(last_report[0])
if last_report[0] == 170:  # b'\xaa':
    print('valid reading:')
    state_code = last_report[1]
    gear_code = last_report[2]
    delay_code = last_report[3]
    check_code = last_report[4]
    print(f' state_code={state_code}\n gear_code={gear_code}\n delay_code={delay_code}\n check_code={check_code}\n')

输出:

b'\xaa\x00\x03\x00\xad'
170
valid reading:
 state_code=0
 gear_code=3
 delay_code=0
 check_code=173