2017-01-22 218 views
0

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

上Arduino的接收代码如下:

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

当发送charachter 'A' 从Arduino的串行终端,它的工作原理。 然而,从python 2.7发送(代码见下文)时,rx指示灯闪烁,但to stuff未执行(即inChar=='a'为false)。 我尝试了一切,但我无法解决这个问题。

Pyhton代码:

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

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

+0

类似问题的答案[这里](http://stackoverflow.com/questions/19143360/python-writing-to-and-reading-from-serial-port)看看这是否有帮助 – warl0ck

+0

@ warl0ck我已阅读帖子,但它并没有帮助 – black

+1

在末尾加上 'ser.flush()'或者[链接](http:// http://参见ser.close()' 参考pyserial.readthedocs.io/en/latest/shortintro.html)确保数据发送 – warl0ck

回答

0

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

尝试几乎所有可以想象到的解决方案后,我解决它。在开放端口和发送/读取,需要延迟 - 至少在我的树莓。

所以此工程:

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 
-1

你可以在这里看到我的决定=>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) 
+2

事实上,这看起来像*垃圾邮件*,似乎并未回答此主题中的问题,也没有在问题中明确标识和解决问题。请编辑您的答案,以提供更多详细信息,说明如何解决OP问题以及如何在特定情况下使用它。 –

+0

我没有时间写更详细的 –

2

当你看到灯光的Rx闪烁,但arduino似乎并没有收到数据,我会检查两件事:

1)确保在从python主机发送数据之前,arduino有足够的时间来设置和启动串行通信。您可以在Serial.begin声明之后包含导致板载LED以之后的特殊模式闪烁的代码,然后在此之后启动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) 

另外,如果你可以从阿尔杜伊诺到蟒蛇主机发送数据,那么你知道你的通信集up是正确的。

+0

我很感谢您的评论。 24小时后回顾我的回答,这不是很好:(我没有引用终止字符行为,并审查我遇到的类似问题的笔记,我没有使用Python,我使用Java。编辑我的答案 – mhopeng

+0

好,我删除了我的评论,因为它不再适用。你是否能够重现OP的问题? –

1

在末尾添加

ser.flush()

后从linkser.write('a')

ser.close()

参考,以确保数据被发送到的端口。