通过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); 

在开始。

以防万一有这个问题。