// Функция получения данных от сервера
void callback(const MQTT::Publish& pub)
{
Serial.print(pub.topic()); // выводим в сериал порт название топика
Serial.print(" => ");
Serial.print(pub.payload_string()); // выводим в сериал порт значение полученных данных
String payload = pub.payload_string();
if(String(pub.topic()) == "led/1") // проверяем из нужного ли нам топика пришли данные
{
int stled = payload.toInt(); // преобразуем полученные данные в тип integer
}
}
как-то так iot-manager-demo/IoTmanager4.ino at master · 4refr0nt/iot-manager-demo · GitHubНашел вот такую функцию
Подскажите, откуда вызывается назначаемая callback функция? Я посмотрел код клиента и похоже, что колбэк в итоге дергаем из основного цикла(client.loop(), который как раз сидит в основном цикле ), т.е. в данной реализации это не какой-то асинхронный процесс, который навесили на прерывание...callback функции..
как-бы ниоткуда, т.е. мы сами ее никогда не вызываем.Подскажите, откуда вызывается назначаемая callback функция?
Ну вот вы тоже говорите про client.loop(), а эта функция сидит в основном цикле. Т.е. как такового асинхронного вызова колбэк функции не происходит(может я не верно это понимаю)...[inline]client.loop()[/inline]..
можно просто сложить сообщение во временную переменную (FIFO=одно сообщение)..
..AsyncMQTT (на AsyncIO) ..
таких мануалов я не встречал, вам поможет изучение исходных кодов клиента (не важно - для микроконтроллеров или нет). Выберите язык в котором больше разбираетесь и найдите open source MQTT клиент, написанный на этом языке и изучайте.расскажите в кратце что происходит с пакетом данных, когда он долетает до ESP c MQTT клиентом на ней, в плоть до попадания в определенный пользователем колбэк.
если ничего нового не придумали, то это прерывания. Т.е. с таблицей векторов прерываний, то, что среди прерываний есть приоритеты - я в курсе, но я не слышал, чтоб эти функции обзывали как колбэк функции. Я только недавно с этим видом функций ознакомился,механизм обработки событий без ожидания т е по появлению
ок, только в нашем случае несколько "слоев реальности"Будут сложности - буду копать.
Отлично! Спасибо)ок, только в нашем случае несколько "слоев реальности"
- самый верхний, видимый слой - обмен по протоколу MQTT в вашем скетче
- средний слой - обертка функций Espressif SDK - это Arduino IDE
- следующий слой - стек TCP/IP в Espressif SDK (почти полностью разобран @pvvx)
- далее WiFi стек, который, в принципе, известен, но реализация в ESP8266 практически закрыта для нас (она частично в SDK и частично в BIOS чипа)