我想使用 MQTT 将(jpeg)图像数据从 arduino 发送到 mosca 主机。 在 arduino 上我使用 PubSubClient-library。图像数据存储在 SPI 连接的 FIFO 上。
Arduino 草图:
size_t len = myMemory.read_fifo_length();
static const size_t bufferSize = 2048;
static uint8_t buffer[bufferSize] = {0xFF};
while (stuff) {
size_t copy = (stuff < bufferSize) ? stuff : bufferSize;
myMemory.transferBytes(&buffer[0], &buffer[0], copy);
client.publish("transfer", &buffer[0], will_copy);
stuff -= copy;
}
在服务器端,我将 NodeJS 与 mosca 结合使用:
var image;
server.on('published', function(packet, client) {
if(packet.topic == "transfer")
image+=packet.payload;
if (packet.topic == "eof")
{
fs.writeFile(client.id+".jpg", image, (err) => {
if (err) throw err;
console.log('It\'s saved!');
});
}
});
到达的数据在保存到文件时甚至具有正确的 JFIF header ,但它是垃圾。
有什么建议吗?
最佳答案
PubSubClient 的默认最大数据包大小为 128 字节 ( http://pubsubclient.knolleary.net/api.html#configoptions ),这限制了您可以发送的消息的大小。
此大小适用于整个 MQTT 消息,因此包括 MQTT header 和有效负载。
除非您更改此设置,否则 2048 字节的缓冲区太大,无法一次性发送。
关于javascript - 通过 MQTT 将图像从 Arduino 发送到 MOSCA 主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37838003/