Частота получения данных с сайта
Я написал код, который взаимодействует с моим веб-сайтом для получения данных для включения или выключения реле 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);
}
}
@motion channel, 👍1
Обсуждение1 ответ
Лучший ответ:
Ваши два лучших варианта: 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, когда они оба находятся в одной сети, вам не нужно об этом беспокоиться.
- HTTP GET запрос с использованием Arduino Uno и ESP8266
- Как составить URL-адрес HTTP-запроса GET с параметрами ключ/значение
- ESP8266 Ошибка неверного запроса 400
- ESP8266 отправляет веб-страницу клиенту, но html-коды отображаются в браузере вместо веб-страницы
- Проанализировать большой ответ json с помощью ESP8266
- ESP8266 не отвечает через случайные промежутки времени
- Код запроса ESP8266 GET -1
- esp32 http client response только 200 не получил данные после этого
вы можете использовать код ответа, чтобы указать состояние реле, @jsotola
Вместо этого используйте веб-сокеты. Или MQTT, если вы можете запустить свой собственный сервер или использовать бесплатный общедоступный сервер..., @Majenko