Arduino Uno — сообщение MQTT с использованием PUBSUB на ESP8266

Я пытаюсь написать код, включающий сообщения MQTT для управления реле ESP8266 (устройством Sonoff), используя библиотеку PubSub.

По какой-то неизвестной мне причине - не отправляются сообщения размером более 99 символов. Это известное ограничение? можно ли это изменить?

void pub_msg(char *inmsg){
        char tmpmsg[255];
        // sprintf(tmpmsg,"[Cl:oc:k] [%s] %s",deviceTopic, inmsg);   ---> wish to add a time stamp
        sprintf(tmpmsg,"[][%s] %s",deviceTopic, inmsg);  ---> using this line just to find that 99 chars sent OK
        Serial.print("published MSG:");
        Serial.println(tmpmsg);
        Serial.print("Total chars:");
        Serial.println(strlen(tmpmsg));
        client.publish(msgTopic, tmpmsg);

}

, 👍0


1 ответ


Лучший ответ:

2

Максимальный размер пакета MQTT в PubSubClient составляет 128 байт. Ведь вся информация заголовка MQTT оставляет для сообщения только 99 байт.

Вы можете изменить его, отредактировав файл PubSubClient.h:

#ifndef MQTT_MAX_PACKET_SIZE
#define MQTT_MAX_PACKET_SIZE 128
#endif

Как сказано в PubSubClient README.md:

  • Максимальный размер сообщения, включая заголовок, по умолчанию составляет 128 байт. Это можно настроить с помощью MQTT_MAX_PACKET_SIZE в PubSubClient.h.
,

Можете ли вы указать его местоположение?, @Guy . D

Местоположение файла или местоположение внутри файла?, @Majenko

извините- местоположение файла, @Guy . D

Он находится там, где вы его установили., @Majenko

Является ли это частью библиотеки pubsub?, @Guy . D

Если это та же библиотека, о которой я знаю, то да., @Majenko

какое допустимое значение?, @Guy . D

Все, что влезет в доступную память. Определите, какой размер вам понадобится., @Majenko