繁体   English   中英

串行python到arduino

[英]Serial python to arduino

我想使用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'为false)。 我尽了所有努力,但解决不了这个问题。

皮顿代码:

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

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

当您看到Rx指示灯闪烁但arduino似乎未接收到数据时,我将检查两件事:

1)在从python主机发送数据之前,请确保arduino有足够的时间来设置和启动串行通信。 您可以在Serial.begin语句之后添加导致板载LED以独特模式闪烁的代码,然后在那之后启动python代码。 (LED详细信息: 如何使LED闪烁

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主机,则说明您的通信设置正确。

ser.flush()

ser.write('a')

要么

ser.close()

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

您可以在这里查看我的决定=> 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)

谢谢您的回复。 但是,它不能解决我的问题。

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

所以这工作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM