如何从串口获取图像

0 投票
2 回答
1817 浏览
提问于 2025-04-17 20:44

我在工作中遇到了一些问题。 我用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();
...

撰写回答