• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

mqtt как он в обще работает

Melanolik

New member
Народ, конечно понимаю что звучит глупо, но все же хочу понять как эта штука работает.

В сети вижу различные broker которые работают с mqtt.
Но как выглядит в логической схеме это все?

Заливаем скетч на nodemcu c ds18b20 к примеру.
Заливаем скрипт для подключения к wifi
Заливаем скрипт где происходит обработка и отправка данных по протоколу mqtt на сервер.

Не понимаю как перевязываются вот эти файлы с mqtt
nodemcu-firmware/ds18b20.lua at master · nodemcu/nodemcu-firmware · GitHub
 

guinpin

New member
Но как выглядит в логической схеме это все?
Заливаем скрипт где происходит обработка и отправка данных по протоколу mqtt на сервер.
Не понимаю как перевязываются вот эти файлы с mqtt
Вполне очевидно, что вы должны взять данные с термометра и отправить их брокеру.
Если вы заливаете "скрипт где происходит обработка и отправка данных", будет логично предположить, что вы знаете, что именно этот скрипт делает. Если нет, тогда начните изыскания именно с этого.
mqtt, это протокол, обеспечивающий доставку сообщений подписчикам. Откуда берутся данные и в какой "раздел" их отправлять ему пофигу.
Ваш вопрос слишком размытый. Если хотите помощи, давате больше конкретики - что хотите сделать, как именно и что не получается.
 

nikolz

Well-known member
Народ, конечно понимаю что звучит глупо, но все же хочу понять как эта штука работает.

В сети вижу различные broker которые работают с mqtt.
Но как выглядит в логической схеме это все?

Заливаем скетч на nodemcu c ds18b20 к примеру.
Заливаем скрипт для подключения к wifi
Заливаем скрипт где происходит обработка и отправка данных по протоколу mqtt на сервер.

Не понимаю как перевязываются вот эти файлы с mqtt
nodemcu-firmware/ds18b20.lua at master · nodemcu/nodemcu-firmware · GitHub
-----------------
Чтобы ответить Вам на вопрос "Почему Вы не понимаете как перевязываются эти файлы"
желательно знать что же Вы знаете в этой области знаний.
-----------------------------------------------------------------------
Полагаю, что лишь лень не позволяет Вам найти ответ на Ваш вопрос в интернете.
Но возможно, что ошибаюсь, кроме лени есть еще какие-то причины.
 

Archii

New member
Дабы не создавать новые темы, да может и помогут сопутствующие ответы автору данной темы, хочу продолжить разбор полетов по MQTT mosquitto. Есть ESP NodeMCU V3.
В ARDUINO IDE при установке библиотеки (BubSubClient) в примерах есть скетч для ESP. С отправкой брокеру сообщений от ESP ввиде переменных и дальнешей их обработкой вопросов нет.
В скетче для ESP мы подписывается на топик (например для переключения реле). Есп исправно передпет в ком порт информацию, о том, что по подписке на "InTopic" принято сообщение XXXX ну или 1 или 0 для реле (допустим от mqttSPY).
Вопрос: Как конкретно это значение XXXX присвоить параметру для дальнейшей работы с ним. Т.е. там есть конструкция for, которая посимвольно выводит в Serial.print это значение. Например на ESP две релюхи и в скетче оформлена подписка на InTopc/relay1 и InTopc/relay2. Как присвоить значение relay1 и relay2?
Вот пример отправки сообщения:
Код:
client.publish(LightSensorData, String(lightSensor).c_str(), true);
client.publish(PIR_topic, String(val).c_str(), true);
Помогите с конструкцией сборки (получения) сообщения.
 

Сергей_Ф

Moderator
Команда форума
@Archii можете разобрать ответ с помощью strtok, например. Дальше либо сравниваете строки, либо копируете их куда надо. Если только цифры 0 и 1 нужны, то всё проще некуда, можете сами разобрать строку. И присвоить значение принятого символа минус символ '0'.
Код:
relay1 = charFromMQTT-'0';
Код:
  void mqttMessageReceiver(char* topic, byte* payload, unsigned int length) {
payload[length] = '\0'; // добавляем нормальный конец строки в payload

  char *args[7];
  byte i = 0;
  args[i] = strtok(topic, "/");
  do {  args[++i] = strtok(NULL, " /");
     } while (args[i] != NULL);
   fromMqttMessage.code = strtoul((char *)payload , NULL, 10);           // возвращаем в ответ код карты
   fromMqttMessage.way =  strcmp(args[2], eepromData.camera[wayIn] ) ? strcmp(args[2], eepromData.camera[wayOut] ) ? noWay : wayOut : wayIn;

  if ( topic[0] == REQUEST_Verification ) { // verification respond
     fromMqttMessage.req = args[4][0];                     // возвращаем результат проверки (s=success, t=timeout, u=unknown key)

      DEBUG_LEVEL(FULL) { Serial.printf(F("%s:"), args[4]); }

      }

}
 
Последнее редактирование:
Сверху Снизу