Bibliothèque pour faire des requêtes HTTP avec un module WiFi ESP8266 et Arduino

Bibliothèque pour faire des requêtes HTTP avec un module WiFi ESP8266 et Arduino

Bibliothèque pour faire des requêtes HTTP avec un module WiFi ESP8266 et Arduino

Un moyen simple d’envoyer des informations vers et depuis un microcontrôleur consiste à les centraliser sur un serveur Web. Bien qu'il ne s'agisse pas d'une méthode aussi efficace que, par exemple, l'accès direct à une base de données, elle est suffisamment efficace, surtout si l'on considère un projet basé sur un microcontrôleur, et y ajoute les avantages de l'ubiquité (données dans le cloud) et de la simplicité (il peuvent être traitées comme des informations textuelles et des commandes).L'envoi d'informations à l'aide de ce système peut consister à effectuer des requêtes HTTP POST et à les recevoir en analysant le contenu de la réponse à une requête HTTP GET.

Table des matières

    El Module Wi-Fi ESP8266 C'est une option très économique, avec des performances très adaptées à une utilisation avec des microcontrôleurs et très simple à utiliser avec des commandes AT.

    Pour systématiser son utilisation avec les requêtes HTTP, j'ai développé une petite bibliothèque qui supporte les besoins de mon projet de dispositif de gestion du sommeil (que j'ai appelé SleepManager) puisqu'elle base son infrastructure sur un serveur web qui permet de l'étendre à un objet. IdO comme service cloud. Il n'est pas difficile d'ajouter d'autres services tels que des requêtes UDP à la bibliothèque, par exemple pour synchronisation de l'heure via NTP bien que, comme je l'explique dans le texte lié, ce n'est pas critique pour mes besoins et je peux le résoudre de manière acceptable avec une requête HTTP vers une page Web préparée à cet effet, comme je le montre dans un exemple d'utilisation de cette bibliothèque.

    Le fonctionnement de la bibliothèque est basé sur l'envoi de commandes AT lorsque l'appareil est disponible et leur répétition (avec un petit délai) en cas d'erreur, interprétée comme une indisponibilité (avec succès, par test) par exemple depuis un point d'accès WiFi ou serveur en cours de consultation.

    La bibliothèque profite du fait que le module WiFi ESP8266 renvoie un code +IPD en guise d'avertissement de réception de données pour remplir un petit tampon avec les informations renvoyées par le serveur. Pour le projet de dispositif de gestion du sommeil, j'ai besoin d'analyser très peu de données renvoyées par le serveur donc, pour économiser, le tampon et le pointeur qui le parcourent sont particulièrement petits ; Ce sera l’une des premières choses que vous devrez modifier pour réutiliser la bibliothèque afin de traiter un plus grand volume de données.

    Les fonctions exposées comme publiques permettent (1) de connaître l'état du module : s'il est connecté ou non, s'il y a des données dans le tampon et en quelle quantité et si le module ESP8266 a terminé l'opération qui a été demandée ; (2) connectez-vous à un point d'accès WiFi sur un réseau avec un serveur DHCP et (3) effectuez des requêtes HTTP GET et POST bien que, comme vous le verrez, le code soit conçu pour rendre très facile l'ajout d'autres.

    Concernant le fonctionnement interne, dans un premier temps deux matrices sont construites, une avec les ordres AT et une autre avec les réponses attendues en cas de succès et d'erreur ; Ensuite, le programme qui utilise la bibliothèque doit appeler la fonction de temps en temps ENVOYER qui se chargera d'envoyer les commandes au module si elles sont disponibles et non occupées et à la fonction recevoir qui traitera les réponses du module ESP8266 (et du serveur HTTP via celui-ci le cas échéant)

    Comme il est possible que le module soit déconnecté en raison d'une perte de signal, le programme principal peut vérifier si le module ESP8266 est connecté au point d'accès WiFi (avec la fonction lié) et essayez de vous connecter autrement (avec la fonction connecter_wifi)

    Pour savoir si l'opération demandée est terminée, le programme peut utiliser la fonction opération_terminée et dans ce cas en envoyer un autre ou utiliser les données résultantes pour lesquelles la fonction est utilisée read_buffer, qui renvoie le contenu du tampon rempli avec les données arrivées au module ESP8266 jusqu'à la fin de l'opération, et la fonction longueur_tampon qui rapporte la quantité de ces données que le serveur a prévenu qu'elles allaient être envoyées (afin que les informations du module lui-même puissent être actualisées)

    L'exemple ci-dessous utilise la bibliothèque de requêtes HTTP avec le module WiFi ESP8266 pour envoyer des données au serveur (un pourcentage obtenu à partir de la lecture d'une entrée analogique) à intervalles de temps donnés. Puisqu’il n’attend aucune réponse, il n’utilise pas le tampon et cela suffit pour que l’opération se termine correctement. Ce système est ce que j'utilise dans mon projet de dispositif de gestion du sommeil pour stocker les résultats des lectures des capteurs sur le serveur.

    L'exemple suivant utilise une requête HTTP GET pour interroger l'heure du serveur et la synchroniser avec l'heure de l'appareil microcontrôlé en ajoutant le temps de réponse estimé ; En fait, il ajoute 4 à 6 secondes supplémentaires pour garantir que l'heure de l'appareil est supérieure à celle du serveur et pour vérifier facilement si l'heure de l'horloge en temps réel qui fait partie de l'appareil est correcte ou a été perdue à cause du téléchargement . batterie.

    Après de nombreux tests j'ai vérifié que ce système de Synchronisation de l'heure avec le module WiFi ESP8266 C'est suffisamment précis pour mes besoins ; dans le pire des cas avec une erreur de moins de 10 secondes, ce qui n'a pas d'importance dans mon cas.

    Comme on peut le voir dans le code, il faut d'abord interroger la longueur du buffer puisque la lecture le réinitialise pour qu'il soit disponible pour stocker de nouvelles données.

    Une fois le contenu du buffer lu, dans cet exemple il est traité pour obtenir l'heure. Tout d'abord, le texte entre les accolades est sélectionné (le serveur répond en utilisant la commande PHP echo "{" .time () "}") le transforme en « objet temporel » et en obtient la date et l’heure au format humain.

    L'exemple de programme suivant, inspiré de la requête d'un utilisateur, est utilisé pour trouver l'adresse IP publique à l'aide du service VérifierIP AWS (Amazon Web Services) toutes les cinq minutes.

    Comme dans les exemples précédents, on fait une série d'hypothèses qu'il faudra changer en fonction de la configuration réseau utilisée (192.168.1.X, dans l'exemple), du SSID et de la clé WiFi... La manière de trouver le L'adresse IP n'est pas très élégante, elle suppose qu'il s'agit de la dernière ligne de la réponse à la requête HTTP GET bien qu'il puisse y avoir une API pour le faire de manière plus orthodoxe.


    Vous pouvez téléchargez la bibliothèque ESP8266 pour les requêtes HTTP avec Arduino Uno (sans console) et à partir de là, vous pouvez téléchargez la bibliothèque de requêtes HTTP ESP8266 pour Arduino qui utilise une console, c'est-à-dire qu'il doit implémenter un port série par logiciel ou utiliser comme matériel, par exemple, une carte mère Mega Arduino o Arduino Leonardo.

    Poster un commentaire

    Vous avez peut-être manqué