【发布时间】:2014-02-18 22:22:44
【问题描述】:
我正在使用 Python 程序将串行数据从 Raspberry Pi 发送到 Arduino。我正在运行 Python 2.7.3。程序是:
import serial
ser = serial.Serial('/dev/ttyACM0', 115200)
ser.write(b'\x4c\xff\x46')
问题是如果这三行在程序中运行,它们似乎没有发送任何内容。但是,如果我在 Python shell 中逐行运行它们,它们就可以正常工作。
另外,如果我打开了 Arduino 串行监视器,程序也可以正常工作,无需在 shell 中逐行运行。
编辑添加:
发送到 Arduino 似乎有一些延迟。因此,当我在解释模式下运行代码时,它可以工作,但如果作为程序,它就不行。我认为这是因为我在 Windows 机器上尝试了相同的程序。
import serial
ser = serial.Serial('COM8', 115200)
ser.write(b'\x4c\x20\x46')
如果我在解释模式下运行程序,甚至在调试模式下使用 ser.write 命令上的断点,它都可以工作。但如果作为程序运行则不会。
编辑添加更多内容:
事实证明,Arduino 具有必须禁用的串行通信自动重置功能:
http://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection#.UwP_wfldV8E
http://forum.arduino.cc/index.php/topic,28723.0.html
我在 RESET 引脚和地之间使用了一个 220 uF 的电容器。这样可行。
很难被这样的虫子咬!它仍然很聪明。
【问题讨论】:
-
您是否以具有相同权限的同一用户身份运行?
-
是的,我以同一个用户身份运行,即使在同一个 shell 中。如果我使用行解释器,它可以工作。在同一个 shell 中,如果我将它作为程序运行,它就不起作用,除非我打开了 Arduino 串行监视器。
-
所以你必须添加一个电容器才能成功地将数据从 pi 发送到 arduino?
标签: python serial-port arduino raspberry-pi