如何从串口获取图像
我在工作中遇到了一些问题。 我用Arduino UNO成功地将TTL串行相机的图像存储到了MicroSD卡上,这得益于Adafruit的教程(learn.adafruit.com/ttl-serial-camera/overview)。但是,当我通过Zigbee发射器传输这些图像时,在Zigbee接收器的串口上,我收到的是一些随机的字符。我觉得这些字符是ASCII码。 我想把从串口接收到的图像保存到我电脑的一个文件夹里。 这可能吗? 我在一些论坛上看到有人提到使用Java或Python代码,但我不太明白该怎么用。
在Java中从COM7端口读取图像数据2 个回答
0
我想这就是你想要的内容:
import serial
ser = serial.Serial('/dev/tty.usbserial', 9600)
image = ser.read()
with open('/tmp/image', 'wb') as file:
file.write(image)
这个代码只适用于Python 3,如果你用的是Python 2,就需要用io.open。还有,如果你还没有安装serial模块,可能需要先安装一下。我对你需要用来通过串口发送图像的Arduino-C语言不太熟悉……
0
Arduino IDE的串口监视器是通过Serial类来进行串口通信的。
// Receive & send methods from the SerialMonitor class.
private void send(String s) {
..
serial.write(s);
}
public void message(final String s) {
..
textArea.append(s);
}
我的建议是可以重复使用那段(Java)代码,但因为Serial
类是专门用来处理文本通信的,所以你需要把图像的字节数据转换成比如说Base64编码,使用这个库来实现,然后在电脑上解码。
如果传输速度很重要,并且有基于Arduino的二进制串口通信库,那你应该使用那个库。
更新
你可以通过前面提到的Serial
类从串口读取原始字节,方法如下:
...
Serial port = ...;
byte[] buffer = new byte[1024]; // 1KB buffer
OutputStream imageOutput = new FileOutputStream(...);
// Wait for the image.
while (port.available() > 0) {
int numBytes = port.readBytes(buffer);
if (numBytes > 0) {
imageOutput.write(buffer, numBytes);
}
}
imageOutput.flush();
imageOutput.close();
...