如何从ComPort获取图像

时间:2014-03-04 07:10:11

标签: java python jpeg

我的工作有些问题.. 我已经使用Arduino UNO在Adafruit教程(learn.adafruit.com/ttl-serial-camera/overview)的帮助下成功地将TTL串行摄像机图像存储到MicroSD卡,但是当我通过Zigbee发射器传输图像时,在Zigbee(Zigbee)接收器)即时接收随机字。我认为它的ASCII。 我想将从comport接收的图像保存到我的PC文件夹中。 可能吗? 我在一些论坛中看到过使用java或python代码,但我无法理解如何使用它? Read image data from COM7 port in Java

2 个答案:

答案 0 :(得分: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。如果您还没有串行模块,则可能需要先安装它。我不熟悉你需要通过com-port发送图像的Arduino-C-dialect ......

答案 1 :(得分:0)

Arduino IDESerial Monitor正在使用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类是专为纯文本通信而设计的,因此您需要将图像字节编码为例如使用this library进行Base64编码并在PC上对其进行解码。

如果传输速度很重要,并且存在基于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();
...