从传感器端口读取数据,转换数据流
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
您好,我想转换 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