ESP8266 уроки. HTTP-запрос GET

Разработка проектов под заказ

Цель данного урока - объяснить, как выполнять HTTP-запрос GET с помощью ESP8266. Примеры из этого урока были выполнены с использованием NodeMCU – одна из недорогих плат и самая простая в использовании среди линейки ESP8266.

Описание скетча отправки GET запроса с помощью ESP8266.

Во-первых, нам нужно подключить необходимые библиотеки. Естественно, нам нужна библиотека ESP8266WiFi, которая предоставляет нам методы для подключения к сети Wi-Fi.

Затем понадобится библиотека ESP8266HTTPClient, которая предоставляет методы для отправки HTTP-запросов.

#include <esp8266wifi.h>
#include <esp8266httpclient.h>

Чтобы подключиться к сети Wi-Fi, нам потребуются учетные данные. Итак, мы определим две глобальные переменные, содержащие имя сети (SSID) и пароль.

const char* ssid = "NetworkName";
const char* password = "NetworkPassword";

Внимание, используйте учетные данные вашей сети.

Теперь мы укажем функцию настройки, в которой подключимся к сети. Но сначала откроем последовательное соединение, чтобы мы могли вывести результат работы программы.

Затем вызываем метод begin для объекта WiFi, передавая в качестве аргументов SSID (имя сети) и переменную пароля, указанные ранее. Это инициализирует подключение к сети. Более подробная информация о том, как подключиться к сети Wi-Fi с помощью ESP8266, объяснял в предыдущем уроке.

Также инициализируем работу с последовальным портом, чтобы вывести результат работы программы. Полный код функции setup() Arduino приведён ниже.

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (--tries && WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  if (WiFi.status() != WL_CONNECTED)
  {
    Serial.println("Non Connecting to WiFi..");
  }
  else
  {
    // Иначе удалось подключиться отправляем сообщение
    // о подключении и выводим адрес IP
    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
  }
}

Код, который добавим в этом уроке.

Код запроса будет указан в функции основного цикла loop() Arduino. Сначала мы объявляем объект класса HTTPClient, который назовем http. Этот класс предоставляет методы для создания и отправки HTTP-запроса.

HTTPClient http;

После этого мы вызовем метод begin для объекта http и передадим URL-адрес, к которому хотим подключиться, и сделаем HTTP-запрос GET.Указанный здесь целевой веб-сайт реализует фиктивной API для тестирования и создания прототипов.будет возвращать полезную нагрузку JSON в качестве ответаОбратите внимание, что конечный результат, которого мы достигнем, будет возвращать полезную нагрузку JSON в качестве ответа, имитируя возможную «пользовательскую» структуру данных. Вы можете напрямую получить доступ к URL-адресу и проверить результат в веб-браузере. Позже, при тестировании кода ESP8266, мы должны получить такой же ответ.

http.begin("http://jsonplaceholder.typicode.com/users/1");

Затем отправляем запрос, вызывая метод GET для объекта http.

Затем отправляем запрос, вызывая метод GET для объекта http. Этот метод вернет статус операции, который важно сохранить для обработки ошибок. Если значение больше 0, то это стандартный код HTTP. Если значение меньше 0, то это ошибка клиента, связанная с подключением. Все доступные коды ошибок для этого метода приведены здесь.

int httpCode = http.GET();

Итак, если код больше 0, мы можем получить полезную нагрузку ответа, вызвав метод getString для объекта http. Ответ возвращается в виде строки, которую выведим в монитор порта.

String payload = http.getString();
Serial.println(payload);

Наконец, вызовем метод end. Это очень важно для закрытия TCP-соединения и освобождения ресурсов.

http.end();

Окончательный полный код показан ниже. Обратите внимание, что мы добавили небольшую задержку в 30 секунд между каждым выполнением основного цикла loop(), чтобы избежать постоянного опроса сервера.

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

const char* ssid = "NetworkName";
const char* password = "NetworkPassword";
byte tries = 10;  // Попыткок подключения к точке доступа

void setup() {
  Serial.begin(115200);

  WiFi.begin(ssid, password);

  while (--tries && WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  if (WiFi.status() != WL_CONNECTED)
  {
    Serial.println("Non Connecting to WiFi..");
  }
  else
  {
    // Иначе удалось подключиться отправляем сообщение
    // о подключении и выводим адрес IP
    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
  }

}

void loop() {

  if (WiFi.status() == WL_CONNECTED) { //Проверьте состояние подключения Wi-Fi

    HTTPClient http;  //Объявите объект класса HttpClient

    http.begin("http://jsonplaceholder.typicode.com/users/1");  //Укажите адрес назначения запроса
    int httpCode = http.GET();                                  //Отправьте запрос

    if (httpCode > 0) { //Проверьте код возврата

      String payload = http.getString();   //Получите полезную нагрузку для ответа на запрос
      Serial.println(payload);             //Распечатайте полезную нагрузку ответа

    }

    http.end();   //Закрыть соединение

  }

  delay(30000);    //Ждем 30 сек.
}

Тестирование HTTP-запрос GET.

Чтобы протестировать код, просто скомпилируйте его и загрузите на свое устройство с помощью Arduino IDE.

После завершения процедуры загрузки откройте последовательный монитор IDE и дождитесь установления соединения c Wi-Fi. После выполнения этой процедуры ESP8266 должен начать периодически отправлять HTTP-запрос GET на сервер.

ESP8266 должен начать периодически отправлять HTTP-запрос GET на сервер

Ожидаемый результат программы показан на рисунке ниже. Ответ, выведенный в последовательном мониторе порта, соответствует полезной нагрузке JSON, возвращаемой сервером. ESP8266 будет продолжать выполнять HTTP-запрос GET каждые 30 секунд.

ESP8266 будет продолжать выполнять HTTP-запрос GET каждые 30 секунд.

Наконец, важно учитывать, что микроконтроллер имеет ограниченное количество ресурсов и, следовательно, не может обрабатывать очень большие ответы от сервера. Таким образом, не стоит ожидать, что он будет отправлять и обрабатывать запросов к сайтам, которые возвращают много информации, как это делают обычные браузеры.

Понравился ESP826 уроки. HTTP-запрос GET? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

Фотографии к статье

Файлы для скачивания

Скетч отправки GET запроса с помощью ESP8266 Скетч отправки GET запроса с помощью ESP8266.ino2 Kb 8 Скачать

Комментарии

Ваше Имя*

Марат

Гость: Марат (9 августа, 2021 в 19:17)

Очень интересно. Давно искал уроки по esp8266/