Бібліотека для виконання HTTP-запитів за допомогою модуля WiFi ESP8266 і Arduino

Бібліотека для виконання HTTP-запитів за допомогою модуля WiFi ESP8266 і Arduino

Бібліотека для виконання HTTP-запитів за допомогою модуля WiFi ESP8266 і Arduino

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

Зміст

    El Модуль WiFi ESP8266 Це дуже економічний варіант, який має продуктивність, дуже придатну для використання з мікроконтролерами, і дуже простий у використанні для роботи з AT-командами.

    Щоб систематизувати його використання з HTTP-запитами, я розробив невелику бібліотеку, яка підтримує потреби мого проекту пристрою керування сном (який я назвав SleepManager), оскільки він базує свою інфраструктуру на веб-сервері, який дозволяє розширити його до об’єкта. IoT як хмарний сервіс. До бібліотеки нескладно додати, наприклад, інші служби, такі як запити UDP синхронізація часу через NTP хоча, як я пояснюю в пов’язаному тексті, це не критично для моїх потреб, і я можу вирішити це прийнятно за допомогою HTTP-запиту до веб-сторінки, підготовленої для цієї мети, як я показую в прикладі використання цієї бібліотеки.

    Робота бібліотеки заснована на відправці AT-команд, коли пристрій доступний, і їх повторенні (з невеликою затримкою) у разі помилки, яка інтерпретується як недоступність (успішно, за результатами тестування), наприклад, з точки доступу WiFi або сервер, з яким здійснюється консультація.

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

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

    Щодо внутрішнього функціонування, спочатку будуються дві матриці, одна з наказами AT, а інша з очікуваними відповідями на успіх і помилку; тоді програма, яка використовує бібліотеку, повинна час від часу викликати функцію відправити який буде відповідати за надсилання замовлень до модуля, якщо вони доступні та незайняті, і до функції рецибір який оброблятиме відповіді від модуля ESP8266 (і від сервера HTTP через нього, якщо це можливо)

    Оскільки існує ймовірність відключення модуля через втрату сигналу, головна програма може перевірити, чи підключено модуль ESP8266 до точки доступу WiFi (за допомогою функції conectado) і спробуйте підключитися інакше (за допомогою функції connect_wifi)

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

    У наведеному нижче прикладі використовується бібліотека запитів HTTP з модулем WiFi ESP8266 для надсилання даних на сервер (відсоток, отриманий від читання аналогового введення) через кожний певний інтервал часу. Оскільки він не очікує отримання відповіді, він не використовує буфер, і цього достатньо для правильного завершення операції. Цю систему я використовую в своєму проекті пристрою керування сном для зберігання результатів показань датчиків на сервері.

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

    Після багатьох тестів я переконався, що ця система Синхронізація часу з модулем WiFi ESP8266 Це достатньо точно для моїх потреб; у гіршому випадку з помилкою менше 10 секунд, що в моєму випадку дещо не має значення.

    Як видно з коду, необхідно спочатку запитати довжину буфера, оскільки читання скидає його, щоб він був доступний для зберігання нових даних.

    Після того, як вміст буфера було прочитано, у цьому прикладі він обробляється для отримання часу. Спочатку виділяється текст між дужками (сервер відповідає за допомогою команди PHP echo “{“.time().”}”) lo transforma en un “objeto tiempo” y de él obtiene en formato humano la fecha y la hora.

    Наступний приклад програми, натхненний запитом користувача, використовується для пошуку публічної IP-адреси за допомогою служби CheckIP AWS (веб-служби Amazon) кожні п'ять хвилин.

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


    Тут можна завантажте бібліотеку ESP8266 для запитів HTTP за допомогою Arduino Uno (без консолі) і звідси ви можете завантажте бібліотеку запитів HTTP ESP8266 для Arduino який використовує консоль, тобто йому потрібно програмно реалізувати послідовний порт або використовувати як апаратне забезпечення, наприклад, материнську плату arduino мега o Ардуїно Леонардо.

    Дати коментар

    Можливо, ви пропустили