Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/LocalSettings.php on line 193

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/LocalSettings.php on line 197

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338
[ Wikidébrouillard ] Petit Bot un robot controlable en Wifi

Petit Bot un robot controlable en Wifi

De Wikidebrouillard.

(Le code)
(Version imprimée en 3D)
 
(8 versions intermédiaires masquées)
Ligne 21 : Ligne 21 :
Pour imprimer partiellement (moins et ça marche aussi) :
Pour imprimer partiellement (moins et ça marche aussi) :
-
* le boitier pour 4 piles AA ([[Fichier:Petitbot-Boiteapile4AAA.stl]]) ou sur le web : http://www.thingiverse.com/antonydbzh/designs
 
* l'élément pour faire une roue-bille ([[Fichier:Petitbot-roue-bille.stl‎]]) ou sur le web : http://www.thingiverse.com/thing:1674143
* l'élément pour faire une roue-bille ([[Fichier:Petitbot-roue-bille.stl‎]]) ou sur le web : http://www.thingiverse.com/thing:1674143
 +
* le fichier pour imprimer un boitier à 3 piles ! en effet le petit bot fonctionne en 3,3V au mieux, mais 4,5V c'est bien aussi, mais pas 6V !! [[Fichier:BattHolder-3AA.stl]]
==Sans  imprimante 3D==
==Sans  imprimante 3D==
Ligne 45 : Ligne 45 :
=='''Fonctionnement'''==
=='''Fonctionnement'''==
* On allume l'interupteur et en quelques instant le petit Bot émet son réseau wifi.
* On allume l'interupteur et en quelques instant le petit Bot émet son réseau wifi.
-
* Il faut se connecter à "Petit Bot" avec le mot de passe "1234567890".
+
* Il faut se connecter à "Petit Bot" avec le mot de passe "12345678".
* Depuis un ordi, tablette ou smartphone, ouvrir un navigateur et aller à l'IP : 192.168.4.1
* Depuis un ordi, tablette ou smartphone, ouvrir un navigateur et aller à l'IP : 192.168.4.1
* On voit ceci, il n'y a plus qu'à cliquer
* On voit ceci, il n'y a plus qu'à cliquer
Ligne 58 : Ligne 58 :
// Petit Bot //
// Petit Bot //
///////////////
///////////////
-
// Un programme pedagogique des petits debrouillards ?=+ pour gerer le robot "Petit Bot"  
+
// Un programme pédagogique des petits débrouillards ?=+ pour gérer le robot "Petit Bot"  
// Voir sur http://wikidebrouillard.org/index.php?title=Petit_Bot_un_robot_controlable_en_Wifi
// Voir sur http://wikidebrouillard.org/index.php?title=Petit_Bot_un_robot_controlable_en_Wifi
// Ce programme est inspire de : http://www.esp8266.com/viewtopic.php?f=29&t=6419#sthash.gd1tJhwU.dpuf
// Ce programme est inspire de : http://www.esp8266.com/viewtopic.php?f=29&t=6419#sthash.gd1tJhwU.dpuf
Ligne 64 : Ligne 64 :
// Par des gens bien
// Par des gens bien
-
#include <ESP8266WiFi.h> // on appelle la bibliotheque qui gere le WemosD1 mini
+
// on appelle la bibliothèque qui gère le Wemos D1 mini
-
//////////////////////////
+
#include <ESP8266WiFi.h>
-
//  Definition du WiFi //
+
-
//////////////////////////
+
-
const char WiFiAPPSK[] = "1234567890"; //C'est le mot de passe du wifi "petit bot"
+
-
/////////////////////////////
+
// Gestion du Wifi
-
// Attribution des broches //
+
#include <ESP8266WebServer.h>
-
/////////////////////////////
+
#include <DNSServer.h>
 +
#include <ESP8266mDNS.h>
 +
#include <WiFiClient.h>
-
#include <Servo.h> //on appelle la bibliotheque qui gere les servomoteurs
+
//  Definition du WiFi
 +
const char *nomDuReseau = "petitbot";    // Nom du réseau wifi du petit bot
 +
const char *motDePasse = "";    // Mot de passe du réseau wifi du petit bot
 +
// ATTENTION - le mot de passe doit faire soit 0 caractères soit 8 ou plus sinon
 +
// La configuration de votre réseau wifi ne se fera pas (ni mot de passe, ni nom de réseau !).
 +
//création du monServeur
 +
ESP8266WebServer monServeur(80);              // Création de l'objet monServeur
-
Servo monservo1; //nom du servo qui gere la premiere roue
+
//Gestion des servomoteurs
 +
#include <Servo.h>  //appel de la bibliothèque qui gère les servomoteurs
 +
// création des servomoteurs
 +
Servo servogauche;   // Nom du servo qui gère la première roue
 +
Servo servodroit;    // Seconde roue
-
Servo monservo2; //seconde roue
+
//déclaration des Variables
 +
//int --- en cours
 +
int val = -1; // Val nous sert à stocker la commande de l'utilisateur (stop, avance, ...).
-
WiFiServer server(80);
+
void setup(){
-
 
+
   delay(1000);
-
void setup()
+
   Serial.begin(9600); // Ouvre une connexion série pour monitorer le fonctionnement du code quand on reste branché a l'ordinateur
-
{
+
   Serial.println();
-
   initHardware();
+
   Serial.println();
-
   setupWiFi();
+
   configDuWifi();
-
   server.begin();
+
   servodroit.detach(); // Place les servos hors tension
-
   monservo1.attach(5);
+
   servogauche.detach();  
-
   monservo2.attach(4);
+
  pinMode(LED_BUILTIN, OUTPUT);    //met la led du Wemos en sortie
-
   monservo1.write(91); //pour mettre les servomoteur à l'arret, on leur donne une valeur au milieu entre 0 et 180.
+
  digitalWrite(LED_BUILTIN, LOW);  //met la led du Wemos sur le niveau bas ce qui l'allume.
-
   monservo2.write(93);  
+
}
 +
void loop(){
 +
    val = -1;
 +
    monServeur.handleClient();
}
}
-
void loop()
+
///////////////////////GESTION DES INSTRUCTIONS///////////////////////////
-
{
+
void GestionDesClics() {
-
  // Vérifie si il y a navigateur connecte
+
   monServeur.on("/avance", HTTP_GET, []() {
-
  WiFiClient client = server.available();
+
  val = 1;
-
  if (!client) {
+
   Serial.println("avance");  
-
    return;
+
   redactionPageWeb();
-
  }
+
   });
-
 
+
-
  // Lit la premiere ligne de la requete
+
-
  String req = client.readStringUntil('\r');
+
-
 
+
-
  client.flush();
+
-
 
+
-
  // affecte une valeur a "val" suivant la requete
+
-
  int val = -1;
+
-
 
+
-
  if (req.indexOf("/stop") != -1)
+
-
    val = 0;
+
-
   else if (req.indexOf("/avance") != -1)
+
-
    val = 1;
+
-
   else if (req.indexOf("/recule") != -1)
+
-
    val = 2;  
+
-
   else if (req.indexOf("/gauche") != -1)
+
-
    val = 3;  
+
-
   else if (req.indexOf("/droite") != -1)
+
-
    val = 4;  
+
-
 
+
 +
  monServeur.on("/recule", HTTP_GET, []() {
 +
  val = 2;
 +
  Serial.println("recule");
 +
  redactionPageWeb();
 +
  });
-
   // Prepare la page web de réponse. on commence par le "header" commun; (le code HTML sera ecrit dans la chaine de carcatere s).
+
   monServeur.on("/droite", HTTP_GET, []() {
-
   String s = "HTTP/1.1 200 OK\r\n";
+
   val = 4;
-
   s += "Content-Type: text/html\r\n\r\n";
+
   Serial.println("droite");
-
   s += "<!DOCTYPE HTML>\r\n";
+
   redactionPageWeb();
-
   s += "<html>\r\n";
+
   });
    
    
-
   s += "<center>";
+
   monServeur.on("/gauche", HTTP_GET, []() {
-
   s += "<h1 style=\"font-size:300%;\"\> Le petit bot ";
+
   val = 3;
 +
  Serial.println("gauche");
 +
  redactionPageWeb();
 +
  });
-
   // on va finaliser la chaine de caracteres et envoyer les instructions
+
   monServeur.on("/stop", HTTP_GET, []() {
-
  if (val == 2 ) //Recule
+
   val = 0;
-
  {
+
   Serial.println("stop");
-
    s += " recule ";      //comme les servomoteurs sont colles un dans un sens et le second dans l'autre sens, il faut leur donner a chacun des instructions inverses.
+
   redactionPageWeb();
-
    monservo2.write(0);  //servo 2 roule vers l'arriere.
+
   });
-
    monservo1.write(180); //servo 1 roule vers l'arriere.
+
-
   }
+
-
  if (val == 1)//Avance
+
-
  {
+
-
    s += " avance ";
+
-
    monservo2.write(180); //vers l'avant.
+
-
    monservo1.write(0);   //vers l'avant.
+
-
  }
+
-
  if (val == 0)//stop
+
-
  {
+
-
    s += " est a l'arret ";
+
-
    monservo1.write(91); //stop
+
-
    monservo2.write(93);  //stop
+
-
   }
+
-
  if (val == 3)//tourne a gauche
+
-
  {
+
-
    s += " tourne a gauche "; //Pour faire tourner, il suffit qu'une roue tourne dans un sens et la seconde dans le sens inverse
+
-
    monservo1.write(180);    //vers l'avant.
+
-
    monservo2.write(180);    //vers l'arriere.
+
-
   }
+
-
  if (val == 4)//tourne a droite
+
-
  {
+
-
    s += " tourne a droite ";
+
-
    monservo1.write(0);  //vers l'arriere.
+
-
    monservo2.write(0);  //vers l'avant.
+
-
  }
+
-
 
+
-
  s += "</h1>";
+
-
  s += "<br>"; //aller a la ligne
+
-
  s += "<br>"; //aller a la ligne
+
-
  s += "<a href=\"/stop\"\"><button style=\"font-size:200%; width: 18%\"\>Stop </button></a>\r\n";// creer un boutton "Stop"
+
-
  s += "<a href=\"/avance\"\"><button style=\"font-size:200%; width: 18%\"\>Avance </button></a>\r\n";
+
-
  s += "<a href=\"/recule\"\"><button style=\"font-size:200%; width: 18%\"\>Recule </button></a>\r\n";
+
-
  s += "<a href=\"/droite\"\"><button style=\"font-size:200%; width: 18%\"\>Droite </button></a>\r\n";
+
-
  s += "<a href=\"/gauche\"\"><button style=\"font-size:200%; width: 18%\"\>Gauche </button></a><br />\r\n";
+
-
  s += "</center>";
+
    
    
-
   s += "</html>\n"; //Fin de la page Web
+
   monServeur.on("/", HTTP_GET, []() {
-
 
+
   val = -1;
-
  // Envoie de la reponse au navigateur
+
   redactionPageWeb();
-
  client.print(s);
+
   });
-
   delay(1);
+
-
   Serial.println("Client disconnected");
+
-
   client.flush();
+
}
}
-
void setupWiFi() //reglage du reseau wifi emis par le WemosD1 mini
+
///////////////////////////LA PAGE WEB DE CONROLE DU PETIT BOT/////////////////////////////////////////
-
{
+
void redactionPageWeb(){
-
   WiFi.mode(WIFI_AP);
+
   // Prépare la page web de réponse (le code HTML sera écrit dans la chaine de caractère "pageWeb").
-
   uint8_t mac[WL_MAC_ADDR_LENGTH];
+
   String pageWeb = "<!DOCTYPE HTML>\r\n";
-
   WiFi.softAPmacAddress(mac);
+
   pageWeb += "<html>\r\n";
-
   String macID = String(mac[WL_MAC_ADDR_LENGTH - 2], HEX) +
+
   pageWeb += "<center>";   //On ouvre la balise qui va centrer les boutons
-
                String(mac[WL_MAC_ADDR_LENGTH - 1], HEX);
+
   pageWeb += "<h1 style=\"font-size:300%;\"\> Le petit bot ";
-
   macID.toUpperCase();
+
   pageWeb += "<style type=\"text/css\">  body { color: #212121; background-color: #CC0C59 } </style>";
-
   String AP_NameString = "PetitBot"; //nom du reseau
+
-
   char AP_NameChar[AP_NameString.length() + 1];
+
   // On finalise l'écriture de la page Web et on donne les instructions aux servos
-
   memset(AP_NameChar, 0, AP_NameString.length() + 1);
+
   pageWeb += instruction(val); // pour cela on appelle la fonction "instruction"
-
   for (int i = 0; i < AP_NameString.length(); i++)
+
   // On termine l'écriture de la page Web
-
    AP_NameChar[i] = AP_NameString.charAt(i);
+
  pageWeb += "</h1>";
 +
  pageWeb += "<br>"; //aller à la ligne
 +
  pageWeb += "<br>"; //aller à la ligne
 +
  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
 +
  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"...
 +
  pageWeb += "<a href=\"/recule\"\"><button style=\"font-size:200%; width: 18%; background-color:#0CCC16; border-radius: 12px\"\>Recule </button></a>\r\n";
 +
  pageWeb += "<a href=\"/droite\"\"><button style=\"font-size:200%; width: 18%; background-color:#0CCC16; border-radius: 12px\"\>Droite </button></a>\r\n";
 +
  pageWeb += "<a href=\"/gauche\"\"><button style=\"font-size:200%; width: 18%; background-color:#0CCC16; border-radius: 12px\"\>Gauche </button></a><br />\r\n";
 +
  pageWeb += "</center>"; // tout est centré sur la page
 +
  pageWeb += "</html>\n"; //Fin de la page Web
-
   WiFi.softAP(AP_NameChar, WiFiAPPSK, 7);
+
   // On envoie la page web
 +
  monServeur.send(200, "text/html", pageWeb);
 +
  delay(1);
}
}
-
void initHardware()
+
///////////////////INSTRUCTIONS/////////////////////////////////////////////////////////
-
{
+
String instruction(int valeur){ //Cette fonction traite les instructions qui sont reçues
-
  Serial.begin(115200); //ouvre une connection serie pour monitorer le fonctionnement du code quand on reste branche a l'ordinateur
+
  int gauche;                          // Variable dont la valeur 180 ou 0 fera tourner le servo gauche dans un sens ou l'autre
-
}
+
  int droite;                           // Idem pour le servo droit
-
</pre>
+
  String completePage;                  // Déclaration de la chaine de caractère qui sera renvoyée par cette fonction pour compléter la page web
-
 
+
  switch(valeur){                      // En fonction de la variable valeur on va donner un ordre aux servos
-
Un autre code, un peu différent :
+
    case 0 :                            // et un texte à la chaine de caractère "completePage"
-
<pre>
+
    completePage = " est a l&rsquo;arr&ecirc;t ";
-
///////////////
+
    droite = 90;
-
// Petit Bot //
+
    gauche = 90;
-
///////////////
+
    break;
-
// Un programme pedagogique des petits debrouillards ?=+ pour gerer le robot "Petit Bot"
+
    case 1 :
-
// Voir sur http://wikidebrouillard.org/index.php?title=Petit_Bot_un_robot_controlable_en_Wifi
+
    completePage = " avance ";
-
// Ce programme est inspire de : http://www.esp8266.com/viewtopic.php?f=29&t=6419#sthash.gd1tJhwU.dpuf
+
    droite = 180;
-
// Sous licence CC-By-Sa
+
    gauche = 0;
-
// Par des gens bien
+
    break;
-
 
+
    case 2 :
-
#include <ESP8266WiFi.h> // on appelle la bibliotheque qui gere le WemosD1 mini
+
    completePage = " recule ";
-
//////////////////////////
+
    droite = 0;
-
// Definition du WiFi //
+
    gauche = 180;
-
//////////////////////////
+
    break;
-
const char WiFiAPPSK[] = "1234567890"; //C'est le mot de passe du wifi "petit bot"
+
    case 3 :
-
 
+
    completePage = " tourne a gauche ";
-
/////////////////////////////
+
    droite = 180;
-
// Attribution des broches //
+
    gauche = 180;
-
/////////////////////////////
+
    break;
-
 
+
    case 4 :
-
#include <Servo.h> //on appelle la bibliotheque qui gere les servomoteurs
+
    completePage = " tourne a droite ";
-
 
+
    droite = 0;
-
Servo monservo1; //nom du servo qui gere la premiere roue
+
    gauche = 0;
-
Servo monservo2; //seconde roue
+
     break;
-
 
+
    // que faire du cas ou val = -1 ? marquer ici ce qui doit être fait.
-
WiFiServer server(80);
+
-
 
+
-
void setup()
+
-
{
+
-
  initHardware();
+
-
  setupWiFi();
+
-
  server.begin();
+
-
  monservo1.attach(5);
+
-
  monservo2.attach(4);
+
-
  monservo1.write(91); //pour mettre les servomoteur à l'arret, on leur donne une valeur au milieu entre 0 et 180.
+
-
  monservo2.write(93);  
+
-
 
+
-
}
+
-
 
+
-
void loop()
+
-
{
+
-
  // Vérifie si il y a navigateur connecte
+
-
  WiFiClient client = server.available();
+
-
  if (!client) {
+
-
     return;
+
   }
   }
-
 
+
   servogauche.attach(D1);    // Broche D1
-
   // Lit la premiere ligne de la requete
+
   servodroit.attach(D2);      // Broche D2
-
  String req = client.readStringUntil('\r');
+
   servogauche.write(gauche);  
-
 
+
   servodroit.write(droite);
-
  client.flush();
+
   return completePage;       // on renvoie la chaine de caractère pour compléter la page web
-
 
+
-
  // affecte une valeur a "val" suivant la requete
+
-
  int val = -1;
+
-
 
+
-
  if (req.indexOf("/stop") != -1)
+
-
     val = 0;
+
-
  else if (req.indexOf("/avance") != -1)
+
-
    val = 1;
+
-
  else if (req.indexOf("/recule") != -1)
+
-
    val = 2;
+
-
   else if (req.indexOf("/gauche") != -1)
+
-
    val = 3;
+
-
  else if (req.indexOf("/droite") != -1)
+
-
    val = 4;
+
-
 
+
-
 
+
-
 
+
-
  // Prepare la page web de réponse. on commence par le "header" commun; (le code HTML sera ecrit dans la chaine de carcatere s).
+
-
  String s = "HTTP/1.1 200 OK\r\n";
+
-
  s += "Content-Type: text/html\r\n\r\n";
+
-
  s += "<!DOCTYPE HTML>\r\n";
+
-
  s += "<html>\r\n";
+
-
 
+
-
  s += "<center>";
+
-
  s += "<h1 style=\"font-size:300%;\"\> Le petit bot ";
+
-
 
+
-
  // on va finaliser la chaine de caracteres et envoyer les instructions
+
-
 
+
-
  if (val !=0 )
+
-
  {
+
-
  monservo1.attach(5);
+
-
  monservo2.attach(4);
+
-
  }
+
-
 
+
-
  if (val == 2 ) //Recule
+
-
  {
+
-
    s += " recule ";      //comme les servomoteurs sont colles un dans un sens et le second dans l'autre sens, il faut leur donner a chacun des instructions inverses.
+
-
    monservo2.write(0);   //servo 2 roule vers l'arriere.
+
-
    monservo1.write(180); //servo 1 roule vers l'arriere.
+
-
   }
+
-
  if (val == 1)//Avance
+
-
  {
+
-
    s += " avance ";
+
-
    monservo2.write(180); //vers l'avant.
+
-
    monservo1.write(0);  //vers l'avant.
+
-
  }
+
-
  if (val == 0)//stop
+
-
  {
+
-
    s += " est a l'arret ";
+
-
    monservo1.detach();  //stop
+
-
    monservo2.detach();  //stop
+
-
  }
+
-
  if (val == 3)//tourne a gauche
+
-
  {
+
-
    s += " tourne a gauche "; //Pour faire tourner, il suffit qu'une roue tourne dans un sens et la seconde dans le sens inverse
+
-
    //monservo1.write(180);    //vers l'avant.
+
-
    monservo1.detach();
+
-
    monservo2.write(180);    //vers l'arriere.
+
-
  }
+
-
  if (val == 4)//tourne a droite
+
-
  {
+
-
    s += " tourne a droite ";
+
-
    monservo1.write(0); //vers l'arriere.
+
-
    monservo2.detach();
+
-
    //monservo2.write(0);  //vers l'avant.
+
-
   }
+
-
 
+
-
  s += "</h1>";
+
-
  s += "<br>"; //aller a la ligne
+
-
  s += "<br>"; //aller a la ligne
+
-
  s += "<a href=\"/stop\"\"><button style=\"font-size:200%; width: 18%\"\>Stop </button></a>\r\n";// creer un boutton "Stop"
+
-
  s += "<a href=\"/avance\"\"><button style=\"font-size:200%; width: 18%\"\>Avance </button></a>\r\n";
+
-
  s += "<a href=\"/recule\"\"><button style=\"font-size:200%; width: 18%\"\>Recule </button></a>\r\n";
+
-
  s += "<a href=\"/droite\"\"><button style=\"font-size:200%; width: 18%\"\>Droite </button></a>\r\n";
+
-
  s += "<a href=\"/gauche\"\"><button style=\"font-size:200%; width: 18%\"\>Gauche </button></a><br />\r\n";
+
-
  s += "</center>";
+
-
 
+
-
  s += "</html>\n"; //Fin de la page Web
+
-
 
+
-
  // Envoie de la reponse au navigateur
+
-
  client.print(s);
+
-
  delay(1);
+
-
  Serial.println("Client disconnected");
+
-
  client.flush();
+
-
 
+
}
}
-
 
+
////////////////////////CONFIGURATION WIFI///////////////////////////////////////////////
-
void setupWiFi() //reglage du reseau wifi emis par le WemosD1 mini
+
void configDuWifi()// Fonction de configuratio du Wifi
-
{
+
   WiFi.mode(WIFI_AP); // le wemos est en mode "Point d'Accès" (il déploie un réseau wifi)
-
   WiFi.mode(WIFI_AP);
+
   WiFi.softAP(nomDuReseau, motDePasse, 2); // on démarre le "Point d'Accès".
-
  uint8_t mac[WL_MAC_ADDR_LENGTH];
+
   MDNS.begin(nomDuReseau);                // gérer les DNS ce qui rendra votre petit bot accessible
-
   WiFi.softAPmacAddress(mac);
+
  MDNS.addService("http", "tcp", 80);     // via http://nomDuReseau.local
-
   String macID = String(mac[WL_MAC_ADDR_LENGTH - 2], HEX) +
+
   IPAddress monIP = WiFi.softAPIP();       // on récupère l'adresse IP du petit Bot
-
                String(mac[WL_MAC_ADDR_LENGTH - 1], HEX);
+
   Serial.print("Adresse IP de ce Point d'Accès : ");
-
   macID.toUpperCase();
+
   Serial.println(monIP);                   // on l'écrit sur le moniteur série
-
  String AP_NameString = "PetitBot"; //nom du reseau
+
   GestionDesClics();
-
 
+
  monServeur.begin();                         //Démarrage du monServeur
-
   char AP_NameChar[AP_NameString.length() + 1];
+
   Serial.println("Serveur HTTP démarré");
-
   memset(AP_NameChar, 0, AP_NameString.length() + 1);
+
  return;                                  // on retourne à l'endroit ou la fonction a été appelée.
-
 
+
-
   for (int i = 0; i < AP_NameString.length(); i++)
+
-
    AP_NameChar[i] = AP_NameString.charAt(i);
+
-
 
+
-
   WiFi.softAP(AP_NameChar, WiFiAPPSK, 7);
+
}
}
-
 
-
void initHardware()
 
-
{
 
-
  Serial.begin(115200); //ouvre une connection serie pour monitorer le fonctionnement du code quand on reste branche a l'ordinateur
 
-
}
 
</pre>
</pre>
-
Un autre programme avec la led qui s'allume lorsque le petit bot est allumé !
+
==Utiliser le petit bot avec SNAP!==
-
<pre>
+
téléchargez les exemples de programme ici : https://github.com/antonydbzh/petitbot/archive/master.zip
-
///////////////
+
-
// Petit Bot //
+
-
///////////////
+
-
// Un programme pedagogique des petits debrouillards ?=+ pour gerer le robot "Petit Bot"
+
-
// Voir sur http://wikidebrouillard.org/index.php?title=Petit_Bot_un_robot_controlable_en_Wifi
+
-
// Ce programme est inspire de : http://www.esp8266.com/viewtopic.php?f=29&t=6419#sthash.gd1tJhwU.dpuf
+
-
// Sous licence CC-By-Sa
+
-
// Par des gens bien
+
-
#include <ESP8266WiFi.h> // on appelle la bibliotheque qui gere le WemosD1 mini
+
== '''Liens avec d'autres réalisation''' ==
-
//////////////////////////
+
-
//  Definition du WiFi //
+
-
//////////////////////////
+
-
const char WiFiAPPSK[] = ""; //C'est le mot de passe du wifi "petit bot"
+
-
String macID;
+
-
/////////////////////////////
 
-
// Attribution des broches //
 
-
/////////////////////////////
 
-
 
-
#include <Servo.h> //on appelle la bibliotheque qui gere les servomoteurs
 
-
 
-
Servo monservo1; //nom du servo qui gere la premiere roue
 
-
Servo monservo2; //seconde roue
 
-
int ledPin = 2; // assign pin 2 for LED (GPIO2)
 
-
 
-
WiFiServer server(80);
 
-
 
-
void setup()
 
-
{
 
-
  initHardware();
 
-
  setupWiFi();
 
-
  server.begin();
 
-
  monservo2.detach();
 
-
  monservo1.detach();
 
-
  pinMode(LED_BUILTIN, OUTPUT);  //
 
-
 
-
  pinMode(ledPin, OUTPUT);
 
-
  digitalWrite(ledPin, LOW);
 
-
 
-
}
 
-
 
-
void loop()
 
-
{
 
-
  // Vérifie si il y a navigateur connecte
 
-
  WiFiClient client = server.available();
 
-
  if (!client) {
 
-
    return;
 
-
  }
 
-
  // allume la led intgrée (qui devrait rester allumée)
 
-
  digitalWrite(ledPin, LOW);
 
-
  // Lit la premiere ligne de la requete
 
-
  String req = client.readStringUntil('\r');
 
-
 
 
-
  client.flush();
 
-
 
-
  // affecte une valeur a "val" suivant la requete
 
-
  int val = -1;
 
-
 
-
  if (req.indexOf("/stop") != -1)
 
-
    val = 0;
 
-
  else if (req.indexOf("/avance") != -1)
 
-
    val = 1;
 
-
  else if (req.indexOf("/recule") != -1)
 
-
    val = 2;
 
-
  else if (req.indexOf("/gauche") != -1)
 
-
    val = 3;
 
-
  else if (req.indexOf("/droite") != -1)
 
-
    val = 4;
 
-
 
-
  // Prepare la page web de réponse. on commence par le "header" commun; (le code HTML sera ecrit dans la chaine de carcatere s).
 
-
  String s = "HTTP/1.1 200 OK\r\n";
 
-
  s += "Content-Type: text/html\r\n\r\n";
 
-
  s += "<!DOCTYPE HTML>\r\n";
 
-
  s += "<html>\r\n";
 
-
 
 
-
  s += "<center>";
 
-
  s += "<h1 style=\"font-size:300%;\"\> Le petit bot ";
 
-
 
-
  // on va finaliser la chaine de caracteres et envoyer les instructions
 
-
 
-
  if (val !=0 )
 
-
  {
 
-
  monservo1.attach(5);
 
-
  monservo2.attach(4);
 
-
 
-
  }
 
-
 
 
-
  if (val == 2 ) //Recule
 
-
  {
 
-
    s += " recule ";      //comme les servomoteurs sont colles un dans un sens et le second dans l'autre sens, il faut leur donner a chacun des instructions inverses.
 
-
    monservo2.write(0);  //servo 2 roule vers l'arriere.
 
-
    monservo1.write(180); //servo 1 roule vers l'arriere.
 
-
  }
 
-
  if (val == 1)//Avance
 
-
  {
 
-
    s += " avance ";
 
-
    monservo2.write(180); //vers l'avant.
 
-
    monservo1.write(0);  //vers l'avant.
 
-
  }
 
-
  if (val == 0)//stop
 
-
  {
 
-
    s += " est a l'arret ";
 
-
    monservo1.detach();  //stop
 
-
    monservo2.detach();  //stop
 
-
  }
 
-
  if (val == 3)//tourne a gauche
 
-
  {
 
-
    s += " tourne a gauche "; //Pour faire tourner, il suffit qu'une roue tourne dans un sens et la seconde dans le sens inverse
 
-
    monservo1.write(180);
 
-
    monservo2.write(180);    //vers l'arriere.
 
-
  }
 
-
  if (val == 4)//tourne a droite
 
-
  {
 
-
    s += " tourne a droite ";
 
-
    monservo1.write(0);  //vers l'arriere.
 
-
    monservo2.write(0);
 
-
  }
 
-
 
-
  s += "</h1>";
 
-
  s += "<br>"; //aller a la ligne
 
-
  s += "<br>"; //aller a la ligne
 
-
  s += "<a href=\"/stop\"\"><button style=\"font-size:200%; width: 18%\"\>Stop </button></a>\r\n";// creer un boutton "Stop"
 
-
  s += "<a href=\"/avance\"\"><button style=\"font-size:200%; width: 18%\"\>Avance </button></a>\r\n";
 
-
  s += "<a href=\"/recule\"\"><button style=\"font-size:200%; width: 18%\"\>Recule </button></a>\r\n";
 
-
  s += "<a href=\"/droite\"\"><button style=\"font-size:200%; width: 18%\"\>Droite </button></a>\r\n";
 
-
  s += "<a href=\"/gauche\"\"><button style=\"font-size:200%; width: 18%\"\>Gauche </button></a><br />\r\n";
 
-
  s += "</center>";
 
-
 
 
-
  s += "</html>\n"; //Fin de la page Web
 
-
 
-
  // Envoie de la reponse au navigateur
 
-
  client.print(s);
 
-
  delay(1);
 
-
  Serial.println("Client disconnected");
 
-
  uint8_t macAddr[6];
 
-
  WiFi.macAddress(macAddr);
 
-
  Serial.printf("Connected, mac address: %02x:%02x:%02x:%02x:%02x:%02x\n", macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]);
 
-
  client.flush();
 
-
 
-
}
 
-
 
-
void setupWiFi() //reglage du reseau wifi emis par le WemosD1 mini
 
-
{
 
-
  WiFi.mode(WIFI_AP);
 
-
  uint8_t mac[WL_MAC_ADDR_LENGTH];
 
-
  WiFi.softAPmacAddress(mac);
 
-
  String macID = String(mac[WL_MAC_ADDR_LENGTH - 2], HEX) +
 
-
                String(mac[WL_MAC_ADDR_LENGTH - 1], HEX);
 
-
  macID.toUpperCase();
 
-
  String AP_NameString = "petitbot-emmeline"; //nom du reseau
 
-
 
-
  char AP_NameChar[AP_NameString.length() + 1];
 
-
  memset(AP_NameChar, 0, AP_NameString.length() + 1);
 
-
 
-
  for (int i = 0; i < AP_NameString.length(); i++)
 
-
    AP_NameChar[i] = AP_NameString.charAt(i);
 
-
 
-
  WiFi.softAP(AP_NameChar, WiFiAPPSK, 7);
 
-
}
 
-
 
-
void initHardware()
 
-
{
 
-
  Serial.begin(115200); //ouvre une connection serie pour monitorer le fonctionnement du code quand on reste branche a l'ordinateur
 
-
}
 
-
</pre>
 
-
 
-
== '''Liens avec d'autres réalisation''' ==
 
==='''Expériences sur Wikidébrouillard'''===
==='''Expériences sur Wikidébrouillard'''===
Ligne 570 : Ligne 263 :
[[Catégorie:Fiche à Valider]]
[[Catégorie:Fiche à Valider]]
[[Catégorie:Arduino]]
[[Catégorie:Arduino]]
 +
[[Catégorie:esp8266]]

Version actuelle en date du 21 février 2018 à 06:52

Article incomplet en cours de rédaction
Modèle:Vidéo


Sommaire

Présentation de la réalisation

Tutoriel pour construire et un petit robot contrôlable en Wifi.

Il sera contrôlable depuis un ordinateur mais aussi tablette ou smartphone, quelque soit l'appareil.

Matériel

Version imprimée en 3D

A imprimer avec une imprimante 3D

Pour imprimer partiellement (moins et ça marche aussi) :

Sans imprimante 3D

A réaliser dans du carton rigide :

  • un châssis de 12cm par 7,5cm.
  • réaliser en mode débrouille, un support pour 4 piles de 1,5V

La réalisation

Coller les différentes pièces du petit bot.

1 - l'axe des servomoteurs aux roues (en carton, imprimées en 3D, ou autre...).

2 - Les servomoteurs sont à fixer au châssis (avec du pistolet à colle par exemple.

3 - installez un marqueur à l'avant, ou une roue-bille

Fonctionnement

  • On allume l'interupteur et en quelques instant le petit Bot émet son réseau wifi.
  • Il faut se connecter à "Petit Bot" avec le mot de passe "12345678".
  • Depuis un ordi, tablette ou smartphone, ouvrir un navigateur et aller à l'IP : 192.168.4.1
  • On voit ceci, il n'y a plus qu'à cliquer

Schéma de cablage

Le code

///////////////
// Petit Bot //
///////////////
// Un programme pédagogique des petits débrouillards ?=+ pour gérer le robot "Petit Bot" 
// Voir sur http://wikidebrouillard.org/index.php?title=Petit_Bot_un_robot_controlable_en_Wifi
// Ce programme est inspire de : http://www.esp8266.com/viewtopic.php?f=29&t=6419#sthash.gd1tJhwU.dpuf
// Sous licence CC-By-Sa
// Par des gens bien

// on appelle la bibliothèque qui gère le Wemos D1 mini
#include <ESP8266WiFi.h> 

// Gestion du Wifi
#include <ESP8266WebServer.h>
#include <DNSServer.h>
#include <ESP8266mDNS.h>
#include <WiFiClient.h> 

//  Definition du WiFi 
const char *nomDuReseau = "petitbot";     // Nom du réseau wifi du petit bot
const char *motDePasse = "";    // Mot de passe du réseau wifi du petit bot
// ATTENTION - le mot de passe doit faire soit 0 caractères soit 8 ou plus sinon
// La configuration de votre réseau wifi ne se fera pas (ni mot de passe, ni nom de réseau !).
//création du monServeur
ESP8266WebServer monServeur(80);               // Création de l'objet monServeur

//Gestion des servomoteurs
#include <Servo.h>   //appel de la bibliothèque qui gère les servomoteurs
// création des servomoteurs 
Servo servogauche;   // Nom du servo qui gère la première roue
Servo servodroit;    // Seconde roue

//déclaration des Variables
//int --- en cours 
int val = -1; // Val nous sert à stocker la commande de l'utilisateur (stop, avance, ...).

void setup(){
  delay(1000);
  Serial.begin(9600); // Ouvre une connexion série pour monitorer le fonctionnement du code quand on reste branché a l'ordinateur
  Serial.println();
  Serial.println();  
  configDuWifi();
  servodroit.detach();  // Place les servos hors tension
  servogauche.detach(); 
  pinMode(LED_BUILTIN, OUTPUT);    //met la led du Wemos en sortie
  digitalWrite(LED_BUILTIN, LOW);  //met la led du Wemos sur le niveau bas ce qui l'allume.
}

void loop(){
    val = -1;
    monServeur.handleClient();
}

///////////////////////GESTION DES INSTRUCTIONS///////////////////////////
void GestionDesClics() {
  monServeur.on("/avance", HTTP_GET, []() {
  val = 1;
  Serial.println("avance");    
  redactionPageWeb();
  });

  monServeur.on("/recule", HTTP_GET, []() {
  val = 2;
  Serial.println("recule");
  redactionPageWeb();
  });

  monServeur.on("/droite", HTTP_GET, []() {
  val = 4;
  Serial.println("droite");
  redactionPageWeb();
  });
  
  monServeur.on("/gauche", HTTP_GET, []() {
  val = 3;
  Serial.println("gauche");
  redactionPageWeb();
  });

  monServeur.on("/stop", HTTP_GET, []() {
  val = 0;
  Serial.println("stop");
  redactionPageWeb();
  });
  
  monServeur.on("/", HTTP_GET, []() {
  val = -1;
  redactionPageWeb();
  });

}

///////////////////////////LA PAGE WEB DE CONROLE DU PETIT BOT/////////////////////////////////////////
void redactionPageWeb(){
  // Prépare la page web de réponse (le code HTML sera écrit dans la chaine de caractère "pageWeb").
  String pageWeb = "<!DOCTYPE HTML>\r\n";
  pageWeb += "<html>\r\n";
  pageWeb += "<center>";    //On ouvre la balise qui va centrer les boutons
  pageWeb += "<h1 style=\"font-size:300%;\"\> Le petit bot ";
  pageWeb += "<style type=\"text/css\">  body { color: #212121; background-color: #CC0C59 } </style>";

  // On finalise l'écriture de la page Web et on donne les instructions aux servos
  pageWeb += instruction(val); // pour cela on appelle la fonction "instruction"

  // On termine l'écriture de la page Web
  pageWeb += "</h1>";
  pageWeb += "<br>"; //aller à la ligne
  pageWeb += "<br>"; //aller à la ligne
  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
  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"...
  pageWeb += "<a href=\"/recule\"\"><button style=\"font-size:200%; width: 18%; background-color:#0CCC16; border-radius: 12px\"\>Recule </button></a>\r\n";
  pageWeb += "<a href=\"/droite\"\"><button style=\"font-size:200%; width: 18%; background-color:#0CCC16; border-radius: 12px\"\>Droite </button></a>\r\n";
  pageWeb += "<a href=\"/gauche\"\"><button style=\"font-size:200%; width: 18%; background-color:#0CCC16; border-radius: 12px\"\>Gauche </button></a><br />\r\n";
  pageWeb += "</center>"; // tout est centré sur la page
  pageWeb += "</html>\n"; //Fin de la page Web

  // On envoie la page web
  monServeur.send(200, "text/html", pageWeb);
  delay(1);
}

///////////////////INSTRUCTIONS/////////////////////////////////////////////////////////
String instruction(int valeur){ //Cette fonction traite les instructions qui sont reçues
  int gauche;                           // Variable dont la valeur 180 ou 0 fera tourner le servo gauche dans un sens ou l'autre
  int droite;                           // Idem pour le servo droit
  String completePage;                  // Déclaration de la chaine de caractère qui sera renvoyée par cette fonction pour compléter la page web 
  switch(valeur){                       // En fonction de la variable valeur on va donner un ordre aux servos 
    case 0 :                            // et un texte à la chaine de caractère "completePage"
    completePage = " est a l’arrêt ";
    droite = 90;
    gauche = 90;
    break;
    case 1 :
    completePage = " avance ";
    droite = 180;
    gauche = 0;
    break;
    case 2 :
    completePage = " recule ";
    droite = 0;
    gauche = 180;
    break;
    case 3 :
    completePage = " tourne a gauche ";
    droite = 180;
    gauche = 180;
    break;
    case 4 :
    completePage = " tourne a droite ";
    droite = 0;
    gauche = 0;
    break;
    // que faire du cas ou val = -1 ? marquer ici ce qui doit être fait.
  }
  servogauche.attach(D1);     // Broche D1
  servodroit.attach(D2);      // Broche D2
  servogauche.write(gauche); 
  servodroit.write(droite);
  return completePage;        // on renvoie la chaine de caractère pour compléter la page web
}
////////////////////////CONFIGURATION WIFI///////////////////////////////////////////////
void configDuWifi(){  // Fonction de configuratio du Wifi
  WiFi.mode(WIFI_AP); // le wemos est en mode "Point d'Accès" (il déploie un réseau wifi)
  WiFi.softAP(nomDuReseau, motDePasse, 2); // on démarre le "Point d'Accès".
  MDNS.begin(nomDuReseau);                 // gérer les DNS ce qui rendra votre petit bot accessible
  MDNS.addService("http", "tcp", 80);      // via http://nomDuReseau.local
  IPAddress monIP = WiFi.softAPIP();       // on récupère l'adresse IP du petit Bot
  Serial.print("Adresse IP de ce Point d'Accès : ");
  Serial.println(monIP);                   // on l'écrit sur le moniteur série
  GestionDesClics();
  monServeur.begin();                          //Démarrage du monServeur
  Serial.println("Serveur HTTP démarré");
  return;                                  // on retourne à l'endroit ou la fonction a été appelée.
}

Utiliser le petit bot avec SNAP!

téléchargez les exemples de programme ici : https://github.com/antonydbzh/petitbot/archive/master.zip

Liens avec d'autres réalisation

Expériences sur Wikidébrouillard

Voir la Catégorie

Source

C'est sur le site "Let's make robots" qu'il a été décrit initialement : http://robotshop.com/letsmakerobots/node/48201

On le trouve également sur le super site Libreduc

Applications : liens avec le quotidien

le wifi peut être utilisé pour diverses applications, ici, contrôler un robot.

Lieux propices à sa réalisation

Fablab, dans l'atelier de bidouille électronique le plus proche ?

Catégories

AR
TE

Petit Bot un robot controlable en Wifi

Rechercher

Page Discussion Historique
Powered by MediaWiki
Creative Commons - Paternite Partage a l

© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique