MQTT получает данные датчиков из разных тем, но попадает в одну полезную нагрузку - PullRequest
1 голос
/ 30 октября 2019

В настоящее время у меня есть 2 показания датчиков, поступающие как одна полезная нагрузка из 2 тем (или это выглядит так), что было бы рекомендуемым способом разделить эту одну полезную нагрузку на 2 переменные (температура, влажность);

Показания датчиков относятся к разным темам.

Я испробовал все способы, с помощью которых человек с небольшим опытом мог бы использовать циклы, чтобы попытаться записать половину данных на последовательный монитор, но безрезультатно.

Я попытался ввести тему в эту функцию, но она не скомпилировалась.

void messageReceived(MQTTClient*client, char topic[], char payload[], int payload_length) {
  for (byte i=0;i<6;i++){ 
    Serial.print(payload[i]);
 }
}

вывод на последовательном мониторе будет

23.4555.33

, если я поставлю println послецикл for я получаю

23.45
55.33

Должен ли я иметь 2 void messageReceived? один для температуры, а другой для влажности?

скажем

messageReceivedtemp()

messageReceivedHum()

1 Ответ

0 голосов
/ 30 октября 2019

Вы не получаете одно сообщение, вы получаете два отдельных сообщения.

У вас 2 проблемы с вашим кодом.

  1. Сначала вы не проверяете тему о том, чтосообщение приходит, поэтому вы не знаете, какое значение является каким.
  2. Вы просто передаете значения непосредственно в последовательный порт без проверки длины. Вы используете фиксированное значение 6, но вы должны использовать значение payload_length.

Код должен выглядеть примерно так:

void messageReceived(MQTTClient*client, char topic[], char payload[], int payload_length) {

  if (strcmp(topic, "temp") == 0) {
    //message arrived on the 'temp' topic
    Serial.print("temp: ");
  } else if (strcmp(topic, "hum") == 0 {
    //message arrived on the 'hum' topic
    Serial.print("hum: ");
  }

  for (int i=0;i<payload_length;i++){ 
    Serial.print(payload[i]);
  }
  Serial.println();
}
...