Частота получения данных с сайта

Я написал код, который взаимодействует с моим веб-сайтом для получения данных для включения или выключения реле 5 В. Я запускаю код каждую секунду, чтобы убедиться, что он работает в режиме реального времени. Есть ли более эффективный способ указать Arduino получать данные всякий раз, когда они изменяются, а не непрерывный запрос GET.

// Отправляем HTTP GET запрос
  int httpResponseCode = http.GET();
  
  if (httpResponseCode>0) {
    Serial.print("HTTP Response code: ");        Serial.println(httpResponseCode);        String payload = http.getString();
        StaticJsonDocument<2000> doc;             DeserializationError error = deserializeJson(doc, payload);
        if (error) {              Serial.print(F("deserializeJson() failed: "));              Serial.println(error.c_str());              return;            }
        
        String status = doc["status"];
        Serial.println(status);
         if ( status == "ON" ) {
           digitalWrite(ledPin, LOW);
         } else {
           digitalWrite(ledPin, HIGH);
         }
  }

, 👍1

Обсуждение

вы можете использовать код ответа, чтобы указать состояние реле, @jsotola

Вместо этого используйте веб-сокеты. Или MQTT, если вы можете запустить свой собственный сервер или использовать бесплатный общедоступный сервер..., @Majenko


1 ответ


Лучший ответ:

3

Ваши два лучших варианта: MQTT и WebSockets.

Оба открывают долгоживущее TCP-соединение, которое ESP8266 и браузер могут использовать для передачи и получения данных. И то, и другое позволит избежать постоянного опроса, чтобы узнать, есть ли новая команда.

Для MQTT требуется внешний брокер. Существуют сервисы MQTT с бесплатными уровнями, которые вы можете использовать для этого или запускать один локально — Eclipse Mosquitto — популярный брокер MQTT, Raspberry Pi. MQTT особенно полезен для сетей с несколькими издателями и подписчиками (это протокол «pubsub») и, вероятно, является излишним, если у вас есть только одно устройство и конечная точка.

Можно использовать MQTT из браузера с помощью Javascript. Клиент Paho Javascript MQTT работает хорошо. ESP8266 установит соединение с брокером MQTT, подпишется на имя темы и установит функцию обратного вызова, которая будет вызываться при публикации данных в этой теме. Браузер также установит соединение с брокером MQTT и опубликует сообщение в теме при ответе на события от пользователя.

WebSockets позволит ESP8266 и браузеру установить между собой полнодуплексное соединение. ESP8266 создаст сервер веб-сокетов, к которому будет подключаться браузер. ESP8266 будет проверять данные в веб-сокете во время выполнения кода в loop() и собирать сообщения из браузера.

И то, и другое работает легко, если оба ваших устройства находятся в одной сети (например, дома). Если ваш браузер находится за пределами сети, он не сможет напрямую взаимодействовать с ESP8266.

MQTT имеет то преимущество, что сервер MQTT, расположенный за пределами сети (а не работающий локально на Raspberry Pi), позволит браузеру и ESP8266 взаимодействовать друг с другом через него. WebSockets потребует использования прокси-сервера (существуют модули для популярных веб-серверов, таких как NGINX и Apache, но для настройки требуется контроль над веб-сервером). Если вы хотите использовать браузер только для управления ESP8266, когда они оба находятся в одной сети, вам не нужно об этом беспокоиться.

,