Запросы HTTP GET и HTTP POST с помощью ESP8266 NodeMCU и Arduino IDE


В этой статье мы рассмотрим как делать запросы HTTP GET и HTTP POST с помощью платы ESP8266 NodeMCU и Arduino IDE. Мы рассмотрим примеры того, как получать значения, публиковать объекты JSON, закодированные URL-адреса и многое другое.

Запросы HTTP GET и HTTP POST с помощью ESP8266 NodeMCU и Arduino IDE

Необходимые компоненты

  1. NodeMCU ESP8266 (купить на AliExpress).
  2. Плата Raspberry Pi (купить на AliExpress).
  3. Карта MicroSD – 16 ГБ, класс 10.
  4. Блок питания Raspberry Pi (5 В 2,5 А).
  5. Макетная плата.
  6. Соединительные провода.

Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158

Методы HTTP-запросов: GET и POST

Протокол передачи гипертекста (HTTP) работает как протокол запроса-ответа между клиентом и сервером. Вот пример его работы:

  • ESP8266 (клиент) отправляет HTTP-запрос на Raspberry Pi, на котором запущен Node-RED (сервер);
  • Сервер возвращает ответ ESP8266 (клиенту);
  • Наконец, ответ содержит информацию о статусе запроса и может также содержать запрошенный контент.

HTTP GET

GET используется для запроса данных из указанного ресурса. Часто используется для получения значений из API.

Например, у вас может быть:

Обратите внимание, что строка запроса (name = temperature и value = value1) отправляется в URL-адресе HTTP-запроса GET.

Или вы можете использовать простой запрос для возврата значения или объекта JSON, например:

(При использовании HTTP GET данные видны всем, кто находится в URL-запросе.)

HTTP POST

POST используется для отправки данных на сервер для создания/обновления ресурса. Например, для публикации показаний датчиков на сервере.

Данные, отправленные на сервер с помощью POST, сохраняются в теле запроса HTTP:

В теле запроса вы также можете отправить JSON-объект:

(При использовании HTTP POST данные не видны в URL-запросе. Однако, если они не зашифрованы, они все равно видны в теле запроса.)

HTTP GET/POST с ESP8266

В этом руководстве мы рассмотрим следующие сценарии:

  1. ESP8266 HTTP GET: Значение или запрос в URL.
  2. ESP8266 HTTP GET: объект данных JSON или простой текст.
  3. ESP8266 HTTP POST: URL-кодирование, объект данных JSON, простой текст.

Предпосылки

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

Arduino-IDE: среда разработки

Мы будем программировать плату ESP8266 NodeMCU с помощью Arduino IDE, поэтому убедитесь, что у вас в ней установлено дополнение для работы с ESP8266.

Библиотека Arduino_JSON

Вам также необходимо установить библиотеку Arduino_JSON. Вы можете установить эту библиотеку в менеджере библиотек Arduino IDE. Просто перейдите в  Sketch  >  Include Library  >  Manage Libraries  и найдите имя библиотеки следующим образом:

Установка библиотеки Arduino_JSON

Подготовка Node-RED (необязательно)

В качестве примера мы создадим веб-сервис с Raspberry Pi и Node-RED, который будет работать как веб-сервис (как API). По сути, вы будете делать запросы HTTP GET и HTTP POST к вашему Raspberry Pi, чтобы получать значения или обновлять их. Вы можете использовать любой другой веб-сервис.

Если у вас не установлен Node-RED, следуйте следующим инструкциям:

Запустив Node-RED на вашем Raspberry Pi, перейдите на IP-адрес вашего Raspberry Pi, а затем добавьте :1880.

Интерфейс Node-RED должен открыться. Вы можете просто импортировать окончательный поток:

Интерфейс Node-RED для нашего проекта

Перейдите в Меню > Импорт и скопируйте следующее в буфер обмена, чтобы создать поток Node-RED.

Другие веб-сервисы или API

В этом руководстве ESP8266 выполняет HTTP-запросы к Node-RED, но вы можете использовать эти примеры с другими сервисами, такими как ThingSpeak, IFTTT.com (сервис веб-хуков), OpenWeatherMap.org, сервер PHP и т. д. Все примеры, представленные в этом руководстве, также будут работать с другими API.

Подводя итог, чтобы сделать это руководство совместимым с любым сервисом, вам нужно найти документацию API сервиса. Затем вам нужно имя сервера (URL или IP-адрес) и параметры для отправки в запросе (URL-путь или тело запроса). Наконец, измените наши примеры для интеграции с любым API, который вы хотите использовать.

1. ESP8266 HTTP GET: значение или запрос в URL

В первом примере ESP8266 сделает запрос HTTP GET для обновления показаний в сервисе. Этот тип запроса также может использоваться для фильтрации значения, запроса значения или возврата объекта JSON.

ESP8266 HTTP GET: значение или запрос в URL

Код ESP8266 HTTP GET с Arduino IDE

После установки необходимых дополнений и библиотек платы скопируйте следующий код в Arduino IDE, но пока не загружайте его. Вам нужно внести некоторые изменения, чтобы он заработал у вас.

Настройка сетевых учетных данных

Измените следующие строки с вашими сетевыми учетными данными: SSID и пароль. Код хорошо прокомментирован, где вы должны внести изменения.

Установка имени вашего сервера

Вам также необходимо ввести свое доменное имя или IP-адрес Node-RED, чтобы ESP опубликовал показания на вашем собственном сервере.

Теперь загрузите код на свою плату, и он должен сразу же заработать.

Прочитайте следующий раздел, если вы хотите узнать, как выполнить HTTP-запрос GET.

HTTP-запрос GET

В функции loop() вы фактически делаете HTTP-запрос GET каждые 5 секунд с образцами данных:

Примечание: если Node-RED требует аутентификации, раскомментируйте следующую строку и вставьте имя пользователя и пароль Node-RED.

ESP8266 делает новый запрос по следующему URL-адресу, чтобы обновить поле датчика новой температурой.

Затем следующие строки кода сохраняют HTTP-ответ от сервера.

Тестирование работы

Когда ваша плата запустит новый скетч, откройте окно отладки Node-RED. Вы увидите, что значения выборки печатаются успешно (24.37).

Тестирование работы HTTP GET в ESP8266

2. ESP8266 HTTP GET: объект данных JSON или простой текст

В следующем примере показано, как сделать запрос HTTP GET для получения объекта JSON и декодировать его с помощью ESP8266. Многие API возвращают данные в формате JSON.

ESP8266 HTTP GET: объект данных JSON или простой текст

Скопируйте следующий скетч в Arduino IDE (введите свой SSID и пароль):

Установка имени вашего сервера

Введите свое доменное имя или IP-адрес Node-RED, чтобы ESP запросил показания датчика, которые будут извлечены в объекте JSON.

Теперь загрузите код на свою плату.

HTTP-запрос GET (объект JSON)

В функции loop() вызовите функцию httpGETRequest() для выполнения HTTP-запроса GET:

Функция httpGETRequest() делает запрос к адресу Node-RED http://192.168.1.106:1880/get-sensor и извлекает строку с объектом JSON.

Примечание: если Node-RED требует аутентификации, раскомментируйте следующую строку и вставьте имя пользователя и пароль Node-RED.

Декодирование объекта JSON

Чтобы получить доступ к значениям, декодируйте объект JSON и сохраните все значения в массив sensorReadingsArr.

Демонстрация HTTP GET

После загрузки кода откройте Arduino IDE, и вы увидите, что он получает следующие данные JSON:

Затем вы печатаете декодированный объект JSON в последовательном мониторе Arduino IDE.

Демонстрация HTTP GET в окне монитора последовательной связи

В целях отладки запрошенная информация также выводится в окне отладки Node-RED.

Демонстрация HTTP GET в окне отладки Node-RED

3. ESP8266 HTTP POST: URL-кодирование, объект данных JSON, простой текст

Наконец, вы узнаете, как сделать HTTP-запрос POST с помощью ESP8266.

В этом примере ваш ESP8266 может делать запросы HTTP POST, используя три различных типа запросов тела: URL-кодированный, объект JSON или простой текст. Это наиболее распространенные методы, и они должны интегрироваться с большинством API или веб-сервисов.

ESP8266 HTTP POST: URL-кодирование, объект данных JSON, простой текст

Скопируйте следующий скетч в Arduino IDE (введите свой SSID и пароль):

Установка имени вашего сервера

Введите свое доменное имя или IP-адрес Node-RED, чтобы ESP опубликовал образцы показаний датчиков.

Теперь загрузите код на свою плату.

HTTP POST URL-адрес закодирован

Чтобы сделать HTTP POST-запрос типа URL-кодированный, например так:

Вам необходимо запустить следующее в коде Arduino:

Примечание: если Node-RED требует аутентификации, раскомментируйте следующую строку и вставьте имя пользователя и пароль Node-RED.

HTTP POST JSON-объект

Или, если вы предпочитаете сделать HTTP-запрос POST с объектом JSON:

Используйте следующий фрагмент:

HTTP-обычный текст

Если вы хотите отправить простой текст или значение, используйте следующее:

Примечание: используемый нами поток Node-RED (веб-сервис) не настроен на прием простого текста, но если API, который вы планируете интегрировать, принимает только простой текст или значение, вы можете использовать предыдущий фрагмент.

Демонстрация HTTP POST

В окне отладки Node-RED вы можете увидеть, что ваш ESP отправляет HTTP-запрос POST каждые 5 секунд.

Демонстрация HTTP POST в окне отладки Node-RED

В этом примере эти значения также отправляются на 3 датчика и отображаются на панели инструментов Node-RED:

Демонстрация HTTP POST в окне отладки Node-RED в панели инструментов Node-RED

Подведение итогов

В этом руководстве вы узнали, как интегрировать ESP8266 с онлайн-сервисами с помощью запросов HTTP GET и HTTP POST.

HTTP GET и HTTP POST обычно используются в большинстве веб-сервисов и API. Они могут быть полезны в ваших проектах для: публикации показаний датчиков в веб-сервисе, например IFTTT, ThingSpeak; на веб-сервере ESP8266 или Raspberry Pi или на вашем собственном сервере; для запроса данных из Интернета или из вашей базы данных и многого другого.

(Проголосуй первым!)
Загрузка...
74 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *