串行python到arduino

Posted

技术标签:

【中文标题】串行python到arduino【英文标题】:Serial python to arduino 【发布时间】:2017-06-07 06:59:10 【问题描述】:

我想使用 python 将串行数据 ('a') 发送到我的 arduino。

arduino上的接收代码如下:

char inChar = (char)Serial.read();
if(inChar=='a')
    //do stuff

从 arduino 串行终端发送字符“a”时,它可以工作。 但是,当从 python 2.7 发送时(代码见下文),rx led 闪烁但to stuff 未执行(即inChar=='a' 为假)。 我尝试了所有方法,但无法解决此问题。

Python 代码:

import serial
ser = serial.Serial('/dev/ttyUSB0',9600)
ser.write('a')

编辑ser.write(b'a') 也不起作用

【问题讨论】:

类似问题已回答here看看是否有帮助 @warl0ck 我已经阅读了这篇文章,但没有帮助 在末尾添加ser.flush()ser.close() 来自link 的引用以确保发送数据 @black 下次提供您的问题的最小的、可重现的示例,因为有时某些代码行出现的 context 很重要重现识别问题,当根本没有没有上下文时也是如此。 【参考方案1】:

当您看到 Rx 灯闪烁但 arduino 似乎没有接收到数据时,我会检查两件事:

1) 在从 python 主机发送数据之前,确保 arduino 有足够的时间来设置和启动串行通信。您可以包含导致板载 LED 在Serial.begin 语句之后 以独特模式闪烁的代码,然后在此之后启动 python 代码。 (LED详情:how to make the LED blink)

2) 确保通信设置正确。您可能需要明确设置所有参数,以便了解它们是什么,并确保它们在电缆的两端都相同。例如,在 arduino 上:

// set up Serial comm with standard settings
Serial.begin(9600,SERIAL_8N1);
Serial.flush();

然后在python代码中:

bytesize=8
parity='N'
stopbits=1
timeout=3

ser = serial.Serial(port_name, baudrate=9600, bytesize=bytesize, parity=parity, stopbits=stopbits, timeout=timeout)

另外,如果您可以将数据从 arduino 发送到 python 主机,那么您就知道您的通信设置是正确的。

【讨论】:

感谢您的评论。 24 小时后查看我的答案,它不是很好:( 我没有对终止字符行为的引用,并查看我遇到的类似问题的笔记,我没有使用 python,我使用的是 Java。我会编辑我的答案。 很好,我删除了我的评论,因为它不再适用。您是否能够重现 OP 的问题?【参考方案2】:

添加

ser.flush()

ser.write('a')之后的最后

ser.close()

来自link 的引用,以确保将数据发送到端口。

【讨论】:

【参考方案3】:

感谢您的回复。但是,它并没有解决我的问题。

在尝试了几乎所有可以想象的解决方案后,我修复了它。在打开端口和发送/读取之间,需要延迟——至少我的树莓派是这样。

所以这行得通:

import serial
import time

ser = serial.Serial('/dev/ttyUSB0',9600) #opening the port
time.sleep(1) #wait 1s
ser.write('a') #write to the port

【讨论】:

【参考方案4】:

你可以在这里看到我的决定 => https://github.com/thisroot/firebox

import firebox as fb

serPort = fb.findDevice('stimulator')
if(serPort):
    data = []
    data.append("<fire,200,5>")
    fb.sendMessage(serPort,data)

【讨论】:

事实上,这看起来像 spam 并且似乎没有回答此线程中的问题,也没有明确识别和解决问题中的问题。请编辑您的答案,以提供有关如何解决 OP 问题以及他如何在特定情况下使用它的更多详细信息。 没时间写更详细的

以上是关于串行python到arduino的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中将串行数据打印到标签中?

python 捕获串行数据并记录到文件

传递数组时,Python串行到字节失败

Python 没有接收到来自 Arduino Mega 2560 的第一行串行数据,而是接收到所有后续数据,为啥会发生这种情况?

使用串行通信在 python 和 arduino 之间进行同步

从python脚本发送32位整数到串行的arduino,用于驱动RGB条带