如何使用pyserial和python从com端口读取多个值



我有一个STM32连接到一个热传感器,它指示房间的温度,我用这个程序从我的com端口读取这个温度。现在我需要一个程序来从我的com端口读取多个值。谢谢你帮我解决这个问题。

import serial
serport = 'COM3'
serbaudrate = 38400
ser = serial.Serial(port = serport, baudrate = serbaudrate, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, timeout=2)
try:
ser.isOpen()
except:
print("Error")
exit()
if ser.isOpen():
try:
while 1:
if ser.inWaiting() > 0:
#print(ser.readline())
response = ser.readline()
print(response.decode("utf-8"))
else:
ser.write(b"1")
except Exception as e:
print(e)

@塔莫谢谢你回答我的问题。这是我为编程微控制器写的代码:

while (1)
{
// Test: Set GPIO pin high
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_SET);
// Get ADC value
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);
raw = HAL_ADC_GetValue(&hadc1);
raw = ((raw*0.000244*3.3) - 0.25)/0.028;
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_RESET);
// Convert to string and print
sprintf(msg, "%hurn", raw);
HAL_UART_Transmit(&huart2, (uint8_t*)msg, strlen(msg), HAL_MAX_DELAY);
// Pretend we have to do something else for a while
HAL_Delay(100);  
}

在这种情况下,我只读取一个值,因为热传感器只给出一个值。如果我有多个值,我如何用分号分隔它们?

如果您已经采用了以文本形式发送数值的方式,那么您可以扩展它。假设您想同时发送3个整数值,只需用分号分隔即可。例如123;456;789n

然后,您的微控制器应该以这种格式输出数据,您的Python程序可以像现在一样读取整行数据。您可以使用regex:将此行解析为各个值

import re
...
response = ser.readline()
needles = re.match("(d+);(d+);(d+)", response)
if needles:
print("Got: {} {} {}".format(needles[0], needles[1], needles[2]))

假设您有3个来自ADC的值,分别位于变量raw1raw2raw3中。然后,您可以使用sprintf()来格式化包含所有内容的消息,并使用Tarmo的建议来阅读这些内容。

sprintf(msg, "%hu;%hu;%hurn", raw1, raw2, raw3);

请在变量msg中提供足够的内存。

最新更新