【问题标题】:Using Pyserial to send a file?使用 Pyserial 发送文件?
【发布时间】:2014-01-07 09:56:49
【问题描述】:

我有一个 Raspberry Pi 通过两个无线电模块连接到我的 Macbook Pro。到目前为止,我已经成功地使用 pyserial 从一个设备向另一个设备发送字符串和命令,但是,我找不到发送文本文件的方法。就像在超级终端上一样,您可以选择通过 xmodem 发送文本文件。我已经下载了 xmodem 库并玩了一下,我想我可以发送文件,但我不知道如何在另一端接收它们。 有什么帮助吗?

【问题讨论】:

    标签: python radio pyserial xmodem


    【解决方案1】:

    这个问题不是很清楚......您只需通过串行端口发送字节......客户端将字节保存到文件中。这是一个简单的实现。

    服务器代码

    from serial import Serial
    ser = Serial("com4") #or whatever 
    readline = lambda : iter(lambda:ser.read(1),"\n")
    while "".join(readline()) != "<<SENDFILE>>": #wait for client to request file
        pass #do nothing ... just waiting ... we could time.sleep() if we didnt want to constantly loop
    ser.write(open("some_file.txt","rb").read()) #send file
    ser.write("\n<<EOF>>\n") #send message indicating file transmission complete
    

    客户端代码

    from serial import Serial
    ser = Serial("com4") #or whatever 
    ser.write("<<SENDFILE>>\n") #tell server we are ready to recieve
    readline = lambda : iter(lambda:ser.read(1),"\n")
    with open("somefile.txt","wb") as outfile:
       while True:
           line = "".join(readline())
           if line == "<<EOF>>":
               break #done so stop accumulating lines
           print >> outfile,line
    

    这是一个应该工作的过度简化的示例,但它假设 100% 正确传输,这并不总是能够实现...更好的方案是逐行发送它和校验和以验证正确的传输,但基本思想是一样的...校验和将是 OP 的 exercsize

    【讨论】:

    • 让我们说不是.txt文件,我们想发送一个图像(一个.png)......假设我们发送到的设备是一台打印机......到底怎么做我以打印机将识别它是图像并打印它的格式发送数据,而不是它正在输出的 ascii 乱码或 unicode 乱码?我使用ser.write(open("file.png", "rb").read()) 发送文件。我可以为此打开另一个线程......但这真的值得吗?
    • 您需要从打印机文档中获取该信息...您可能需要先将 file.png 转换为其他内容
    猜你喜欢
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 2014-04-29
    • 2013-02-08
    • 1970-01-01
    • 2021-01-07
    相关资源
    最近更新 更多