首页 > 解决方案 > 使用串行将浮点数从arduino发送到python

问题描述

我正在尝试从 arduino 发送一个浮点数,并使用串行的 python 读取它。

我正在使用以下代码在 arduino 上生成数字:

这是arduino代码,它有效

long randNumber;
float avgMe;
float theTemp;

void setup() {
  Serial.begin(9600); // initialize print
  Serial.println("Start session");
}

void loop() {
  avgMe = 0;
  for (int i = 0; i < 10; i++) {
    randNumber = random(0, 11);
    delay(100);
    avgMe = avgMe + randNumber;
  }
  theTemp = avgMe / 10;
  Serial.print(theTemp);

}

它打印出我想在 python 中抓取的内容:

Start session
4.90
6.80
3.90
5.70
6.10

这就是我在 python 中尝试获取它的方法:

# %% Import
import serial
import time
import struct

# %% connect
try:
    ser = serial.Serial('COM3', 115200, timeout=.1)
    time.sleep(2)
    print("Connection to " + 'port' + " established succesfully!\n")
except Exception as e:
    print(e)

# %% loop for some time
t_end = time.time() + 10
while time.time() < t_end:
    data = ser.read(4)
    if data:
        # test = struct.unpack(">fff",data)
        print(data)

time.sleep(1)
ser.close()

Python 打印:

b'\x00\x00\x00\x00'
b'\x00'
b'\x00\x00\x00\x00'
b'\x00\x00\x00\x00'
b'\x00\x00\x00\x00'
b'\x00\x00\x00\x00'
b'\x00'

但首先我无法转换它,而且信息似乎也不存在。我很想听你的意见

标签: pythonarduino

解决方案


当我第一次学习如何从 arduino 通过串行端口发送数据时,我遇到了同样的问题。波特率必须相同,否则输出会变得奇怪而美妙。

如果 arduino 使用这个波特率

Serial.begin(9600); // initialize print

那么python需要相同的波特率

ser = serial.Serial('COM3', 9600, timeout=.1)

推荐阅读