(→La manipulation) |
|||
Ligne 25 : | Ligne 25 : | ||
* réaliser en mode débrouille, un support pour 4 piles de 1,5V | * 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. | Coller les différentes pièces du petit bot. | ||
Ligne 33 : | Ligne 33 : | ||
3 - installez un marqueur à l'avant | 3 - installez un marqueur à l'avant | ||
+ | |||
+ | ==Le code== | ||
+ | <pre> | ||
+ | //////////////// | ||
+ | //Le Petit Bot// | ||
+ | //////////////// | ||
+ | /* un programme conçu par Julien Rat sous licence CC-By-Sa. Ce programme sert à piloter le "Petit Bot", un robot pédagogique, très peu cher, utilisé par les petits débrouillars*/ | ||
+ | |||
+ | #include <ESP8266WiFi.h> | ||
+ | |||
+ | ////////////////////// | ||
+ | //Définition du Wifi// | ||
+ | ////////////////////// | ||
+ | const char WiFiAPPSK[] = "1234567890"; //password | ||
+ | |||
+ | ////////////////////////// | ||
+ | //Définition des broches// | ||
+ | ////////////////////////// | ||
+ | |||
+ | #include <Servo.h> | ||
+ | |||
+ | Servo monservo1; | ||
+ | |||
+ | Servo monservo2; | ||
+ | |||
+ | WiFiServer server(80); | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | initHardware(); | ||
+ | setupWiFi(); | ||
+ | server.begin(); | ||
+ | monservo1.attach(5); | ||
+ | monservo2.attach(4); | ||
+ | monservo1.write(91); | ||
+ | monservo2.write(93); | ||
+ | |||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | // Regarder si un client s'est connecté | ||
+ | WiFiClient client = server.available(); | ||
+ | if (!client) { | ||
+ | return; | ||
+ | } | ||
+ | |||
+ | // Lit la première ligne de la requête | ||
+ | String req = client.readStringUntil('\r'); | ||
+ | |||
+ | client.flush(); | ||
+ | |||
+ | // Test la requête pour indentifier la consigne | ||
+ | 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. Débute par le "header" commun : | ||
+ | String s = "HTTP/1.1 200 OK\r\n"; | ||
+ | s += "Content-Type: text/html\r\n\r\n"; | ||
+ | s += "<!DOCTYPE HTML>\r\n<html>\r\n"; | ||
+ | if (req.indexOf("/commande") != -1 ) { | ||
+ | s += "<input type=\"button\" onclick=\"location.href='192.168.4.1/led/1';\" value=\" OFF \" />"; | ||
+ | s += "<input type=\"button\" onclick=\"location.href='192.168.4.1/led/0';\" value=\" ON \" />"; | ||
+ | |||
+ | } | ||
+ | // If we're setting the LED, print out a message saying we did | ||
+ | if (val == 2 ) //avance | ||
+ | { | ||
+ | s += " avance "; | ||
+ | monservo2.write(0); //avance | ||
+ | monservo1.write(180); //avance | ||
+ | } | ||
+ | if (val == 1)//this left over from the sparkfun demo, not currently used | ||
+ | { // If we're reading pins, print out those values: | ||
+ | s += " recule "; | ||
+ | monservo2.write(180); //recule | ||
+ | monservo1.write(0); //recule | ||
+ | } | ||
+ | if (val == 0)//this left over from the sparkfun demo, not currently used | ||
+ | { // If we're reading pins, print out those values: | ||
+ | s += " recule "; | ||
+ | monservo1.write(91); //recule | ||
+ | monservo2.write(93); //recule | ||
+ | } | ||
+ | if (val == 3)//this left over from the sparkfun demo, not currently used | ||
+ | { // If we're reading pins, print out those values: | ||
+ | s += " gauche "; | ||
+ | monservo1.write(180); //gauche | ||
+ | monservo2.write(180); //recule | ||
+ | } | ||
+ | if (val == 4)//this left over from the sparkfun demo, not currently used | ||
+ | { // If we're reading pins, print out those values: | ||
+ | s += " droite "; | ||
+ | monservo1.write(0); //droite | ||
+ | monservo2.write(0); //recule | ||
+ | } | ||
+ | |||
+ | |||
+ | s += "</html>\n"; | ||
+ | |||
+ | // Envoie la réponse au client | ||
+ | client.print(s); | ||
+ | delay(1); | ||
+ | Serial.println("Client disconnected"); | ||
+ | client.flush(); | ||
+ | |||
+ | } | ||
+ | |||
+ | void setupWiFi() | ||
+ | { | ||
+ | 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"; | ||
+ | |||
+ | char AP_NameChar[AP_NameString.length() + 1]; | ||
+ | memset(AP_NameChar, 0, AP_NameString.length() + 1);//zero out AP_NameChar | ||
+ | |||
+ | 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); | ||
+ | } //See more at: http://www.esp8266.com/viewtopic.php?f=29&t=6419#sthash.gd1tJhwU.dpuf | ||
+ | </pre> | ||
== '''Liens avec d'autres réalisation''' == | == '''Liens avec d'autres réalisation''' == |
Sommaire |
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.
A imprimer avec une imprimante 3D
A réaliser dans du carton rigide :
Coller les différentes pièces du petit bot.
1 - l'axe des servo-moteurs aux roues
2 - Les servos à fixer au châssis
3 - installez un marqueur à l'avant
//////////////// //Le Petit Bot// //////////////// /* un programme conçu par Julien Rat sous licence CC-By-Sa. Ce programme sert à piloter le "Petit Bot", un robot pédagogique, très peu cher, utilisé par les petits débrouillars*/ #include <ESP8266WiFi.h> ////////////////////// //Définition du Wifi// ////////////////////// const char WiFiAPPSK[] = "1234567890"; //password ////////////////////////// //Définition des broches// ////////////////////////// #include <Servo.h> Servo monservo1; Servo monservo2; WiFiServer server(80); void setup() { initHardware(); setupWiFi(); server.begin(); monservo1.attach(5); monservo2.attach(4); monservo1.write(91); monservo2.write(93); } void loop() { // Regarder si un client s'est connecté WiFiClient client = server.available(); if (!client) { return; } // Lit la première ligne de la requête String req = client.readStringUntil('\r'); client.flush(); // Test la requête pour indentifier la consigne 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. Débute par le "header" commun : String s = "HTTP/1.1 200 OK\r\n"; s += "Content-Type: text/html\r\n\r\n"; s += "<!DOCTYPE HTML>\r\n<html>\r\n"; if (req.indexOf("/commande") != -1 ) { s += "<input type=\"button\" onclick=\"location.href='192.168.4.1/led/1';\" value=\" OFF \" />"; s += "<input type=\"button\" onclick=\"location.href='192.168.4.1/led/0';\" value=\" ON \" />"; } // If we're setting the LED, print out a message saying we did if (val == 2 ) //avance { s += " avance "; monservo2.write(0); //avance monservo1.write(180); //avance } if (val == 1)//this left over from the sparkfun demo, not currently used { // If we're reading pins, print out those values: s += " recule "; monservo2.write(180); //recule monservo1.write(0); //recule } if (val == 0)//this left over from the sparkfun demo, not currently used { // If we're reading pins, print out those values: s += " recule "; monservo1.write(91); //recule monservo2.write(93); //recule } if (val == 3)//this left over from the sparkfun demo, not currently used { // If we're reading pins, print out those values: s += " gauche "; monservo1.write(180); //gauche monservo2.write(180); //recule } if (val == 4)//this left over from the sparkfun demo, not currently used { // If we're reading pins, print out those values: s += " droite "; monservo1.write(0); //droite monservo2.write(0); //recule } s += "</html>\n"; // Envoie la réponse au client client.print(s); delay(1); Serial.println("Client disconnected"); client.flush(); } void setupWiFi() { 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"; char AP_NameChar[AP_NameString.length() + 1]; memset(AP_NameChar, 0, AP_NameString.length() + 1);//zero out AP_NameChar 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); } //See more at: http://www.esp8266.com/viewtopic.php?f=29&t=6419#sthash.gd1tJhwU.dpuf
Voir la Catégorie
le wifi peut être utilisé pour diverses applications, ici, contrôler un robot.
Fablab, dans l'atelier de bidouille électronique le plus proche ?
© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique