Xbee 图像传输 python

Xbee image transfer python

您好,我对 xBee 很陌生,在数据传输方面遇到了困难。我的 objective 是拍摄 Raspberry pi 宽的照片,然后通过 xBee 将该图像转换为 hexlify 代码将其发送回计算机。在计算机上使用 python 收到代码后,我使用 binascii 库通过此代码

将这些代码转回图像

ASCII 到 IMG:

import binascii
with open("file.txt", "r") as f:
    data=f.read()
data = data.strip()
data = data.replace('\n', '')
data = binascii.a2b_hex(data)
with open('image.png', 'wb') as image_file:
    image_file.write(data)

但在 运行 该代码之后图像已损坏。所以我开始查看接收代码,但我不确定代码是否正确,因为我得到的文本文件中有很多“0”

接收码:

from digi.xbee.devices import XBeeDevice
PORT = 'COM11'
BAUD = 19200
ser = XBeeDevice(PORT, BAUD)

try :
    ser.open()
    def data_receive_callback(xbee_message):
        data = xbee_message.data.decode("utf-8")
        with open("file.txt","a") as f:
            f.write(data)

    ser.add_data_received_callback(data_receive_callback)

    print("Waiting for data...\n")
    input()

finally:
    if ser is not None and ser.is_open():
        ser.close()

RPi 中的相机代码:

from picamera import PiCamera
import serial
import binascii
ser =serial.Serial(
     port='/dev/ttyS0',
     baudrate=19200,
     parity= serial.PARITY_NONE,
     stopbits=serial.STOPBITS_ONE,
     bytesize=serial.EIGHTBITS,
     timeout=1
)
camera=PiCamera()
camera.resolution(1920,1080)
camera.capture("img.png")
with open("image.png",'rb') as f:
       content=f.read()
a=binascii.hexlify(content)
ser.write(a)
ser.close 

我应该怎么做或尝试修复代码。我认为这是一个主要问题的接收代码。

Ps。我已经尝试在计算机和 Raspberry Pi 中将图像文件转换为 hexlify 并将其反转回来,它仍然可以正常工作。

问题:

您为什么使用 XBee 而不是 Wi-Fi 和标准 TCP 协议,如 HTTP 或 FTP?

一次调试您的系统的一部分。不要在 Pi 上捕获图像,而是使用一个小文本文件并查看它是否正确通过。将更容易看出您是否在文件的中间、开头或结尾丢弃了字节。

无论何时使用 XBee 模块,请务必启用硬件流控制(引脚 D6 和 D7),以免丢失任何串行数据。通过硬件流量控制,连接的每一端都能够向另一端发出信号,在它处理数据时暂时停止发送。

我还建议将波特率提高到 115200 甚至 230400 bps。这与硬件流控制相结合,将导致更快的传输而不会丢失字节。

无需对数据进行 hexlify——当 运行 在透明串行模式(本质上是串行电缆替代)时,XBee 能够发送 8 位字节。

也就是说,您没有任何方法来指示文件的开始或结束——接收者不知道图像何时开始或何时结束和关闭文件。如果您继续对数据进行十六进制化,您可以发送 0-9a-f 以外的字符来指示它是图像的开始或图像已完成。