我的工作有些问题.. 我已经使用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
答案 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 IDE的Serial 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();
...