Bibliothek zum Durchführen von HTTP-Abfragen mit einem ESP8266-WLAN-Modul und Arduino

Bibliothek zum Durchführen von HTTP-Abfragen mit einem ESP8266-WLAN-Modul und Arduino

Bibliothek zum Durchführen von HTTP-Abfragen mit einem ESP8266-WLAN-Modul und Arduino

Eine einfache Möglichkeit, Informationen an und von einem Mikrocontroller zu senden, besteht darin, sie auf einem Webserver zu zentralisieren. Obwohl es keine so effiziente Methode ist wie beispielsweise der direkte Zugriff auf eine Datenbank, ist sie doch effektiv genug, insbesondere wenn man ein Projekt auf Basis eines Mikrocontrollers in Betracht zieht und die Vorteile der Allgegenwart (Daten in der Cloud) und der Einfachheit (es) hinzufügt (können als Textinformationen und Befehle behandelt werden). Das Senden von Informationen mit diesem System kann darin bestehen, HTTP-POST-Anfragen zu stellen und sie durch Analyse des Inhalts der Antwort auf eine HTTP-GET-Anfrage zu empfangen.

Inhaltsverzeichnis

    El ESP8266 WiFi-Modul Es handelt sich um eine sehr wirtschaftliche Option, deren Leistung sich sehr gut für den Einsatz mit Mikrocontrollern eignet und die mit AT-Befehlen sehr einfach zu bedienen ist.

    Um die Verwendung mit HTTP-Anfragen zu systematisieren, habe ich eine kleine Bibliothek entwickelt, die die Anforderungen meines Schlafmanagement-Geräteprojekts (das ich SleepManager genannt habe) unterstützt, da die Infrastruktur auf einem Webserver basiert, der die Erweiterung auf ein Objekt ermöglicht. IoT als Cloud-Service. Es ist nicht schwierig, der Bibliothek weitere Dienste wie beispielsweise UDP-Anfragen hinzuzufügen Zeitsynchronisation über NTP Obwohl es, wie ich im verlinkten Text erkläre, für meine Bedürfnisse nicht kritisch ist und ich es mit einer HTTP-Anfrage an eine für diesen Zweck vorbereitete Webseite akzeptabel lösen kann, wie ich an einem Beispiel für die Verwendung dieser Bibliothek zeige.

    Der Betrieb der Bibliothek basiert auf dem Senden von AT-Befehlen, wenn das Gerät verfügbar ist, und deren Wiederholung (mit einer kleinen Verzögerung) im Falle eines Fehlers, der als Nichtverfügbarkeit (erfolgreich, durch Testen) interpretiert wird, beispielsweise von einem WLAN-Zugangspunkt oder Server, der konsultiert wird.

    Die Bibliothek nutzt die Tatsache, dass das ESP8266-WLAN-Modul einen +IPD-Code als Warnung vor dem Datenempfang zurückgibt, um einen kleinen Puffer mit den vom Server zurückgegebenen Informationen zu füllen. Für das Schlafmanagement-Geräteprojekt muss ich nur sehr wenige vom Server zurückgegebene Daten analysieren. Aus Kostengründen sind der Puffer und der Zeiger, die ihn durchlaufen, besonders klein. Dies ist eines der ersten Dinge, die Sie ändern müssen, um die Bibliothek für die Verarbeitung einer größeren Datenmenge wiederzuverwenden.

    Die öffentlich zugänglichen Funktionen ermöglichen (1), den Status des Moduls zu ermitteln: ob es verbunden ist oder nicht, ob und wie viele Daten im Puffer vorhanden sind und ob das ESP8266-Modul den angeforderten Vorgang abgeschlossen hat ; (2) Stellen Sie eine Verbindung zu einem WLAN-Zugangspunkt in einem Netzwerk mit einem DHCP-Server her und (3) stellen Sie HTTP-GET- und POST-Anfragen, obwohl der Code, wie Sie sehen werden, darauf ausgelegt ist, das Hinzufügen anderer sehr einfach zu machen.

    Bezüglich der internen Funktionsweise werden zunächst zwei Matrizen erstellt, eine mit den AT-Befehlen und eine mit den erwarteten Antworten auf Erfolg und Fehler; Dann muss das Programm, das die Bibliothek verwendet, die Funktion von Zeit zu Zeit aufrufen SENDEN Dieses ist dafür verantwortlich, die Bestellungen an das Modul zu senden, wenn diese verfügbar und nicht belegt sind, und an die Funktion Recibir das Antworten vom ESP8266-Modul (und ggf. vom HTTP-Server darüber) verarbeitet.

    Da das Modul aufgrund eines Signalverlusts möglicherweise nicht angeschlossen ist, kann das Hauptprogramm prüfen, ob das ESP8266-Modul mit dem WLAN-Zugangspunkt verbunden ist (mit der Funktion). verbunden) und versuchen Sie, eine andere Verbindung herzustellen (mit der Funktion connect_wifi)

    Um festzustellen, ob der angeforderte Vorgang abgeschlossen ist, kann das Programm die Funktion verwenden operation_finished und in diesem Fall eine andere senden oder die resultierenden Daten verwenden, für die die Funktion verwendet wird read_buffer, das den Inhalt des Puffers zurückgibt, der bis zum Abschluss des Vorgangs mit den am ESP8266-Modul angekommenen Daten gefüllt wurde, und die Funktion Pufferlänge Hier wird die Menge dieser Daten gemeldet, vor deren Versand der Server gewarnt hat (damit die Informationen aus dem Modul selbst außer Acht gelassen werden können).

    Im folgenden Beispiel wird die HTTP-Abfragebibliothek mit dem WLAN-Modul ESP8266 verwendet, um in jedem bestimmten Zeitintervall Daten an den Server zu senden (einen Prozentsatz, der durch das Lesen eines analogen Eingangs erhalten wird). Da keine Antwort erwartet wird, wird der Puffer nicht verwendet und es reicht aus, damit der Vorgang ordnungsgemäß abgeschlossen wird. Dieses System verwende ich in meinem Schlafmanagement-Geräteprojekt, um die Ergebnisse der Sensormessungen auf dem Server zu speichern.

    Das folgende Beispiel verwendet eine HTTP-GET-Abfrage, um die Zeit des Servers abzufragen und sie mit der Zeit des mikrogesteuerten Geräts zu synchronisieren, indem die geschätzte Antwortzeit hinzugefügt wird; Tatsächlich werden weitere 4 bis 6 Sekunden hinzugefügt, um sicherzustellen, dass die Zeit des Geräts größer ist als die Zeit des Servers und um leicht zu überprüfen, ob die Zeit auf der Echtzeituhr, die Teil des Geräts ist, korrekt ist oder durch das Herunterladen verloren gegangen ist . Batterie.

    Nach vielen Tests habe ich bestätigt, dass dieses System funktioniert Zeitsynchronisation mit ESP8266 WiFi-Modul Es ist genau genug für meine Bedürfnisse; im schlimmsten Fall mit einem Fehler von weniger als 10 Sekunden, was in meinem Fall einigermaßen irrelevant ist.

    Wie im Code zu sehen ist, muss zunächst die Länge des Puffers abgefragt werden, da dieser durch das Lesen zurückgesetzt wird, sodass er zum Speichern neuer Daten zur Verfügung steht.

    Sobald der Inhalt des Puffers gelesen wurde, wird er in diesem Beispiel verarbeitet, um die Uhrzeit zu erhalten. Zunächst wird der Text zwischen den geschweiften Klammern ausgewählt (der Server antwortet mit dem Befehl PHP echo “{“.time().”}”) lo transforma en un “objeto tiempo” y de él obtiene en formato humano la fecha y la hora.

    Das folgende Beispielprogramm, inspiriert von einer Benutzeranfrage, wird verwendet, um mithilfe des Dienstes die öffentliche IP-Adresse zu ermitteln CheckIP AWS (Amazon Web Services) alle fünf Minuten.

    Wie in den vorherigen Beispielen werden eine Reihe von Annahmen getroffen, die je nach verwendeter Netzwerkkonfiguration (im Beispiel 192.168.1.X), SSID und WLAN-Schlüssel geändert werden müssen Die IP-Adresse ist nicht sehr elegant, sie geht davon aus, dass sie die letzte Zeile der Antwort auf die HTTP-GET-Anfrage ist, obwohl es möglicherweise eine API gibt, die dies auf orthodoxere Weise erledigt.


    Sie können Laden Sie die ESP8266-Bibliothek für HTTP-Abfragen mit Arduino Uno herunter (ohne Konsole) und von hier aus können Sie Laden Sie die HTTP-Abfragebibliothek ESP8266 für Arduino herunter Das heißt, es muss per Software eine serielle Schnittstelle implementiert oder als Hardware beispielsweise ein Motherboard verwendet werden Arduino Mega o Arduino Leonardo.

    Geben Sie Anmerkung

    Sie können vermisst haben