ENIB 2025 : P'tit bolide : Différence entre versions
m (AymericM a déplacé la page ENIB 2025 : Papertoy2 vers ENIB 2025 : P'tit bolide) |
(→Mettre du code Arduino) |
||
Ligne 12 : | Ligne 12 : | ||
==fichiers à joindre== | ==fichiers à joindre== | ||
code, ficher d'impression 3D, de découpe laser ou vinyle, ... | code, ficher d'impression 3D, de découpe laser ou vinyle, ... | ||
− | + | #include <ESP8266WiFi.h> | |
− | < | + | #include <ESP8266WebServer.h> |
− | # | + | #include <Servo.h> // Inclusion de la bibliothèque Servo |
− | #include < | ||
+ | |||
+ | // Informations réseau (réseau Wi-Fi existant) | ||
+ | const char* mySSID = "Formation"; // SSID de votre réseau Wi-Fi | ||
+ | const char* mySecKey = "Apdgo29200!"; // Clé Wi-Fi de votre réseau | ||
+ | |||
+ | |||
+ | // Déclaration du serveur Web | ||
+ | ESP8266WebServer myWeb(80); | ||
+ | |||
+ | |||
+ | // Pin pour contrôler les servos | ||
+ | const int servoPin1 = D4; // Pin pour le premier servo-moteur | ||
+ | const int servoPin2 = D1; // Pin pour le deuxième servo-moteur | ||
+ | |||
+ | |||
+ | // Déclaration des objets Servo | ||
+ | Servo myServo1; // Objet Servo pour contrôler le premier servo | ||
+ | Servo myServo2; // Objet Servo pour contrôler le deuxième servo | ||
+ | |||
+ | |||
+ | // Variables pour stocker la position des servos | ||
+ | int servoPosition1 = 90; // Position par défaut du premier servo | ||
+ | int servoPosition2 = 90; // Position par défaut du deuxième servo | ||
+ | |||
+ | |||
+ | // Fonction pour générer la page HTML | ||
+ | String webPage01() { | ||
+ | String p = "<html lang=fr-FR><head>\n"; | ||
+ | p += "<title>Commande des Servos</title>\n"; | ||
+ | p += "<meta charset='UTF-8'>\n"; | ||
+ | p += "<style>\n"; | ||
+ | p += "body { background-color: #000088; color: white; font-size: 25px; }\n"; | ||
+ | p += "input { width:25%; margin:10px; font-size:20px; border-radius: 5px; }\n"; | ||
+ | p += "</style>\n"; | ||
+ | p += "<script>\n"; | ||
+ | p += "function updateServoPosition1(val) {\n"; | ||
+ | p += " document.getElementById('servoValue1').innerText = val + '°';\n"; | ||
+ | p += " window.location = window.location.pathname + '?servo1=' + val;\n"; | ||
+ | p += "}\n"; | ||
+ | p += "function updateServoPosition2(val) {\n"; | ||
+ | p += " document.getElementById('servoValue2').innerText = val + '°';\n"; | ||
+ | p += " window.location = window.location.pathname + '?servo2=' + val;\n"; | ||
+ | p += "}\n"; | ||
+ | p += "</script>\n"; | ||
+ | |||
+ | |||
+ | p += "<body><center>\n"; | ||
+ | p += "<h3>Commandes Servo 1 (Pin D4)</h3>\n"; | ||
+ | |||
+ | |||
+ | // Affichage de la position actuelle du premier servo | ||
+ | p += "<p>Position actuelle du servo 1 : <span id='servoValue1'>" + String(servoPosition1) + "°</span></p>\n"; | ||
+ | |||
+ | |||
+ | // Curseur pour ajuster l'angle du premier servo | ||
+ | p += "<input type='range' min='0' max='180' value='" + String(servoPosition1) + "' onchange='updateServoPosition1(this.value)'>\n"; | ||
+ | |||
+ | |||
+ | p += "<h3>Commandes Servo 2 (Pin D1)</h3>\n"; | ||
+ | |||
+ | |||
+ | // Affichage de la position actuelle du deuxième servo | ||
+ | p += "<p>Position actuelle du servo 2 : <span id='servoValue2'>" + String(servoPosition2) + "°</span></p>\n"; | ||
+ | |||
+ | |||
+ | // Curseur pour ajuster l'angle du deuxième servo | ||
+ | p += "<input type='range' min='0' max='180' value='" + String(servoPosition2) + "' onchange='updateServoPosition2(this.value)'>\n"; | ||
+ | |||
+ | |||
+ | p += "</center></body></html>"; | ||
+ | return p; | ||
+ | } | ||
+ | |||
+ | |||
+ | // Fonction pour gérer les commandes et envoyer la page web | ||
+ | void runPage01() { | ||
+ | // Commandes pour contrôler le premier servo-moteur | ||
+ | if (myWeb.hasArg("servo1")) { | ||
+ | servoPosition1 = myWeb.arg("servo1").toInt(); // Récupère l'angle du premier servo | ||
+ | myServo1.write(servoPosition1); // Déplace le premier servo à l'angle spécifié | ||
+ | } | ||
+ | |||
+ | |||
+ | // Commandes pour contrôler le deuxième servo-moteur | ||
+ | if (myWeb.hasArg("servo2")) { | ||
+ | servoPosition2 = myWeb.arg("servo2").toInt(); // Récupère l'angle du deuxième servo | ||
+ | myServo2.write(servoPosition2); // Déplace le deuxième servo à l'angle spécifié | ||
+ | } | ||
+ | |||
+ | |||
+ | // Envoi de la page web | ||
+ | myWeb.send(200, "text/html", webPage01()); | ||
+ | } | ||
+ | |||
+ | |||
+ | // Fonction d'initialisation | ||
void setup() { | void setup() { | ||
− | + | // Initialisation de la liaison série | |
+ | Serial.begin(115200); | ||
+ | delay(100); | ||
+ | Serial.println("----------------------"); | ||
+ | Serial.println("Exemple de serveur WEB"); | ||
+ | Serial.println("----------------------"); | ||
+ | |||
+ | // Connexion au réseau Wi-Fi existant | ||
+ | Serial.print("Connexion au réseau Wi-Fi : "); | ||
+ | WiFi.begin(mySSID, mySecKey); | ||
+ | |||
+ | |||
+ | // Attendre que l'ESP8266 se connecte au réseau Wi-Fi | ||
+ | int attempts = 0; | ||
+ | while (WiFi.status() != WL_CONNECTED && attempts < 30) { // Attendre 30 secondes max | ||
+ | delay(500); | ||
+ | Serial.print("."); | ||
+ | attempts++; | ||
+ | } | ||
+ | |||
+ | |||
+ | if (WiFi.status() == WL_CONNECTED) { | ||
+ | Serial.println("\nConnexion Wi-Fi réussie!"); | ||
+ | Serial.print("Adresse IP du serveur Web : "); | ||
+ | Serial.println(WiFi.localIP()); | ||
+ | } else { | ||
+ | Serial.println("\nErreur de connexion Wi-Fi !"); | ||
+ | } | ||
+ | |||
+ | |||
+ | // Initialisation des servos | ||
+ | myServo1.attach(servoPin1); // Attache le premier servo à la broche D4 | ||
+ | myServo2.attach(servoPin2); // Attache le deuxième servo à la broche D1 | ||
+ | |||
+ | |||
+ | // Définir la page d'accueil du serveur web | ||
+ | myWeb.on("/", runPage01); | ||
+ | myWeb.begin(); | ||
} | } | ||
+ | |||
+ | // Fonction appelée en boucle | ||
void loop() { | void loop() { | ||
− | + | // Traitement des requêtes web | |
− | + | myWeb.handleClient(); | |
} | } | ||
− | |||
− | |||
==étapes de fabrication== | ==étapes de fabrication== |
Version du 20 janvier 2025 à 14:41
Titre de la fiche expérience :
Sommaire
description (résumé)
éventuelle photo de l'équipe
Introduction
éventuelle vidéo
outil et matériel
fichiers à joindre
code, ficher d'impression 3D, de découpe laser ou vinyle, ...
- include <ESP8266WiFi.h>
- include <ESP8266WebServer.h>
- include <Servo.h> // Inclusion de la bibliothèque Servo
// Informations réseau (réseau Wi-Fi existant)
const char* mySSID = "Formation"; // SSID de votre réseau Wi-Fi
const char* mySecKey = "Apdgo29200!"; // Clé Wi-Fi de votre réseau
// Déclaration du serveur Web
ESP8266WebServer myWeb(80);
// Pin pour contrôler les servos
const int servoPin1 = D4; // Pin pour le premier servo-moteur
const int servoPin2 = D1; // Pin pour le deuxième servo-moteur
// Déclaration des objets Servo
Servo myServo1; // Objet Servo pour contrôler le premier servo
Servo myServo2; // Objet Servo pour contrôler le deuxième servo
// Variables pour stocker la position des servos
int servoPosition1 = 90; // Position par défaut du premier servo
int servoPosition2 = 90; // Position par défaut du deuxième servo
// Fonction pour générer la page HTML
String webPage01() {
String p = "\n"; p += "Commande des Servos \n"; p += "\n"; p += "\n"; p += "\n"; p += "\n"; p += " "; return p;Commandes Servo 1 (Pin D4)
\n"; // Affichage de la position actuelle du premier servo p += "Position actuelle du servo 1 : " + String(servoPosition1) + "°
\n"; // Curseur pour ajuster l'angle du premier servo p += "\n"; p += "Commandes Servo 2 (Pin D1)
\n"; // Affichage de la position actuelle du deuxième servo p += "Position actuelle du servo 2 : " + String(servoPosition2) + "°
\n"; // Curseur pour ajuster l'angle du deuxième servo p += "\n"; p += "
}
// Fonction pour gérer les commandes et envoyer la page web
void runPage01() {
// Commandes pour contrôler le premier servo-moteur if (myWeb.hasArg("servo1")) { servoPosition1 = myWeb.arg("servo1").toInt(); // Récupère l'angle du premier servo myServo1.write(servoPosition1); // Déplace le premier servo à l'angle spécifié }
// Commandes pour contrôler le deuxième servo-moteur if (myWeb.hasArg("servo2")) { servoPosition2 = myWeb.arg("servo2").toInt(); // Récupère l'angle du deuxième servo myServo2.write(servoPosition2); // Déplace le deuxième servo à l'angle spécifié }
// Envoi de la page web myWeb.send(200, "text/html", webPage01());
}
// Fonction d'initialisation
void setup() {
// Initialisation de la liaison série Serial.begin(115200); delay(100); Serial.println("----------------------"); Serial.println("Exemple de serveur WEB"); Serial.println("----------------------");
// Connexion au réseau Wi-Fi existant Serial.print("Connexion au réseau Wi-Fi : "); WiFi.begin(mySSID, mySecKey);
// Attendre que l'ESP8266 se connecte au réseau Wi-Fi int attempts = 0; while (WiFi.status() != WL_CONNECTED && attempts < 30) { // Attendre 30 secondes max delay(500); Serial.print("."); attempts++; }
if (WiFi.status() == WL_CONNECTED) { Serial.println("\nConnexion Wi-Fi réussie!"); Serial.print("Adresse IP du serveur Web : "); Serial.println(WiFi.localIP()); } else { Serial.println("\nErreur de connexion Wi-Fi !"); }
// Initialisation des servos myServo1.attach(servoPin1); // Attache le premier servo à la broche D4 myServo2.attach(servoPin2); // Attache le deuxième servo à la broche D1
// Définir la page d'accueil du serveur web myWeb.on("/", runPage01); myWeb.begin();
}
// Fonction appelée en boucle
void loop() {
// Traitement des requêtes web myWeb.handleClient();
}
étapes de fabrication
indiquer autant d'étape que nécessaire, chacune illustrée par des images (photo, dessins, ...)
étape 1
étape 2
étape ...
Troubleshouting
Quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?
Sources et documentation complémentaire
Elémlent de présentation
je met ici le document de présentation de mon projet