通过MQTT将图像从Arduino发送到MOSCA主机
我想使用MQTT将(jpeg)图像数据从arduino发送到mosca主机。 在arduino我使用PubSubClient库。 图像数据存储在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; }
而在服务器端,我使用带有mosca的NodeJS:
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头,但它是垃圾。
有什么build议么?
PubSubClient的默认最大数据包大小为128字节( http://pubsubclient.knolleary.net/api.html#configoptions ),它限制了您可以发送的消息的大小。
这个大小是针对整个MQTT消息的,因此包括MQTT头和有效载荷。
除非你改变了这个,否则2048字节的缓冲区太大了,无法一次发送。
最后我明白了。 我的concat是错的,应该是这样的:
var temp = packet.payload; image = Buffer.concat([image,temp]);
与一个
var image = new Buffer(0);
在开始。
以防万一有这个问题。