【问题标题】:Python serial module prints empty linesPython串行模块打印空行
【发布时间】:2018-10-26 00:38:36
【问题描述】:

我正在尝试制作一个生成随机数的 Arduino 代码和一个从串行读取这些数字并在命令行中打印它们的 Python 程序。

这是我的 Arduino 代码:

void setup() {
}

void loop() {
    long rand = random(10);
    Serial.println(rand);
    delay(1000);
}

这是我的 Python 代码:

#!/usr/bin/python

import serial

ser = serial.Serial("/dev/ttyACM0",9600, timeout = 1)
if ser.is_open == 0:
    ser.open()
    print('serial was not open, so it is open now')
else:
    print('serial was open this whole time')
while ser.is_open:
    thing = ser.readline()
    print(thing)
    #ser.readline()
ser.close()

一旦 Arduino 开始生成随机数,我运行 Python 程序并得到以下输出:

b''
b''
b''
b''
b''
b''
b''
b''

我希望看到随机数而不是 b''

我该如何解决这个问题?

【问题讨论】:

  • 我希望代码能够在 Arduino 草图中设置串行通信。
  • 嗨 Klaus,是的,我添加了 Serial.begin(9600) 来取消设置,它可以正常工作,我现在在屏幕上打印了一些随机数。但是,格式有点奇怪,数字显示为b'8\r\n'。你知道我怎样才能修复这种格式,以便只显示数字吗?

标签: python linux arduino pyserial


【解决方案1】:

您还没有在 arduino 代码中初始化串行对象

在您的 Arduino 代码中尝试对设置函数进行此更改。

setup()
{
    Serial.begin(9600);
}

下次遇到类似问题时,请尝试模块化检查。首先检查 Arduino 是否正常工作,然后检查整个系统是否正常工作。

【讨论】:

  • 感谢 Nitro,确实解决了它,但是,我的号码现在显示为 b '8\r\n',你知道我该如何解决这个格式问题吗?
  • \r\n 是在您使用 Serial.println 时发送的。使用 Serial.print 它应该可以正常工作。顺便说一句,Serial.print 只能因为您的代码有 1 秒的延迟才能正常工作,否则会导致不同的问题。也请将我的回复标记为有帮助,这可以提高我在 stackoverflow 上的排名。
  • 我确实将您的回复标记为有帮助,但是当我单击向上箭头时,它会变为 1,然后立即返回 0,它表示我需要至少有 15 的声誉公开统计。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-02
  • 1970-01-01
  • 2019-02-18
  • 2019-10-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多