ENIB 2026 :Gestion de toilettes : Différence entre versions
(→Mettre du code Arduino) |
(→Mettre du code Arduino) |
||
| Ligne 93 : | Ligne 93 : | ||
delay(50); // debounce | delay(50); // debounce | ||
} | } | ||
| + | |||
| + | |||
| + | |||
| + | |||
//code de la carte du receiver | //code de la carte du receiver | ||
#include <esp_now.h> | #include <esp_now.h> | ||
Version du 22 janvier 2026 à 11:52
Titre de la fiche expérience :
Sommaire
description (résumé)
éventuelle photo de l'équipe
Introduction
éventuelle vidéo
outil et matériel
Pour mener à bien ce projet nous eûmes besoin de deux ESP32, ainsi que deux servomoteurs, de deux câbles USB, d'une breadboard, d'un boutton poussoir, d'une dizaine de fils
fichiers à joindre
code, ficher d'impression 3D, de découpe laser ou vinyle, ... Fichier:Gestion de toilettes.pdf
Mettre du code Arduino
1
2 //code de la carte du sender
3
4 #include <esp_now.h>
5 #include <WiFi.h>
6
7 #define buttonPin 18
8 #define ledPin 4
9
10 bool systemState = false;
11 bool lastButtonState = HIGH;
12
13 uint8_t broadcastAddress1[] = {0x20,0xe7,0xc8,0xac,0xb1,0x48};
14 esp_now_peer_info_t peerInfo;
15
16 // Callback
17 void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
18 Serial.print("Send status: ");
19 Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Success" : "Fail");
20 }
21
22 void setup() {
23 Serial.begin(115200);
24
25 pinMode(buttonPin, INPUT_PULLUP);
26 pinMode(ledPin, OUTPUT);
27
28 WiFi.mode(WIFI_STA);
29
30 if (esp_now_init() != ESP_OK) {
31 Serial.println("ESP-NOW init failed");
32 return;
33 }
34
35 esp_now_register_send_cb(OnDataSent);
36
37 memcpy(peerInfo.peer_addr, broadcastAddress1, 6);
38 peerInfo.channel = 0;
39 peerInfo.encrypt = false;
40
41 if (esp_now_add_peer(&peerInfo) != ESP_OK) {
42 Serial.println("Failed to add peer");
43 }
44 }
45
46 void loop() {
47 char message = '2'; // default value
48 bool buttonState = digitalRead(buttonPin);
49
50 // Detect button press (falling edge)
51 if (lastButtonState == HIGH && buttonState == LOW) {
52 systemState = !systemState;
53
54 if (systemState) {
55 digitalWrite(ledPin, 0);
56 message = '1';
57 } else {
58 digitalWrite(ledPin, 1);
59 message = '0';
60 }
61
62 esp_err_t result = esp_now_send(
63 broadcastAddress1,
64 (uint8_t *)&message,
65 sizeof(message)
66 );
67
68 if (result == ESP_OK) {
69 Serial.print("Sent: ");
70 Serial.println(message);
71 } else {
72 Serial.println("Send error");
73 }
74 }
75
76 lastButtonState = buttonState;
77 delay(50); // debounce
78 }
79
80
81
82
83 //code de la carte du receiver
84 #include <esp_now.h>
85 #include <WiFi.h>
86 #include <ESP32Servo.h>
87 #define led1 18
88 #define servoPin 5
89 Servo myServo;
90
91 // Callback function executed when data is received
92 void OnDataRecv(const esp_now_recv_info_t *recv_info, const uint8_t *incomingData, int len) {
93 if (len > 0) {
94 char receivedChar = incomingData[0]; // extract the first byte
95
96 // Convert MAC to string
97 char macStr[18];
98 snprintf(macStr, sizeof(macStr), "%02x:%02x:%02x:%02x:%02x:%02x",
99 recv_info->src_addr[0], recv_info->src_addr[1], recv_info->src_addr[2],
100 recv_info->src_addr[3], recv_info->src_addr[4], recv_info->src_addr[5]);
101
102 Serial.print("Received from: ");
103 Serial.println(macStr);
104 Serial.print("Character received: ");
105 Serial.println(receivedChar);
106 if(receivedChar=='1'){
107 digitalWrite(led1, 1);
108
109 myServo.write(180);
110 }
111 else if(receivedChar=='0'){
112 digitalWrite(led1, 0);
113
114 myServo.write(0);
115 }
116 else{
117 for (int i=0;i<180;i+=10){
118 myServo.write(i);
119 digitalWrite(led1, 0);
120 delay(1000);
121 digitalWrite(led1, 1);
122 }
123 }
124
125 }
126 }
127
128 void setup() {
129 Serial.begin(115200);
130
131 // Set device as a Wi-Fi Station
132 WiFi.mode(WIFI_STA);
133
134 // Initialize ESP-NOW
135 if (esp_now_init() != ESP_OK) {
136 Serial.println("Error initializing ESP-NOW");
137 return;
138 }
139
140 // Register callback for receiving data
141 esp_now_register_recv_cb(OnDataRecv);
142
143 Serial.println("ESP-NOW Receiver Ready");
144 pinMode(led1,OUTPUT);
145 myServo.attach(servoPin);
146 myServo.write(0); // position initiale du servo
147 digitalWrite(led1,0); // éteindre la led
148 }
149
150 void loop() {
151 // Nothing needed here; data is handled in the callback
152 }
é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
- Rédаctiоn et illustratiоn :
Pоur tоus vоs trаvauх, qu'ils sоient écrits оu visuels, l'utilisatiоn de l'intеlligеnce artificiеllе générativе, que сe sоit pоur le teхte оu les images, n'еst pas conseillé.
- Prоgrammаtiоn :
En сe qui cоncernе la prоgrаmmatiоn, il est еssentiеl de ne pаs faire dе l'IA vоtrе prеmier rеcоurs. Cоncеntrеz-vоus d'abоrd sur vоtre prоpre lоgiquе, votre experience еt lеs ressоurcеs disponibles.
- Transpаrence et dосumеntatiоn :
Si vоus utilisеz l'IA pоur déblоquer оu améliоrеr une pаrtiе de vоtre cоdе, il est cruciаl de l'indiquеr сlairеmеnt dans vоtre dосumentatiоn tеchniquе.
- Traçabilité :
Chаque ехtrait de cоde généré avес l'аidе de l'IA dоit êtrе accоmpagné de la sоurce, ainsi que du prоmpt eхact qui a été utilisé pоur sа créatiоn, afin d'аssurеr une évaluatiоn clаire dе vоtre prоcessus.
Elément de présentation
je met ici le document de présentation de mon projet