Daa*_*nii 5 python serial-port arduino raspberry-pi
我正在使用Python程序将Raspberry Pi中的串行数据发送到Arduino.我正在运行Python 2.7.3.该计划是:
import serial
ser = serial.Serial('/dev/ttyACM0', 115200)
ser.write(b'\x4c\xff\x46')
Run Code Online (Sandbox Code Playgroud)
问题是,如果它们在程序中运行,这三行似乎没有发送任何内容.但是如果我在Python shell中逐行运行它们,它们可以正常工作.
此外,如果我打开Arduino串行监视器,该程序也可以正常工作,而无需在shell中逐个运行这些行.
编辑添加:
似乎发送到Arduino有一些延迟.因此,当我在解释模式下运行代码时,它可以工作,但如果作为一个程序,它不会.我想是因为我在Windows机器上尝试了相同的程序.
import serial
ser = serial.Serial('COM8', 115200)
ser.write(b'\x4c\x20\x46')
Run Code Online (Sandbox Code Playgroud)
如果我在解释模式下运行程序,或者甚至在ser.write命令中使用断点的调试模式下运行,它都可以工作.但如果作为一个程序运行则不行.
编辑添加更多:
事实证明,Arduino在串行通信上具有自动复位功能,必须禁用:
http://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection#.UwP_wfldV8E
http://forum.arduino.cc/index.php/topic,28723.0.html
我在RESET引脚和地之间使用了一个220 uF电容.这样可行.
很难被这样的虫子咬伤!它仍然很聪明.
试试这个.如果你不能在空闲或等等下运行它,请输入python name.py来尝试终端.我还建议你用putty来检查来自/写入Rpi的数据.
import serial
import time
def readlineCR(port):
rv = ""
while True:
ch = port.read()
rv += ch
if ch == '\r' or ch == '':
return rv
port = serial.Serial("/dev/ttyAMA0", baudrate = 7200, timeout = 2)
while True:
rcv = readlineCR(port)
port.write("I typed: " + repr(rcv))
print(rcv)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20488 次 |
| 最近记录: |