完全相同的python3代码可以在shell中工作,但不能在脚本中工作吗?

问题描述 投票:1回答:2

我正在尝试通过串行方式将一个字符写入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脚本时没有运气。

python python-3.x arduino pyserial
2个回答
0
投票

我已经通过简单的循环操作使您的程序厌倦了。它正在按预期方式工作:

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代码可能有问题。


0
投票

问题已解决,我找到了以前没有找到的答案。

pySerial write() works fine in Python interpreter, but not Python script

这是脚本的快速执行,稍稍延迟了2秒就完成了。

我感谢所有对解决方案提出建议并打算将其总结的人。祝大家新年快乐!

© www.soinside.com 2019 - 2024. All rights reserved.