python - 从不同的功能在python中通过串行发送数据

标签 python pyserial

我通常使用 C++ 和 C# 进行编程,并且正在尝试熟悉 Python 的工作方式,如果这是一个相当基本的问题,请原谅我。

我想在 Python 中通过 RS-232 打开串行连接并从各种函数发送数据。这是我必须打开串口并发送数据的功能:

def sendData(data):
    ser = serial.Serial('/dev/ttyUSB0', 115200)
    data += "\r\n"
    ser.write(data.encode())

非常简单,但我想将 ser = serial.Serial('/dev/ttyUSB0', 115200) 行移到函数之外,这样我就可以在它上面调用这个函数拥有。

现在在其他语言中,我只是将 ser 变量公开,以便其他函数可以访问它,但我不确定我是否理解变量在 python 中的正确工作方式。理想情况下,我想要这样的东西:

def main():
    ser = serial.Serial('/dev/ttyUSB0', 115200)
    while 1:
        #misc code here
        sendData(data)

我知道我可以通过函数调用传递 ser 变量并使其成为 sendData(ser, data),但这似乎没有必要。执行此操作的最佳方法是什么?

谢谢!

最佳答案

您可以在main 函数中使用global 关键字来分配公共(public)变量:

ser = None

def sendData(data):
    data += "\r\n"
    ser.write(data.encode())

def main():
    global ser
    ser = serial.Serial('/dev/ttyUSB0', 115200)
    while 1:
        #misc code here
        sendData(data)

或者更好的是,使用类:

class SerialWrapper:
    def __init__(self, device):
        self.ser = serial.Serial(device, 115200)

    def sendData(self, data):
        data += "\r\n"
        self.ser.write(data.encode())

def main():
    ser = SerialWrapper('/dev/ttyUSB0')
    while 1:
        #misc code here
        ser.sendData(data)

关于python - 从不同的功能在python中通过串行发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37956517/

相关文章:

python - 如何并行化或制作更快的 python 脚本

python - PyQt5:绘制新图形时维护以前绘制的图形/线

python - 串行 ctrl+a 转义序列

python - 在 python 中通过 RS232 到 USB 电缆读取秤数据

python - 如何在通话期间通过 GSM 调制解调器发送和接收一些数据(Python 和 AT 命令)

python - 使用 PySpark 将日期和时间字符串转换为时间戳时如何保留毫秒?

python - KERAS 在 docker 容器中添加第一层时随机卡住

Python - tkinter 小部件数组随着单选按钮的点击而变化

python - 如何解析从pyserial接收的json字符串?

python - 如何用python找到串行流的第一个字节?