【发布时间】:2020-08-21 23:25:17
【问题描述】:
我有两个 xBee Pro S2C 模块。我正在尝试使用 xBee 模块将图像从 Windows PC 发送到 Raspberry Pi。我将我的 xBees 配置为 API 模式,我可以使用 Python 代码接收/发送 AT 文本消息。
我想将图像从我的 PC 发送到 Raspberry Pi Model 3 B+
我也查了这个主题:http://cms.digi.com/support/forum/70518/transfer-image-between-xbee-modules-connected-raspberry-each
我做了一些更改并尝试了下面的代码。
PC 端(发送方) ############################
ser = serial.Serial('COM6', 9600,timeout=.5)
fc= 'xbee.jpg'
File = open(fc,'r')
#while True:
line = ser.readline()
a= File.read()
print(str(a))
ser.write(str(a))
#############################
Raspberry Pi 端(接收器) #############################
ser = serial.Serial('/dev/ttyUSB0', 9600,timeout=.5)
while True:
incoming = ser.readline().strip()
file = open ('images.png','wb')
print (incoming)
file.write(incoming)
file.close()
content= file.read()
#################################
然后我得到一个错误:
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 240: character maps to <undefined>
我也想到了一个主意。我制作了一个脚本,将图像转换为 base64 代码并保存为 .txt 文件。我将“images.png”更改为“test.txt”。没有发生错误,但也没有在我的树莓派上创建 .txt 文件。
这对我来说真的很重要。请帮忙。
更新
我也试过这个代码:https://github.com/MortadhaDhkar/zigbee-file-transfer
没有发生错误。但文件也不会接收到 Raspbbery Pi。 Sender.py 输出的是:
Sending Header...
Sending File...
Done
【问题讨论】:
-
不幸的是,我无法提供详细的答案,但看起来您正在读取二进制文件,但是,代码似乎处理字符串而不是处理字节。调用
strip()可能会弄乱原始字节顺序,破坏图像。此外,看起来您正在读取 JPG(“xbee.jpg”)并写入 PNG(“images.png”)。请注意,这些是不同的图像编解码器。如果您想将图像发送一个字符串,也许编码/编码为 Base64(并注意 strip()/etc.)?或者,您可以将图像解码为 r、g、b 值的平面数组并将其作为字节发送? -
...此外,您似乎在
while循环中不断覆盖incoming而不是追加。如果图像很大,以每秒 9600 波特的速度传输将需要很长时间。查看图像大小(以字节为单位)并除以波特率,您将了解传输的方式。 -
谢谢您的回复。我把波特率改成230400。我会考虑你说的。
标签: python raspberry-pi xbee