La carte de développement WeMos D1 Mini est une mini carte WIFI basée sur le circuit intégré à microcontrôleur ESP-8266EX. Elle se programme avec l'EDI Arduino, à condition toutefois s'y ajouter le module adéquat. La documentation pour installer ce module se retrouve aisément sur internet. Quelques caractéristiques :
Comme avec les autres cartes, la WeMos D1 Mini possède une petite DEL permettant d'effectuer des tests. Elle est associée au connecteur dont le numéro, donné par la variable LED_BUILTIN a pour valeur 2. Une particularité : La DEL s'éteint en mettant le connecteur 2 au niveau logique 1. Elle s'allume en le mettant au niveau logique 0. Le code ci-dessous permet de vérifier ces informations.
void setup() { pinMode(LED_BUILTIN, OUTPUT); Serial.begin(9600); Serial.print(LED_BUILTIN); } void loop() { digitalWrite(LED_BUILTIN, HIGH); delay(2000); digitalWrite(LED_BUILTIN, LOW); delay(400); }
L'idée est de placer la carte Wemos D1 Mini sur un objet (ou un robot), de commander celle-ci depuis une tablette (ou un ordinateur, un ordiphone). La carte Wemos D1 Mini est équipé d'un serveur web auquel on accède via le navigateur de la tablette. On entre dans la barre d'adresse du navigateur l'adresse IP de la carte Wemos D1 Mini, pour obtenir une page web permettant de piloter l'objet.
La tablette et la carte Wemos D1 Mini se connectent au même un point d'accès WIFI. Ci-dessous, "nom_du_reseau" et "mot_de_passe" doivent être adaptés au réseau utilisé. La liaison série est utile pour connaître l'adresse IP de la carte Wemos D1 Mini.
#include <ESP8266WiFi.h> int num_del = D5; const char* ssid = "nom_du_reseau"; const char* password = "mot_de_passe"; WiFiServer server(80); void setup() { Serial.begin(115200); delay(10); pinMode(num_del, OUTPUT); digitalWrite(num_del, LOW); // Connection au WiFi Serial.println(); Serial.print("Connecté à "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connecté"); // Démarrer le serveur server.begin(); Serial.println("Serveur démarré"); // Indiquer l'adresse IP Serial.print("Utilisé cette URL : "); Serial.print("http://"); Serial.print(WiFi.localIP()); Serial.println("/"); } void loop() { // Vérifier si le client est connecté WiFiClient client = server.available(); if (!client) { return; } // Attendre jusqu'à ce que le client envoie des données Serial.println("nouveau client"); while(!client.available()){ delay(100); } // Lire la première ligne de la requête String request = client.readStringUntil('\r'); Serial.println(request); client.flush(); // Vérifier la requête int value = LOW; if (request.indexOf("/LED=ON") != -1) { digitalWrite(num_del, HIGH); value = HIGH; } if (request.indexOf("/LED=OFF") != -1) { digitalWrite(num_del, LOW); value = LOW; } // Retourner la réponse client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(""); // A ne pas oublier! client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.println("<head><meta charset=\"utf-8\"></head>"); client.println("<body>"); client.print("La DEL est maintenant : "); if(value == HIGH) client.print(" allumée."); else client.print(" éteinte."); client.println("<br><br>"); client.println("Cliquer <a href=\"/LED=ON\">ici</a> pour mettre la broche 5 au niveau logique 1.<br>"); client.println("Cliquer <a href=\"/LED=OFF\">ici</a> pour mettre la broche 5 au niveau logique 0."); client.println("</body>"); client.println("</html>"); delay(10); Serial.println("Client disconnected"); Serial.println(""); }
La carte Wemos D1 Mini est un point d'accès WIFI auquel on connecte la tablette. La liaison série est utile pour détecter un éventuel problème.
#include <ESP8266WiFi.h> const char* ssid = "WEMOS_D1"; const char* password = "987654321"; IPAddress local_IP(192,168,0,222); IPAddress gateway(192,168,4,9); IPAddress subnet(255,255,255,0); WiFiServer server(80); int etat_led = 0; void setup() { pinMode(LED_BUILTIN, OUTPUT); Serial.begin(115200); Serial.println(); Serial.print("Setting soft-AP configuration ... "); Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!"); Serial.print("Setting soft-AP ... "); Serial.println(WiFi.softAP(ssid,password) ? "Ready" : "Failed!"); Serial.print("Soft-AP IP address = "); Serial.println(WiFi.softAPIP()); // Démarrer le serveur server.begin(); Serial.println("Serveur démarré"); digitalWrite(LED_BUILTIN, HIGH); } void loop() { // Vérifier si le client est connecté WiFiClient client = server.available(); if (!client) { return; } // Attendre jusqu'à ce que le client envoie des données Serial.println("nouveau client"); while(!client.available()){ delay(100); } // Lire la première ligne de la requête String request = client.readStringUntil('\r'); Serial.println(request); client.flush(); // Vérifier la requête if (request.indexOf("LED=ON") != -1) { digitalWrite(LED_BUILTIN, LOW); etat_led = 1; } if (request.indexOf("LED=OFF") != -1) { digitalWrite(LED_BUILTIN, HIGH); etat_led = 0; } // Retourner la réponse client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(""); // A ne pas oublier! client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.println("<head><meta charset=\"utf-8\"></head>"); client.println("<body>"); client.print("La DEL est maintenant : "); if(etat_led == HIGH) client.print(" allumée."); else client.print(" éteinte."); client.println("<br><br>"); client.println("Cliquer <a href=\"/LED=ON\">ici</a> pour mettre la broche 5 au niveau logique 1.<br>"); client.println("Cliquer <a href=\"/LED=OFF\">ici</a> pour mettre la broche 5 au niveau logique 0."); client.println("</body>"); client.println("</html>"); delay(10); Serial.println("Client disconnected"); Serial.println(""); }