C'est le printemps ! Fleur.gif

Tuto petit bot

De Les Fabriques du Ponant
Aller à : navigation, rechercher

un code

  1  
  2 ///////////////
  3 // Petit Bot //
  4 ///////////////
  5 // Un programme pédagogique des petits débrouillards ?=+ pour gérer le robot "Petit Bot" 
  6 // Voir sur http://ancien.wikidebrouillard.org/index.php?title=Petit_Bot_un_robot_controlable_en_Wifi
  7 // Ce programme est inspire de : http://www.esp8266.com/viewtopic.php?f=29&t=6419#sthash.gd1tJhwU.dpuf
  8 // Sous licence CC-By-Sa
  9 // Par des gens bien
 10 
 11 /* Schéma
 12 Lolin (Wemos) D1 mini
 13                                      
 14                                 _________________
 15                                /     D1 mini     \
 16                               |[ ]RST        TX[ ]|
 17                               |[ ]A0  -GPIO  RX[ ]|
 18                               |[ ]D0-16    5-D1[X]|----\
 19                               |[ ]D5-14    4-D2[X]|--\  \
 20                               |[ ]D6-12    0-D3[ ]|  |   |
 21                               |[ ]D7-13    2-D4[ ]|  |   |
 22                               |[ ]D8-15     GND[X]|  |   |
 23                               |[ ]3V3        5V[ ]|  |   |
 24  _                            |       +---+       |  |   |
 25 | |                           |_______|USB|_______|  |  /                           _
 26 | |       _                                         /  /                  _        | |
 27 | |     _| |_________                         _____/  /         _________| |_      | |
 28 | |    |    ______   |_data D1______________/        |_data D2_|   ______    |     | |
 29 | |  __|   | SG90 |  |_______________GND_______________________|  | SG90 |   |___  | |
 30 | |_|      |Servo |  |_______________Vin_______________________|  |Servo |       |_| |
 31 | |_|      |Gauche|  |                                         |  |Droit |       |_| |
 32 | | |__    |______|  |                                         |  |______|    ___| | |
 33 | |    |__   ________|                                         |_________   __|    | |
 34 | |       |_|                                                            |_|       | |
 35 | |                                                                                | |
 36 |_|                                                                                |_|
 37                                                                      
 38 */
 39 
 40 // on appelle la bibliothèque qui gère le Wemos D1 mini
 41 #include <ESP8266WiFi.h> 
 42 
 43 // Gestion du Wifi
 44 #include <ESP8266WebServer.h>
 45 #include <DNSServer.h>
 46 #include <ESP8266mDNS.h>
 47 #include <WiFiClient.h> 
 48 
 49 //  Definition du WiFi 
 50 const char *nomDuReseau = "petitbota";     // Nom du réseau wifi du petit bot
 51 const char *motDePasse = "";    // Mot de passe du réseau wifi du petit bot
 52 // ATTENTION - le mot de passe doit faire soit 0 caractères soit 8 ou plus sinon
 53 // La configuration de votre réseau wifi ne se fera pas (ni mot de passe, ni nom de réseau !).
 54 //création du monServeur
 55 ESP8266WebServer monServeur(80);               // Création de l'objet monServeur
 56 
 57 //Gestion des servomoteurs
 58 #include <Servo.h>   //appel de la bibliothèque qui gère les servomoteurs
 59 // création des servomoteurs 
 60 Servo servogauche;   // Nom du servo qui gère la première roue
 61 Servo servodroit;    // Seconde roue
 62 
 63 //déclaration des Variables
 64 //int --- en cours 
 65 int val = -1; // Val nous sert à stocker la commande de l'utilisateur (stop, avance, ...).
 66 
 67 void setup(){
 68   delay(1000);
 69   Serial.begin(9600); // Ouvre une connexion série pour monitorer le fonctionnement du code quand on reste branché a l'ordinateur
 70   Serial.println();
 71   Serial.println();  
 72   configDuWifi();
 73   servodroit.detach();  // Place les servos hors tension
 74   servogauche.detach(); 
 75   pinMode(LED_BUILTIN, OUTPUT);    //met la led du Wemos en sortie
 76   digitalWrite(LED_BUILTIN, LOW);  //met la led du Wemos sur le niveau bas ce qui l'allume.
 77 }
 78 
 79 void loop(){
 80     val = -1;
 81     monServeur.handleClient();
 82 }
 83 
 84 ///////////////////////GESTION DES INSTRUCTIONS///////////////////////////
 85 void GestionDesClics() {
 86   monServeur.on("/avance", HTTP_GET, []() {
 87   val = 1;
 88   Serial.println("avance");    
 89   redactionPageWeb();
 90   });
 91 
 92   monServeur.on("/recule", HTTP_GET, []() {
 93   val = 2;
 94   Serial.println("recule");
 95   redactionPageWeb();
 96   });
 97 
 98   monServeur.on("/gauche", HTTP_GET, []() {
 99   val = 4;
100   Serial.println("gauche");
101   redactionPageWeb();
102   });
103   
104   monServeur.on("/droite", HTTP_GET, []() {
105   val = 3;
106   Serial.println("droite");
107   redactionPageWeb();
108   });
109 
110   monServeur.on("/stop", HTTP_GET, []() {
111   val = 0;
112   Serial.println("stop");
113   redactionPageWeb();
114   });
115   
116   monServeur.on("/", HTTP_GET, []() {
117   val = -1;
118   redactionPageWeb();
119   });
120 
121 }
122 
123 ///////////////////////////LA PAGE WEB DE CONROLE DU PETIT BOT/////////////////////////////////////////
124 void redactionPageWeb(){
125   // Prépare la page web de réponse (le code HTML sera écrit dans la chaine de caractère "pageWeb").
126   String pageWeb = "<!DOCTYPE HTML>\r\n";
127   pageWeb += "<html>\r\n";
128   pageWeb += "<center>";    //On ouvre la balise qui va centrer les boutons
129   pageWeb += "<h1 style=\"font-size:300%;\"\> Le petit bot ";
130   pageWeb += "<style type=\"text/css\">  body { color: #212121; background-color: #CC0C59 } </style>";
131 
132   // On finalise l'écriture de la page Web et on donne les instructions aux servos
133   pageWeb += instruction(val); // pour cela on appelle la fonction "instruction"
134 
135   // On termine l'écriture de la page Web
136   pageWeb += "</h1>";
137   pageWeb += "<br>"; //aller à la ligne
138   pageWeb += "<br>"; //aller à la ligne
139   pageWeb += "<a href=\"/stop\"\"><button style=\"font-size:200%; width: 18%; background-color:#0CCC16; border-radius: 12px\"\>Stop </button></a>\r\n";      // créer un bouton "Stop", qui envoie sur l'URL /stop
140   pageWeb += "<a href=\"/avance\"\"><button style=\"font-size:200%; width: 18%; background-color:#0CCC16; border-radius: 12px\"\>Avance </button></a>\r\n";  // créer un bouton "Avance"...
141   pageWeb += "<a href=\"/recule\"\"><button style=\"font-size:200%; width: 18%; background-color:#0CCC16; border-radius: 12px\"\>Recule </button></a>\r\n";
142   pageWeb += "<a href=\"/droite\"\"><button style=\"font-size:200%; width: 18%; background-color:#0CCC16; border-radius: 12px\"\>Droite </button></a>\r\n";
143   pageWeb += "<a href=\"/gauche\"\"><button style=\"font-size:200%; width: 18%; background-color:#0CCC16; border-radius: 12px\"\>Gauche </button></a><br />\r\n";
144   pageWeb += "</center>"; // tout est centré sur la page
145   pageWeb += "</html>\n"; //Fin de la page Web
146 
147   // On envoie la page web
148   monServeur.send(200, "text/html", pageWeb);
149   delay(1);
150 }
151 
152 ///////////////////INSTRUCTIONS/////////////////////////////////////////////////////////
153 String instruction(int valeur){ //Cette fonction traite les instructions qui sont reçues
154   int gauche;                           // Variable dont la valeur 180 ou 0 fera tourner le servo gauche dans un sens ou l'autre
155   int droite;                           // Idem pour le servo droit
156   String completePage;                  // Déclaration de la chaine de caractère qui sera renvoyée par cette fonction pour compléter la page web 
157   switch(valeur){                       // En fonction de la variable valeur on va donner un ordre aux servos 
158     case 0 :                            // et un texte à la chaine de caractère "completePage"
159     completePage = " est a l’arrêt ";
160     droite = 90;
161     gauche = 90;
162     break;
163     case 1 :
164     completePage = " avance ";
165     droite = 180;
166     gauche = 0;
167     break;
168     case 2 :
169     completePage = " recule ";
170     droite = 0;
171     gauche = 180;
172     break;
173     case 3 :
174     completePage = " tourne a gauche ";
175     droite = 180;
176     gauche = 180;
177     break;
178     case 4 :
179     completePage = " tourne a droite ";
180     droite = 0;
181     gauche = 0;
182     break;
183     // que faire du cas ou val = -1 ? marquer ici ce qui doit être fait.
184   }
185   servogauche.attach(D1);     // Broche D1
186   servodroit.attach(D2);      // Broche D2
187   servogauche.write(gauche); 
188   servodroit.write(droite);
189   return completePage;        // on renvoie la chaine de caractère pour compléter la page web
190 }
191 ////////////////////////CONFIGURATION WIFI///////////////////////////////////////////////
192 void configDuWifi(){  // Fonction de configuratio du Wifi
193   WiFi.mode(WIFI_AP); // le wemos est en mode "Point d'Accès" (il déploie un réseau wifi)
194   WiFi.softAP(nomDuReseau, motDePasse, 2); // on démarre le "Point d'Accès".
195   MDNS.begin(nomDuReseau);                 // gérer les DNS ce qui rendra votre petit bot accessible
196   MDNS.addService("http", "tcp", 80);      // via http://nomDuReseau.local
197   IPAddress monIP = WiFi.softAPIP();       // on récupère l'adresse IP du petit Bot
198   Serial.print("Adresse IP de ce Point d'Accès : ");
199   Serial.println(monIP);                   // on l'écrit sur le moniteur série
200   GestionDesClics();
201   monServeur.begin();                          //Démarrage du monServeur
202   Serial.println("Serveur HTTP démarré");
203   return;                                  // on retourne à l'endroit ou la fonction a été appelée.
204 }