1

MQTT を使用して arduino から mosca-host に画像データ (jpeg) を送信したいと考えています。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;
  }

サーバー側では、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 ヘッダーも含まれますが、ゴミです。

助言がありますか?

4

2 に答える 2

1

PubSubClient のデフォルトの最大パケット サイズは 128 バイト ( http://pubsubclient.knolleary.net/api.html#configoptions ) で、送信できるメッセージのサイズが制限されます。

このサイズは MQTT メッセージ全体のためのものであり、MQTT ヘッダーとペイロードが含まれます。

これを変更しない限り、2048 バイトのバッファは一度に送信するには大きすぎます。

于 2016-06-15T14:53:46.313 に答える
0

最後に私はそれを理解しました。私の連結は間違っていました、それは次のようになるはずです:

 var temp = packet.payload;
 image = Buffer.concat([image,temp]);

とともに

var image = new Buffer(0);

最初に。

誰かがこの問題を抱えている場合に備えて。

于 2016-06-16T06:16:47.957 に答える