从不同的函数在python中通过串行发送数据

时间:2016-06-22 00:04:49

标签: python pyserial

我正常使用C ++和C#进行编程,并且我正在尝试习惯python如何工作,所以请原谅我,如果这是一个相当基本的问题。

我想通过RS-232在python中打开一个串行连接,并从各种功能发送数据。这是我打开串口并发送数据的功能:

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),但这似乎是不必要的。最好的方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:5)

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

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)