我正在尝试通过串行方式将一个字符写入Arduino,该Arduino运行代码以控制用于远程控制的IR灯。
在Arduino终端中运行代码有效,led完成了它的工作。 Arduino代码有效。在shell工程中逐行运行,没问题。但是当我运行“ python remote.py”时,它不起作用。
我尝试了一段额外的代码,以确保在命令提示符下shell和解释器都运行相同版本的python。
import sys
sys.stdout.write("Hello from Python %s\n" % (sys.version,))
并且它导致“ Python 3.7.3”,这是我启动该外壳程序时的shell版本。
这是完整的Python代码:
import serial
ser = serial.Serial('COM7', 9600)
ser.write('a'.encode())
ser.close()
我意识到这不是很“ Pythonic”,甚至不是完全正确,而是为了简化并尝试并使用尽可能少的代码,我删去了所有不必要的内容。由于代码在shell中运行,它的一些正确之处?
Arduino代码在这里:https://pastebin.com/7T2yFzrL
[我在Windows 10下使用Notepad ++使用Python 3.7.3
我找到了这个线程:Arduino Python3 script,但是我不明白我的代码如何在shell中而不是在脚本中工作?它可能是代码点(这是我不明白的意思),但是在那种情况下我该如何纠正呢?也没有显示错误。我希望有人可以引导我朝正确的方向前进。
/最诚挚的问候马格努斯
在T. Feix这样的新代码提出建议后,尝试对我的代码进行补充:
#! python3
import serial
try:
ser = serial.Serial('COM7', 9600)
ser.write('a'.encode())
ser.close()
except input() as ex:
print(ex)
不幸的是它不返回任何东西,没有错误,没有什么?
我在Arduino上的代码期望一个字符,而Python似乎发送了一个字节,这可能是错误,如果是的话,我该如何更改这两种类型?
现在已经将Arduino上的预期数据类型更改为Byte,该代码仍然可以在终端中运行,但是当我运行Python脚本时没有运气。
我已经通过简单的循环操作使您的程序厌倦了。它正在按预期方式工作:
import serial
try:
ser = serial.Serial("/dev/ttyUSB0")
print("Bytes Written: %d" % (ser.write("b".encode())))
ser.flush()
print(ser.read())
ser.close()
except Exception as e:
print(e)
输出:
Bytes Written: 1
b'b'
我已经打电话给flush
,以确保已将数据写入物理端口。有关更多信息,请参见此link。
清除文件之类的对象。在这种情况下,请等待所有数据写入。
看起来您的电线或arduino代码可能有问题。
问题已解决,我找到了以前没有找到的答案。
pySerial write() works fine in Python interpreter, but not Python script
这是脚本的快速执行,稍稍延迟了2秒就完成了。
我感谢所有对解决方案提出建议并打算将其总结的人。祝大家新年快乐!