在Python中使用Pyserial加速数据传输

时间:2014-02-06 21:27:28

标签: python io serial-port pyserial

我使用python和pyserial模块创建了一个数据传输程序。我目前正在使用它在Raspberry Pi和我的计算机之间通过无线电设备传送文本文件。问题是,我试图发送的文件包含5000行文本,大小为93.0 Kb,需要花费很长时间才能发送。确切地说,它需要大约一分钟。我需要在几秒钟内完成。下面是以下代码,我确信可以通过文件读取进行许多优化,这样可以提高数据传输速度。我的无线电设备的数据速率为250 kbps,显然没有达到。任何帮助将不胜感激。

要发送的代码(位于raspberry pi上)

def s_file():

    print 'start'

    readline = lambda : iter(lambda:ser.read(1),"\n")
    name = "".join(readline())
    print name
    file_loc = directory_name + name

    sleep(1)

    print('Waiting for command from client to send file...')    

    while "".join(readline()) != "<<SENDFILE>>":                 
        pass

    with open(file_loc) as FileObj:
        for lines in FileObj:
            ser.write(lines)

    ser.write("\n<<EOF>>\n")

    print 'done'

接收代码(在我的笔记本电脑上)

def r_f_bird(self): #send command to bird to start func,
    if ser_open == True:


        readline = lambda : iter(lambda:ser.read(1),"\n")

        NAME = self.tb2.get()

        ser.write('/' + NAME)

        print NAME
        sleep(0.5)
        ser.write('\n<<SENDFILE>>\n')

        start = clock()
        with open(str(NAME),"wb") as outfile:
            while True:
                line = "".join(readline())
                if line == "<<EOF>>":
                    break
                print >> outfile, line
        elapsed = clock() - start
        print elapsed


        ser.flush()

    else:
        pass

1 个答案:

答案 0 :(得分:0)

ser.read(1)的开销可能会减慢速度。看起来你在每一行的末尾都有一个\n,所以尝试使用pySerial的readline()方法而不是滚动你自己的方法。将line = "".join(readline())更改为line = ser.readline()应该这样做。您还需要将循环结束条件更改为== "<<EOF>>\n"

您可能还需要在写作方面添加ser.flush()