Biblioteka do wykonywania zapytań HTTP z modułem WiFi ESP8266 i Arduino

Biblioteka do wykonywania zapytań HTTP z modułem WiFi ESP8266 i Arduino

Biblioteka do wykonywania zapytań HTTP z modułem WiFi ESP8266 i Arduino

Prostym sposobem wysyłania informacji do i z mikrokontrolera jest centralizacja ich na serwerze internetowym. Choć nie jest to metoda tak wydajna jak np. bezpośredni dostęp do bazy danych, to jednak jest wystarczająco efektywna, szczególnie jeśli weźmiemy pod uwagę projekt oparty na mikrokontrolerze, dodając do tego zalety wszechobecności (dane w chmurze) i prostotę (jest to mogą być traktowane jako informacje tekstowe i zamówienia).Wysyłanie informacji za pomocą tego systemu może polegać na wykonywaniu żądań HTTP POST i odbieraniu ich poprzez analizę treści odpowiedzi na żądanie HTTP GET.

Spis treści

    El Moduł Wi-Fi ESP8266 Jest to bardzo ekonomiczna opcja, charakteryzująca się wydajnością bardzo odpowiednią do stosowania z mikrokontrolerami i bardzo łatwą w użyciu pracą z poleceniami AT.

    Aby usystematyzować jego użycie za pomocą żądań HTTP, opracowałem małą bibliotekę, która obsługuje potrzeby mojego projektu urządzenia do zarządzania snem (które nazwałem SleepManager), ponieważ opiera swoją infrastrukturę na serwerze internetowym, który pozwala na rozszerzenie go na obiekt. Internet przedmiotów jako usługa w chmurze. Dodanie do biblioteki innych usług, takich jak żądania UDP, nie jest trudne, na przykład synchronizacja czasu przez NTP choć jak wyjaśniam w linkowanym tekście, nie jest to dla moich potrzeb krytyczne i da się to w akceptowalny sposób rozwiązać za pomocą żądania HTTP do przygotowanej w tym celu strony internetowej, co pokazuję na przykładzie użycia tej biblioteki.

    Działanie biblioteki polega na wysyłaniu poleceń AT, gdy urządzenie jest dostępne i powtarzaniu ich (z niewielkim opóźnieniem) w przypadku wystąpienia błędu, który jest interpretowany jako niedostępność (pomyślnie, poprzez testowanie) np. z punktu dostępu WiFi lub serwer, z którym się konsultujesz.

    Biblioteka wykorzystuje fakt, że moduł WiFi ESP8266 zwraca kod +IPD jako ostrzeżenie o odbiorze danych, aby zapełnić mały bufor informacjami zwróconymi przez serwer. W projekcie urządzenia do zarządzania uśpieniem muszę analizować bardzo mało danych zwracanych z serwera, więc aby zaoszczędzić, bufor i wskaźnik, które przez niego przepływają, są szczególnie małe; Będzie to jedna z pierwszych rzeczy, które będziesz musiał zmienić, aby ponownie wykorzystać bibliotekę do przetwarzania większej ilości danych.

    Funkcje udostępniane jako publiczne pozwalają (1) poznać stan modułu: czy jest on podłączony, czy nie, czy w buforze znajdują się dane oraz ich ilość oraz czy moduł ESP8266 zakończył żądaną operację; (2) połączyć się z punktem dostępu Wi-Fi w sieci z serwerem DHCP i (3) wysyłać żądania HTTP GET i POST, chociaż, jak zobaczysz, kod został zaprojektowany tak, aby bardzo łatwo było dodawać kolejne.

    Jeśli chodzi o funkcjonowanie wewnętrzne, najpierw budowane są dwie macierze, jedna z rozkazami AT, a druga z oczekiwanymi reakcjami na sukces i błąd; Wówczas program korzystający z biblioteki musi co jakiś czas wywołać funkcję wysłać który będzie odpowiedzialny za przesyłanie zleceń do modułu jeśli są dostępne i niezajęte oraz do funkcji otrzymywać który będzie przetwarzał odpowiedzi z modułu ESP8266 (oraz za jego pośrednictwem z serwera HTTP jeśli ma to zastosowanie)

    Ponieważ istnieje możliwość odłączenia modułu na skutek utraty sygnału, program główny może sprawdzić, czy moduł ESP8266 jest podłączony do punktu dostępowego WiFi (funkcją połączony) i spróbuj połączyć się inaczej (za pomocą funkcji połącz_wi-fi)

    Aby dowiedzieć się, czy żądana operacja została zakończona, program może skorzystać z funkcji operacja_zakończona i w takim przypadku wyślij inny lub wykorzystaj powstałe dane, do których używana jest funkcja bufor_czytania, która zwraca zawartość bufora, który został zapełniony danymi, które dotarły do ​​modułu ESP8266 do czasu zakończenia operacji, oraz funkcję długość_bufora który raportuje ilość tych danych, o których serwer ostrzegł, że zostaną wysłane (aby można było zdyskontować informacje z samego modułu)

    Poniższy przykład wykorzystuje bibliotekę zapytań HTTP z modułem WiFi ESP8266 do wysyłania danych do serwera (procent uzyskany z odczytu wejścia analogowego) w określonym przedziale czasu. Ponieważ nie oczekuje żadnej odpowiedzi, nie korzysta z bufora i to wystarczy, aby operacja zakończyła się poprawnie. Tego systemu używam w moim projekcie urządzenia do zarządzania snem do przechowywania wyników odczytów czujników na serwerze.

    Poniższy przykład wykorzystuje zapytanie HTTP GET do zapytania o czas serwera i zsynchronizowania go z czasem urządzenia mikrokontrolowanego poprzez dodanie szacowanego czasu odpowiedzi; W rzeczywistości dodaje kolejne 4 do 6 sekund, aby upewnić się, że czas urządzenia jest większy od czasu serwera i łatwo sprawdzić, czy czas na zegarze czasu rzeczywistego będącym częścią urządzenia jest prawidłowy lub został utracony w wyniku pobierania bateria.

    Po wielu testach sprawdziłem, że ten system Synchronizacja czasu z modułem WiFi ESP8266 Jest wystarczająco dokładny dla moich potrzeb; w najgorszym przypadku z błędem mniejszym niż 10 sekund, co w moim przypadku jest nieco nieistotne.

    Jak widać w kodzie, konieczne jest najpierw sprawdzenie długości bufora, ponieważ odczyt resetuje go, dzięki czemu będzie dostępny do przechowywania nowych danych.

    Po odczytaniu zawartości bufora, w tym przykładzie jest ona przetwarzana w celu uzyskania czasu. Najpierw zaznaczany jest tekst zawarty w nawiasach (serwer odpowiada poleceniem PHP echo “{“.time().”}”) lo transforma en un “objeto tiempo” y de él obtiene en formato humano la fecha y la hora.

    Poniższy przykładowy program, zainspirowany zapytaniem użytkownika, służy do znalezienia publicznego adresu IP za pomocą usługi SprawdźIP AWS (usługi sieciowe Amazon) co pięć minut.

    Podobnie jak w poprzednich przykładach, przyjęto szereg założeń, które trzeba będzie zmienić w zależności od użytej konfiguracji sieci (w przykładzie 192.168.1.X), identyfikatora SSID i klucza Wi-Fi... Sposób na znalezienie Adres IP nie jest zbyt elegancki, zakłada, że ​​jest to ostatnia linia odpowiedzi na żądanie HTTP GET, chociaż może istnieć API, które zrobi to w bardziej ortodoksyjny sposób.


    można pobierz bibliotekę ESP8266 dla zapytań HTTP z Arduino Uno (bez konsoli) i stąd możesz pobierz bibliotekę zapytań HTTP ESP8266 dla Arduino który korzysta z konsoli, to znaczy musi zaimplementować port szeregowy za pomocą oprogramowania lub wykorzystać jako sprzęt, na przykład płytę główną Arduino Mega o Arduino Leonardo.

    Zamieść komentarz

    Być może przegapiłeś