【发布时间】:2021-03-29 19:58:13
【问题描述】:
我正在尝试使用 pySerial 解析来自 arduino 的数据,以便将每个值归因于 tKinter GUI 应用程序的变量使用。
为此,我试图从 arduino 获取数据并将每个解析的值归因于浮点或复杂(文本 + 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',我只想要数值。请问最好的方法是什么?
谢谢!
【问题讨论】:
-
请从intro tour 重复on topic 和how to ask。 “告诉我如何解决这个编码问题”不是堆栈溢出问题。我们希望您做出诚实的尝试,然后然后就您的算法或技术提出一个具体的问题。 Stack Overflow 并不打算取代现有的文档和教程。这是使用字符串函数从输入中提取所需信息的问题。查找如何在两个文本标签之间查找文本。
-
“我想将每个值都归入变量”到底是什么意思?什么变量?
-
你可以在reading上调用
.strip()来删除尾随的换行符,然后使用.split(":",1)获取键/值对。 -
@Prune 抱歉,我已经更正了我的帖子。
-
@acw1668 感谢您的回复
标签: python tkinter arduino pyserial