Не принимает значение топика MQTT
- Войдите на сайт для отправки комментариев
Чт, 14/12/2017 - 22:42
Помогите разобраться. Arduino Mega + W5100. Отправляю топики с сервера, в сериал выводятся только названия, значений нет.
void callback(char* topic, byte* payload, unsigned int length) {
{
Serial.println ("");
Serial.println ("-------");
Serial.println ("New callback of MQTT-broker");
payload[length] = '\0';
String strTopic = String(topic);
String strPayload = String((char*)payload);
Serial.println();
Serial.print (strTopic); //это выводится в сериал
Serial.print (" ");
Serial.println (strPayload); // это не выводится
Serial.println ("-------");
Serial.println ("");
if (strTopic == "zal/ZalSvet/ZalButton") { // состояние кнопки
if (strPayload == "0") {ZalButton = 0;} // выкл
if (strPayload == "1") {ZalButton = 1;} // вкл
if (strPayload == "2") {ZalButton = 2;} // авто
}
При компиляции вылазит такой warning:
C:\Users\User\Desktop\arduino\arduino.ino: In function 'void setup()':
C:\Users\User\Desktop\arduino\arduino.ino:169:28: warning: invalid conversion from 'void (*)(char*, byte*, unsigned int) {aka void (*)(char*, unsigned char*, unsigned int)}' to 'void (*)(char*, uint8_t*, uint32_t) {aka void (*)(char*, unsigned char*, long unsigned int)}' [-fpermissive]
client.setCallback(callback); // Устанавливает функцию обратного вызова сообщения
^
In file included from C:\Users\User\Desktop\arduino\arduino.ino:21:0:
C:\Users\User\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:121:18: note: initializing argument 1 of 'PubSubClient& PubSubClient::setCallback(void (*)(char*, uint8_t*, uint32_t))'
PubSubClient& setCallback(MQTT_CALLBACK_SIGNATURE);
^
Так попробуй:
void callback(char* topic, byte* payload, uint32_t length) { Serial.print(F("Topic: ")); Serial.println(topic); if(length) { Serial.print(F("Payload: ")); for(uint32_t i=0;i<length;i++) { Serial.print((char)payload[i]); } Serial.println(); } }Если тебе надо в строку payload сохранять, то:
void callback(char* topic, byte* payload, uint32_t length) { Serial.print(F("Topic: ")); Serial.println(topic); String strPayload; if(length) { strPayload.reserve(length + 1); for(uint32_t i=0;i<length;i++) { strPayload += (char) payload[i]; } } Serial.print(F("Payload: ")); Serial.println(strPayload); }