使用串行将浮点数从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'

但首先我无法转换它,而且似乎信息不存在。我希望您对此提出意见


繁星coding
浏览 226回答 1
1回答

撒科打诨

当我第一次学习如何从 arduino 通过串行端口发送数据时,我遇到了同样的问题。波特率必须相同,否则输出会变得奇怪而美妙。如果 arduino 使用这个波特率Serial.begin(9600);&nbsp;//&nbsp;initialize&nbsp;print那么python需要相同的波特率ser&nbsp;=&nbsp;serial.Serial('COM3',&nbsp;9600,&nbsp;timeout=.1)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python