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 à 15: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 += "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 += " ";
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() {
// 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
