繁体   English   中英

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

[英]Speeding Up Data Transfer Using Pyserial in Python

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

发送代码(位于树莓派上)

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

也许ser.read(1)的开销正在减慢速度。 似乎每一行的末尾都有一个\\n ,因此请尝试使用pySerial的readline()方法,而不要滚动自己的方法。 应该将line = "".join(readline())更改为line = ser.readline()即可。 您还需要将循环结束条件更改为== "<<EOF>>\\n"

您可能还需要在书写侧添加一个ser.flush()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM