Serveur d'impression

Programmation de l'ESP8266 avec l'IDE Arduino – Bien choisir son serveur d impression

Par Titanfall , le 1 mars 2020 - 13 minutes de lecture

Dans cet article, nous verrons comment utiliser l'IDE Arduino pour programmer les modules Wi-Fi ESP8266. L'objectif est d'utiliser l'ESP8266 comme microcontrôleur principal et non comme composant périphérique. Nos capteurs y seront directement connectés et toute la partie logicielle y sera exécutée.

Nous verrons d'abord comment configurer l'IDE Arduino pour qu'il considère l'ESP8266 comme un "type de carte" à part entière, comme c'est le cas pour un Arduino Mega ou Uno. Nous ferons ensuite l'édition pour télécharger les programmes sur le module, en utilisant un module d'interface USB / série (le FT232RL). Enfin, nous présenterons certaines des instructions spécifiques à ESP8266 que nous utiliserons dans nos programmes.

Équipement

Nous utiliserons la version ESP-12 de l'ESP8266 pour les raisons que nous avons détaillées dans l'article L'ESP8266, un Arduino avec Wifi pour 2 € ?. Les programmes seront téléchargés à l'aide de l'interface USB / série FT232RL. On aurait pu essayer d'alimenter l'ESP8266 grâce à la sortie 3,3v du FT232RL, mais le module Wi-Fi étant parfois assez gourmand, nous avons opté pour une alimentation externe. Nous utilisons 2 régulateurs en série: un régulateur 5v suivi d'un régulateur 5v -> 3,3v. Nous avons fait ce choix car c'est ce que nous avions sous la main, mais n'importe quelle source d'alimentation 3,3 V fera l'affaire, tant qu'elle est suffisamment puissante (comptez 400mA).

Configuration de l'IDE Arduino

Si vous ne l'avez pas déjà fait, téléchargez l'IDE Arduino sur le site officiel, ici: Téléchargement IDE Arduino. Nous utilisons la version 1.6.5, mais toutes les versions ultérieures devraient fonctionner.

Une fois l'IDE installé, ouvrez-le et accédez aux préférences. Dans la zone "URL du gestionnaire de tableaux supplémentaires", entrez l'adresse suivante:

http://arduino.esp8266.com/staging/package_esp8266com_index.json

.

<img style = "width: 80%;" alt = "<méthode liée PublicationPicture.alt de > "src =" http://www.fais-le-toi-meme.fr/media/programmes-arduino-executes-sur-esp8266-arduino-ide/configuration-ide-arduino-esp8266-ad_wcQyEpJ.png "/ >

Validez, puis allez dans "Outils", "Type de carte", "Gestionnaire de cartes". Dans le champ de recherche, entrez "esp8266".

Vous devriez voir le résultat suivant:

<img style = "width: 80%;" alt = "<méthode liée PublicationPicture.alt de > "src =" http://www.fais-le-toi-meme.fr/media/programmes-arduino-executes-sur-esp8266-arduino-ide/configuration-ide-arduino-esp8266-ad_14XJrZe.png "/ >

Cliquez sur "Installer". Attendez quelques instants et une fois l'installation terminée, si vous allez à nouveau dans "Outils", "Type de carte", vous remarquerez l'apparition d'une nouvelle option: "Module ESP8266 générique". Sélectionnez ce dernier.

Vous y êtes, vous êtes prêt!

Types de démarrage ESP8266

Avant de passer à l'installation proprement dite, arrêtons-nous brièvement sur les différents modes de démarrage de l'ESP8266.

Trois des GPIO (GPIO0, GPIO2 et GPIO15) de l'ESP8266 ESP-12 ont une fonction particulière lors du démarrage du module. Ils vous permettent de sélectionner le type de démarrage à effectuer.

Voici les principales combinaisons possibles:

Mode GPIO0 GPIO2 GPIO15
Éclat (démarrage normal: exécution du programme installé dans Flash) 3.3v 3.3v GND
UART (téléchargement à partir d'un lien série) GND 3.3v GND
SDIO (à partir d'une carte SD) peu importe peu importe 3.3v

Nous utiliserons la première combinaison pour exécuter un programme déjà présent dans le module, et la seconde pour télécharger un nouveau programme.

Modification de notre premier programme

Voici le tableau de câblage décrivant l'assemblage que nous utiliserons pour notre premier test.

ESP8266 Remarque
3.3v VCC
GND GND
TX RX FT232RL
RX TX FT232RL
CH_PD VCC La broche CH_PD doit être haute pour que le module fonctionne
GPIO0 VCC ou GND GND pour télécharger un nouveau programme,
3.3v pour lancer le programme déjà présent
GPIO2 VCC
GPIO15 GND
RST VCC ou GND GND pour redémarrer l'ESP8266,
3.3v (ou non connecté) le reste du temps
<img style = "width: 80%;" alt = "<méthode liée PublicationPicture.alt de > "src =" http://www.fais-le-toi-meme.fr/media/programmes-arduino-executes-sur-esp8266-arduino-ide/montage-programmation-esp8266-ide-ar_dwTR2RE.png "/ >

Nous pouvons passer à la programmation, mais d'abord, une petite clarification …

Avant de continuer … serveur ou client?

Avant de commencer à écrire un programme qui communique via WIFI, vous devrez vous poser cette question: dois-je programmer un serveur ou une client ?

Serveur

Un serveur (au sens logiciel du terme), est un programme tout au long de son exécution reste attentif aux demandes de l'extérieur. Lorsqu'une demande arrive, elle effectue l'action appropriée.

Voici quelques exemples de serveurs que vous pourriez créer avec l'ESP8266:

  • une prise connectée: votre ESP8266 est passif jusqu'à l'arrivée d'une demande. Il prend en charge 2 types de requêtes: "allumer" ou "éteindre". Lorsqu'une demande de "mise sous tension" arrive, l'ESP8266 commande la fermeture d'un relais, et son ouverture lorsqu'il s'agit d'une demande de "mise hors tension".
  • une thermomètre connecté: lorsqu'une demande arrive, le serveur envoie en réponse la température actuelle (connue grâce à un capteur de température connecté à l'ESP8266)

Vous vous demandez peut-être comment ces demandes sont envoyées de l'extérieur. Il peut simplement provenir d'un navigateur Internet. Si nous prenons l'exemple de la prise connectée, on pourrait imaginer les 2 URL suivantes: "http://192.168.0.15/allumer"&"http://192.168.0.15/eteindre". Si vous accédez au premier à partir d'un navigateur Internet, le relais se ferme et le second l'ouvre.

Les demandes peuvent également être envoyées par une application installée sur un smartphone, ou par un autre ESP8266 (qui serait alors un client) ou par un logiciel fonctionnant en permanence sur un ordinateur (pourquoi pas un Raspberry Pi). On pourrait imaginer un logiciel qui interroge régulièrement un serveur de température (fonctionnant sur un ESP8266), et qui, selon la réponse, allumerait ou éteindrait un radiateur (via un relais contrôlé par un autre ESP8266). Dans ce cas, nous aurions 3 composants dans notre système: 2 serveurs ESP8266 et un logiciel "orchestrateur" qui fonctionnerait sur un Raspberry PI.

Client

Contrairement au serveur, le client n'écoute pas les demandes de l'extérieur, mais il fait ses propres demandes lorsqu'il en a besoin.

Exemples de clients que vous pourriez créer avec ESP826:

  • une détecteur de présence: un détecteur de mouvement (type HC-SR501) est connecté à l'ESP8266. Lorsqu'un mouvement est détecté, l'ESP8266 envoie une demande à un service SMS en ligne … Vous êtes averti sur votre téléphone
  • une bouton connecté (Type de bouton Amazon Dash): vous connectez un bouton-poussoir à un ESP8266. Lorsque le bouton est enfoncé, une demande est envoyée à l'extérieur. Cette demande pourrait être envoyée à un autre ESP8266 qui commanderait un relais pour, par exemple, allumer la lampe du salon …

Trêve de blabla, un peu de béton!

Votre premier serveur sur ESP8266

Vous allez créer notre premier serveur. Il ne fera pas grand-chose: il vous répondra simplement lorsque vous lui adresserez une demande. Pas très utile, dites-vous, mais cela constituera une base que vous pourrez réutiliser dans la plupart de vos futurs projets.

Montage

Nous reprenons le montage décrit au début de l'article. Nous nous connecterons GPIO0 à GND pour envoyer notre programme à l'ESP8266, puis à VCC pour l'exécuter.

Le code

Voici le code. Les commentaires décrivent comment cela fonctionne. Vous verrez, c'est assez simple.

#comprendre 
#comprendre 
#comprendre 
#comprendre 

const char * ssid = "Livebox-XXXX"; // remplacez par le SSID de votre WiFi
const char * password = "......"; // remplacez par votre mot de passe WiFi

ESP8266WebServer server (80); // on instancie un serveur en écoute sur le port 80

void setup (void) 
Serial.begin (115200);

// nous demandons la connexion au WiFi
WiFi.begin (ssid, mot de passe);
Serial.println ("");

// nous attendons d'être connectés au WiFi avant de continuer
while (WiFi.status ()! = WL_CONNECTED) 
retard (500);
Serial.print (".");


// nous affichons l'adresse IP qui nous est attribuée
Serial.println ("");
Serial.print ("adresse IP:");
Serial.println (WiFi.localIP ());

// nous définissons ce qui doit être fait lorsque la route / hello est appelée
// ici nous allons juste répondre avec un "bonjour!"
server.on ("/ bonjour" []() 
server.send (200, "text / plain", "hello!");
);

// nous commençons à écouter les demandes de l'extérieur
server.begin ();


boucle vide (void) 
// à chaque itération, nous appelons handleClient pour que les requêtes soient traitées
server.handleClient ();

Téléchargement et essais

Vérifiez que vous avez sélectionné "Generic ESP8266 Module" dans "Tools"> "Card type". Connectez votre FT232RL à l'ordinateur à l'aide du câble USB. S'identifier GPIO0 à GND, et envoyez le programme en cliquant sur "Upload" (2ème icône dans la barre d'outils, ou via le menu: "Sketch"> "Upload").

Une fois le téléchargement terminé, il est temps de tester. Lancez le moniteur série ("Tools" & "Serial monitor") et sélectionnez "115200 bauds" dans la liste déroulante en bas à droite de la fenêtre. Connectez-vous ensuite GPIO0 à VCC pour passer du mode "upload" au mode "run", puis redémarrez le module en vous connectant RST à GND pendant quelques instants (disons une ou deux secondes).

Vous devriez alors voir quelque chose comme ça apparaître sur votre moniteur série:

<img style = "width: 80%;" alt = "<méthode liée PublicationPicture.alt de > "src =" http://www.fais-le-toi-meme.fr/media/programmes-arduino-executes-sur-esp8266-arduino-ide/moniteur-serie-esp8266_Ip1C1RH.jpg "/>

La première ligne nous donne l'adresse IP qui nous a été attribuée: ici 192.168.1.29. La seconde nous indique que le serveur est prêt. Allons-y, testons! Ouvrez votre navigateur Internet préféré et entrez cette URL dans la barre d'adresse: http://192.168.1.29/ bonjour (remplacez 192.168.1.29 par l'adresse IP indiquée sur le moniteur série). Voici ce que vous devriez obtenir:

<img style = "width: 80%; border: 1px solid #BBB;" alt = "<méthode liée PublicationPicture.alt de > "src =" http://www.fais-le-toi-meme.fr/media/programmes-arduino-executes-sur-esp8266-arduino-ide/navigateur-esp8266.png "/>

Cela fonctionne: l'ESP8266 a reçu notre demande et nous a envoyé une réponse. Comme vous pouvez le voir, il est assez simple de créer un serveur connecté au WiFi sur l'ESP8266.

Pour réaliser le relais connecté dont nous avons parlé plus haut, très peu de modifications seront nécessaires. Le plus important sera de remplacer:

  
  
  
  server.on ("/ bonjour" []() 
server.send (200, "text / plain", "hello!");
);

par quelque chose comme:

  
  
  
  server.on ("/ on", []() 
digitalWrite (RELAY_PIN, LOW);
server.send (200, "text / plain", "relay is ON");
);

server.on ("/ off", []() 
digitalWrite (RELAY_PIN, HIGH);
server.send (200, "text / plain", "relay is OFF");
);  

L'appel de l'url http://192.168.1.29/on fermera le relais, tandis que http://192.168.1.29/off l'ouvrira.

Deuxième exemple: un serveur avec un écran

Dans ce deuxième exemple, nous verrons comment connecter d'autres composants à notre ESP8266, et comment interagir avec eux en fonction des demandes reçues.

Nous allons connecter un petit écran OLED I2, comme celui-ci: 0.96 "I2C 128X64 OLED LCD à l'ESP8266. A réception d'une demande, nous afficherons le message passé en paramètre dans l'url à l'écran.

Montage

Nous utiliserons le même assemblage que précédemment, auquel nous ajouterons l'écran qui sera connecté comme ceci:

OLED ESP8266
3.3v 3.3v
GND GND
SDA GPIO04
SLC GPIO05

Le code

Pour contrôler l'écran, nous utiliserons la bibliothèque suivante: https://github.com/squix78/esp8266-oled-ssd1306. Téléchargez l'archive (Clone ou Télécharger> Télécharger le zip) et importez-la dans l'IDE Arduino (Esquisse> Inclure une bibliothèque> Ajouter la bibliothèque .ZIP).

Voici le code que nous utiliserons:

#comprendre 
#comprendre 
#comprendre 
#comprendre 
#comprendre  >
#inclut "SSD1306.h"

const char * ssid = "Livebox-XXXX"; // mettez ici le SSID de votre WiFi
const char * password = "......"; // mettez votre mot de passe WiFi

// instancier l'écran
// l'adresse I2C (ici 0x3C) peut être différente selon le module que vous utilisez
Affichage SSD1306 (0x3C, 4, 5);

ESP8266WebServer server (80);

void setup (void) 
Serial.begin (115200);

// initialisation de l'écran (voir la documentation de la bibliothèque)
display.init ();
display.flipScreenVertically ();
display.setFont (ArialMT_Plain_10);
display.setTextAlignment (TEXT_ALIGN_CENTER);

// nous demandons la connexion au WiFi
WiFi.begin (ssid, mot de passe);
Serial.println ("");

// nous attendons d'être connectés au WiFi avant de continuer
while (WiFi.status ()! = WL_CONNECTED) 
retard (500);
Serial.print (".");


// nous affichons l'adresse IP qui nous est attribuée
Serial.println ("");
Serial.print ("adresse IP:");
Serial.println (WiFi.localIP ());

// nous définissons ce qui doit être fait lorsque la route "/" est appelée
server.on ("/", []() 
// on obtient le paramètre msg dans l'url
Message de chaîne = server.arg ("msg");
// on efface l'écran
display.clear ();
// on écrit le message à l'écran
display.drawString (64, 22, message);
display.display ();
// nous répondons au client
server.send (200, "text / plain", "message reçu:" + message);
);

server.begin ();
Serial.println ("Le serveur HTTP a démarré");


boucle vide (void) 
server.handleClient ();
  

Tester

Téléchargez le programme, ouvrez le moniteur série et redémarrez le module en suivant la procédure décrite dans le premier exemple. Ouvrez ensuite un navigateur Internet et entrez l'URL suivante (en remplaçant l'adresse IP par celle affichée sur le moniteur série): "http://192.168.1.29/?msg=Message from internet :)". Et là, vous devriez assister au phénomène suivant:

Conclusion

Vous savez maintenant comment créer un serveur sur un ESP8266. Si vous avez aimé cet article, n'hésitez pas à le partager sur les réseaux sociaux :).

Discussion

Click to rate this post!
[Total: 0 Average: 0]

Commentaires

Laisser un commentaire

Votre commentaire sera révisé par les administrateurs si besoin.