Библиотека для выполнения HTTP-запросов с помощью модуля Wi-Fi ESP8266 и Arduino.

Библиотека для выполнения HTTP-запросов с помощью модуля Wi-Fi ESP8266 и Arduino.

Библиотека для выполнения HTTP-запросов с помощью модуля Wi-Fi ESP8266 и Arduino.

Простой способ отправки информации на микроконтроллер и обратно — централизовать ее на веб-сервере. Хоть это и не такой эффективный метод, как, например, прямой доступ к базе данных, но он достаточно эффективен, особенно если рассматривать проект на базе микроконтроллера и добавить к нему преимущества повсеместности (данные в облаке) и простоты (это могут обрабатываться как текстовая информация и заказы).Отправка информации с помощью этой системы может состоять из выполнения HTTP-запросов POST и ее получения путем анализа содержимого ответа на HTTP-запрос GET.

Содержание

    El ESP8266 Wi-Fi-модуль Это очень экономичный вариант с производительностью, очень подходящей для использования с микроконтроллерами и очень простой в использовании для работы с AT-командами.

    Чтобы систематизировать его использование с HTTP-запросами, я разработал небольшую библиотеку, которая поддерживает потребности моего проекта устройства управления сном (который я назвал SleepManager), поскольку его инфраструктура основывается на веб-сервере, что позволяет расширять его до объекта. IoT в качестве облачный сервис. Несложно добавить в библиотеку и другие сервисы, такие как UDP-запросы, например, для синхронизация времени по NTP хотя, как я объясняю в связанном тексте, это не критично для моих нужд, и я могу приемлемо решить эту проблему с помощью HTTP-запроса к веб-странице, подготовленной для этой цели, как я показываю в примере использования этой библиотеки.

    Работа библиотеки основана на отправке АТ-команд при доступности устройства и повторении их (с небольшой задержкой) в случае ошибки, которая интерпретируется как недоступность (успешно, путем тестирования) например из точки доступа WiFi или сервер, с которым осуществляется консультация.

    Библиотека использует тот факт, что WiFi-модуль ESP8266 возвращает код +IPD в качестве предупреждения о приеме данных, чтобы заполнить небольшой буфер информацией, возвращаемой сервером. Для проекта устройства управления сном мне нужно анализировать очень мало данных, возвращаемых с сервера, поэтому в целях экономии буфер и проходящий через него указатель особенно малы; Это будет одна из первых вещей, которые вам придется изменить, чтобы повторно использовать библиотеку для обработки большего объема данных.

    Функции, которые предоставляются как общедоступные, позволяют (1) узнать состояние модуля: подключен он или нет, есть ли данные в буфере и сколько, и завершил ли модуль ESP8266 запрошенную операцию; (2) подключиться к точке доступа Wi-Fi в сети с DHCP-сервером и (3) выполнить HTTP-запросы GET и POST, хотя, как вы увидите, код разработан таким образом, чтобы упростить добавление других.

    Что касается внутреннего функционирования, то сначала строятся две матрицы: одна с приказами AT, а другая с ожидаемыми реакциями на успех и ошибку; Затем программа, использующая библиотеку, должна время от времени вызывать функцию. Enviar который будет отвечать за отправку заказов в модуль, если они доступны и не заняты, и в функцию recibir который будет обрабатывать ответы от модуля ESP8266 (и от HTTP-сервера через него, если применимо)

    Поскольку существует вероятность отключения модуля из-за потери сигнала, основная программа может проверить, подключен ли модуль ESP8266 к точке доступа WiFi (с помощью функции подключенный) и попробуйте подключиться иначе (с помощью функции Connect_Wi-Fi)

    Чтобы узнать, завершилась ли запрошенная операция, программа может использовать функцию операция_закончена и в этом случае отправить другой или использовать полученные данные, для которых используется функция read_buffer, которая возвращает содержимое буфера, заполненного данными, поступившими в модуль ESP8266, до завершения операции, и функция длина_буфера который сообщает количество этих данных, о которых предупредил сервер, что они будут отправлены (чтобы информацию из самого модуля можно было не учитывать)

    В приведенном ниже примере используется библиотека HTTP-запросов с модулем Wi-Fi ESP8266 для отправки данных на сервер (процент, полученный при чтении аналогового входа) через каждый определенный интервал времени. Поскольку он не ожидает получения какого-либо ответа, он не использует буфер, и его достаточно для корректного завершения операции. Эту систему я использую в своем проекте устройства управления сном для хранения результатов показаний датчиков на сервере.

    В следующем примере используется запрос HTTP GET для запроса времени сервера и синхронизации его со временем микроуправляемого устройства путем добавления расчетного времени ответа; Фактически, это добавляет еще 4–6 секунд, чтобы гарантировать, что время устройства больше времени сервера, и легко проверить, правильно ли время на часах реального времени, которые являются частью устройства, или оно было потеряно из-за загрузки. , аккумулятор.

    После многих испытаний я убедился, что эта система Синхронизация времени с модулем Wi-Fi ESP8266. Это достаточно точно для моих нужд; в худшем случае с погрешностью менее 10 секунд, что в моем случае несколько неактуально.

    Как видно из кода, необходимо сначала запросить длину буфера, поскольку чтение сбрасывает его, чтобы он был доступен для хранения новых данных.

    После того как содержимое буфера прочитано, в этом примере оно обрабатывается для получения времени. Сначала выбирается текст между фигурными скобками (сервер отвечает командой PHP echo "{".time()."}") преобразует его в «объект времени» и получает от него дату и время в человеческом формате.

    Следующий пример программы, созданный по запросу пользователя, используется для поиска общедоступного IP-адреса с помощью службы Проверить IP AWS (Amazon Web Services) каждые пять минут.

    Как и в предыдущих примерах, делается ряд предположений, которые придется менять в зависимости от используемой конфигурации сети (в примере 192.168.1.X), SSID и ключа WiFi... Способ поиска IP-адрес не очень элегантен, он предполагает, что это последняя строка ответа на запрос HTTP GET, хотя может существовать API, позволяющий сделать это более ортодоксальным способом.


    Вы можете скачайте библиотеку ESP8266 для HTTP-запросов с помощью Arduino Uno (без консоли) и отсюда вы можете скачайте библиотеку HTTP-запросов ESP8266 для Arduino который использует консоль, то есть ему необходимо реализовать последовательный порт программно или использовать в качестве аппаратного обеспечения, например, материнскую плату Arduino Mega o Arduino Leonardo.

    Оставить комментарий

    Вы могли пропустить