使用串行将arduino的float发送到python

时间:2019-03-27 09:19:16

标签: python arduino

我正在尝试从arduino发送一个浮点数,并使用Serial使用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'

但是首先我不能转换它,也似乎信息不存在。我很乐意您对此的投入

1 个答案:

答案 0 :(得分:1)

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

如果arduino使用此波特率

Serial.begin(9600); // initialize print

然后python需要相同的波特率

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