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) зависит от пользовательского ввода, о котором я упоминал в начале. Спасибо!
@GonzaloN, 👍1
Обсуждение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)
}
,
@david
Смотрите также:
- Как подключиться к MQTT брокеру с помощью TLS?
- Преобразование byte* в int в Arduino
- esp32-cam публикует изображение в mqtt
- ESP8266 глубокий сон и MQTT
- ESP-01 неправильно просыпается после глубокого сна
- Приведение от 'char*' к 'char' теряет точность
- Публиковать данные json в mqtt
- Не удалось подключиться к брокеру MQTT через esp8266/32 и pub/sub client
Не зная больше о структуре вашей программы и объектов, на это невозможно ответить. Используете ли вы полиморфизм для своих объектов? Есть ли у вас какое-то хранилище, где эти объекты хранятся и доступны? Есть ли у вас какая-то форма списка или массива тем и их отношения к объектам?, @Majenko