Публиковать данные json в mqtt
Я пытаюсь опубликовать данные JSON
в mqtt со следующим фрагментом кода
#include <Arduino_JSON.h>
JSONVar data;
data["temperature"] = temperature;
data["humidity"] = humidity;
data["pressure"] = pressure;
data["chipId"] = chipId;
String jsonString = JSON.stringify(data);
client.publish("esp32/data", jsonString);
Но возникает следующая ошибка
/home/ubuntu/Arduino/libraries/PubSubClient/src/PubSubClient.h:144:12: note: candidate expects 4 arguments, 2 provided
Multiple libraries were found for "PubSubClient.h"
Used: /home/ubuntu/Arduino/libraries/PubSubClient
Multiple libraries were found for "Wire.h"
Used: /home/ubuntu/.arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/Wire
Multiple libraries were found for "Adafruit_BME280.h"
Used: /home/ubuntu/Arduino/libraries/Adafruit_BME280_Library
Multiple libraries were found for "Adafruit_Sensor.h"
Used: /home/ubuntu/Arduino/libraries/Adafruit_Unified_Sensor
Multiple libraries were found for "SPI.h"
Used: /home/ubuntu/.arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/SPI
Multiple libraries were found for "Arduino_JSON.h"
Used: /home/ubuntu/Arduino/libraries/Arduino_JSON
Multiple libraries were found for "WiFi.h"
Used: /home/ubuntu/.arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/WiFi
Not used: /opt/arduino-1.8.10/libraries/WiFi
exit status 1
no matching function for call to 'PubSubClient::publish(const char [11], String&)'
Что здесь не так?
@roy, 👍1
1 ответ
Лучший ответ:
Какое ваше последнее сообщение об ошибке?
no matching function for call to 'PubSubClient::publish(const char [11], String&)'
Прочитайте документацию по методу publish()
в PubSubClient.
:
не публиковать (тема, полезная нагрузка)
Публикует строковое сообщение в указанной теме.
Параметры
topic — тема для публикации (const char[])
payload — сообщение для публикации (const char[])
Посмотрите на используемые вами параметры. Вы передаете String
как полезную нагрузку
. publish()
ожидает, что payload
будет char[]
(фактически то же самое, что и char*
) - строка языка C. Это ошибка, которую вы видите.
Читать документацию для String
. Как получить char*
из String
? Метод c_str()
.
Вам нужно изменить
client.publish("esp32/data", jsonString);
в
client.publish("esp32/data", jsonString.c_str());
Что касается других ваших предупреждений, похоже, что ваши библиотеки Arduino находятся в беспорядке с несколькими установленными конфликтующими библиотеками; если вы хотите избавиться от предупреждений, очистите свои библиотеки.
- esp32-cam публикует изображение в mqtt
- Не удалось подключиться к брокеру MQTT через esp8266/32 и pub/sub client
- Ошибка синтаксического анализа библиотеки ArduinoJson
- Драйверы для чипа последовательного порта CH9102X
- ESP32: отключить детектор отключения питания
- Преобразование строки в IP-адрес
- Какую плату выбрать в PlatformIO для ESP Wroom 32?
- Как подключиться к MQTT брокеру с помощью TLS?
можно ли преобразовать
json
вchar*
?, @roy@roy - я дал вам шаги для этого в ответе. Если вы хотите сделать это более непосредственно, вы используете библиотеку Arduino_JSON. Объявление метода
stringily()
находится по адресу https://github.com/arduino-libraries/Arduino_JSON/blob/master/src/JSON.h, и оно показывает толькоString
в качестве возврата, поэтому вы не можете сделайте это более непосредственно, используя эту библиотеку., @romkeyArduino_JSON
имеет эту ссылку https://github.com/arduino-libraries/Arduino_JSON, здесь не так много информации. Большинство примеров основаны наArduinoJSON
., @royМой комментарий ответил на ваш вопрос - возможно, я редактировал его, когда вы отвечали. Вы можете найти ответ в объявлении
stringify()
вjson.h
, @romkey