ESP8266 Arduino MQTT обратный вызов с динамическими темами

У меня есть программа, которая в зависимости от пользовательского ввода создает один или несколько объектов, которые будут публиковать данные брокеру MQTT, каждый из которых имеет свою тему. Это уже сделано. ESP8266 также имеет подписку на те же темы, которые он публикует. Теперь проблема в том, что мне нужно создать динамический обратный вызов в ESP8266, чтобы прочитать все возможные темы прибытия, на которые подписался ESP8266, и у меня возникли проблемы с этим.

Модель функции обратного вызова такова:

void MQTTcallback(char* topic, byte* payload, unsigned int length) {


// поступило сообщение handle

}

Возможными темами могут быть:

ObjectTL/TL_1

ObjectTL/TL_2

ObjectTL/TL_3

...

ObjectTL/TL_X

Число (TL_X) зависит от пользовательского ввода, о котором я упоминал в начале. Спасибо!

, 👍1

Обсуждение

Не зная больше о структуре вашей программы и объектов, на это невозможно ответить. Используете ли вы полиморфизм для своих объектов? Есть ли у вас какое-то хранилище, где эти объекты хранятся и доступны? Есть ли у вас какая-то форма списка или массива тем и их отношения к объектам?, @Majenko


1 ответ


1

Я думаю, что использование sscanf может помочь вам

void MQTTcallback(char* topic, byte* payload, unsigned int length) {

  sscanf(data, "ObjectTL/TL_%d", dynamicTopicName);
  // обработайте поступившее сообщение
  your_dynamic_function(dynamicTopicName,byte* payload, unsigned int length)

}
,