我试图使用pySerial解析arduino中的数据,以便将每个值属性化为tKinter GUI应用程序使用的变量
为此,我尝试从arduino获取数据,并将每个解析的值属性化为float或complex(text+num)变量。对于这一点,我的第一个测试是对每种数据类型使用if条件,但我不知道它是否适合这种方式,我的类似代码也不起作用
# Get value from the data serial arduino braud 9600
ser = serial.Serial('/dev/cu.usbmodem14201', 9600, timeout=3, writeTimeout=0)
data = ser.read_all()
Analog value=0.0
Voltage=0 # int
temp=0.0
EC=0.0
TemperatureB=0.0
HumidityB=0.0
pHvalue=0.0
extractorstatement="NULL"
lightstatement="NULL"
intractorstatement="NULL"
FANstatement="NULL"
date="NULL" # as sting
def DataReaderThread():
while True:
currentLineRead = ser.readline()
print(currentLineRead)
currentLineReadName=reading.split(":",0)
currentLineReadValue=reading.split(":",1)
if currentLineReadName="b\'Analog value":
analogValue=currentLineReadValue
elif currentLineReadName="b\'Voltage":
VoltageEcSensor=currentLineReadValue
elif currentLineReadName="b\'temp":
tempWaterSensor=currentLineReadValue
elif currentLineReadName="b\'EC":
if currentLineReadValue="No solution!\r\n\'":
EcSensorValue=0.0
else:
EcSensorValue=currentLineReadValue
elif currentLineReadName="b\'TemperatureB":
TemperatureB=currentLineReadValue
elif currentLineReadName="b\'HumidityB":
HumidityB=currentLineReadValue
elif currentLineReadName="b\'pHvalue":
pHvalue=currentLineReadValue
elif currentLineReadName="b\'extractorstatement":
extractorStatement=currentLineReadValue
elif currentLineReadName="b\'lightstatement":
ligthStatement=currentLineReadValue
elif currentLineReadName="b\'intractorstatement":
intractorStatement=currentLineReadValue
else currentLineReadName="b'FANstatement":
fanStatement=currentLineReadValue
return(analogValue, VoltageEcSensor, tempWaterSensor, EcSensorValue, TemperatureB, HumidityB, pHvalue, extractorStatement, ligthStatement, intractorStatement, fanStatement)
这里有arduino的输出,称为“currentLineRead”(多行的视觉:
b'
b'
b'Analog value:30\r\n'
b'Voltage:146\r\n'
b'temp:24.25\r\n'
b'EC:No solution!\r\n'
b'TemperatureB:23.60\r\n'
b'HumidityB:35.70\r\n'
b'pHvalue:14.68\r\n'
b'extractorstatement:1\r\n'
b'lightstatement:0\r\n'
b'intractorstatement:0\r\n'
b'FANstatement:10:0:0 1/1/0 Day_of_week:1\r\n'
b'
b'
b'Analog value:30\r\n'
b'Voltage:146\r\n'
b'temp:24.25\r\n'
b'EC:No solution!\r\n'
b'TemperatureB:23.60\r\n'
b'HumidityB:35.70\r\n'
b'pHvalue:14.68\r\n'
b'extractorstatement:1\r\n'
b'lightstatement:0\r\n'
b'intractorstatement:0\r\n'
b'FANstatement:10:0:0 1/1/0 Day_of_week:1\r\n
我想将每个值赋给上面的变量集。例如:b'TemperatureB:23.60\r\n',我只想要数值。请问最好的方法是什么
谢谢
实际上,您可以使用json包和我找到的一些截取的here来“放松”语法,使键周围不需要“”引号(因为ArduinoJson发送具有该标准化的字符串,以便在传输过程中保存一些字节)
将json行反序列化为python词汇对象可能是最好的方法。 它允许您:
如果字典中没有名为
"key_name"
的键,那么只需调用默认返回None
的.get("key_name")
方法即可以下是片段:
类和对象声明
下面是简单使用它的方法:
产出:
相关问题 更多 >
编程相关推荐