From bd49b7949e3a1846b1e1fe00267d899246bc6738 Mon Sep 17 00:00:00 2001 From: Gamenight77 Date: Wed, 23 Apr 2025 10:22:02 +0200 Subject: [PATCH] Add WiFi access point functionality and client management to ESP32 code --- .../esp32_code/Wifi_ap/Wifi_ap.ino | 106 ++++++++++++++++++ .../blink_led_test/blink_led_test.ino | 11 ++ Semaine_2/Projet_esp32/protocole_esp_fpga.md | 63 +++++++++++ 3 files changed, 180 insertions(+) create mode 100644 Semaine_2/Projet_esp32/esp32_code/Wifi_ap/Wifi_ap.ino create mode 100644 Semaine_2/Projet_esp32/esp32_code/blink_led_test/blink_led_test.ino create mode 100644 Semaine_2/Projet_esp32/protocole_esp_fpga.md diff --git a/Semaine_2/Projet_esp32/esp32_code/Wifi_ap/Wifi_ap.ino b/Semaine_2/Projet_esp32/esp32_code/Wifi_ap/Wifi_ap.ino new file mode 100644 index 0000000..6d27bba --- /dev/null +++ b/Semaine_2/Projet_esp32/esp32_code/Wifi_ap/Wifi_ap.ino @@ -0,0 +1,106 @@ +#include +#include +#include "esp_wifi.h" + +const char* ssid = "ESP32-Louis"; +const char* password = "motdepasse"; + +WebServer server(80); + +void handleRoot() { + digitalWrite(2,HIGH); + wifi_sta_list_t sta_list; + esp_wifi_ap_get_sta_list(&sta_list); + + String page = ""; + page += ""; + page += ""; + page += ""; + page += "ESP32"; + page += ""; + page += ""; + page += ""; + page += "

Appareils connectés à l'ESP32

"; + page += "
    "; + + page += "
      "; + + for (int i = 0; i < sta_list.num; i++) { + const wifi_sta_info_t& client = sta_list.sta[i]; + char macStr[18]; + snprintf(macStr, sizeof(macStr), + "%02X:%02X:%02X:%02X:%02X:%02X", + client.mac[0], client.mac[1], client.mac[2], + client.mac[3], client.mac[4], client.mac[5]); + page += "
    • MAC : "; + page += macStr; + page += "
    • "; + } + + page += "
    "; + page += "

    Nombre total : " + String(sta_list.num) + "

    "; + + page += ""; + + server.send(200, "text/html", page); + digitalWrite(2,LOW); +} + +void onClientConnected(WiFiEvent_t event, WiFiEventInfo_t info) { + digitalWrite(2,HIGH); + + wifi_sta_list_t sta_list; + esp_wifi_ap_get_sta_list(&sta_list); + + for (int i = 0; i < sta_list.num; i++) { + const wifi_sta_info_t& client = sta_list.sta[i]; + char macStr[18]; + snprintf(macStr, sizeof(macStr), + "%02X:%02X:%02X:%02X:%02X:%02X", + client.mac[0], client.mac[1], client.mac[2], + client.mac[3], client.mac[4], client.mac[5]); + Serial.print("Adresse MAC : "); + Serial.println(macStr); + } + + digitalWrite(2,LOW); +} + +void onClientDisconnected(WiFiEvent_t event, WiFiEventInfo_t info) { + digitalWrite(2,HIGH); + + wifi_sta_list_t sta_list; + esp_wifi_ap_get_sta_list(&sta_list); + + for (int i = 0; i < sta_list.num; i++) { + const wifi_sta_info_t& client = sta_list.sta[i]; + char macStr[18]; + snprintf(macStr, sizeof(macStr), + "%02X:%02X:%02X:%02X:%02X:%02X", + client.mac[0], client.mac[1], client.mac[2], + client.mac[3], client.mac[4], client.mac[5]); + Serial.print("",macStr); + } + + digitalWrite(2,LOW); +} + +void setup() { + Serial.begin(115200); + WiFi.softAP(ssid, password); + + WiFi.onEvent(onClientConnected, ARDUINO_EVENT_WIFI_AP_STACONNECTED); + WiFi.onEvent(onClientDisconnected, ARDUINO_EVENT_WIFI_AP_STADISCONNECTED); + + delay(1000); // Donne un peu de temps pour démarrer le WiFi + + + server.on("/", handleRoot); + server.begin(); + + pinMode(2, OUTPUT); +} + +void loop() { + server.handleClient(); +} \ No newline at end of file diff --git a/Semaine_2/Projet_esp32/esp32_code/blink_led_test/blink_led_test.ino b/Semaine_2/Projet_esp32/esp32_code/blink_led_test/blink_led_test.ino new file mode 100644 index 0000000..1d32a21 --- /dev/null +++ b/Semaine_2/Projet_esp32/esp32_code/blink_led_test/blink_led_test.ino @@ -0,0 +1,11 @@ +void setup() { + Serial.begin(115200); + pinMode(2, OUTPUT); // LED intégrée sur beaucoup d'ESP32 +} + +void loop() { + digitalWrite(2, HIGH); + delay(500); + digitalWrite(2, LOW); + delay(500); +} diff --git a/Semaine_2/Projet_esp32/protocole_esp_fpga.md b/Semaine_2/Projet_esp32/protocole_esp_fpga.md new file mode 100644 index 0000000..273f7cf --- /dev/null +++ b/Semaine_2/Projet_esp32/protocole_esp_fpga.md @@ -0,0 +1,63 @@ +# Protocole between FPGA and ESP32 + +Ce protocole permet la communication entre le FPGA et l'ESP32 via UART, principalement pour transférer des données ou des commandes de contrôle simples. + +--- + +## Structure générale des trames + +Chaque trame est encadrée par des caractères spéciaux : + +- **STX** (Start of Text) : `0x02` +- **ETX** (End of Text) : `0x03` + +**Format de trame :** + +--- + +## Détail des commandes + +| OP_CODE | Nom | Description | Format | +|---------|---------------------------|--------------------------------------------------------------|------------------------------------------------------------------------| +| 0x01 | Wi-Fi State | Indique l'état du Wi-Fi (0 = down, 1 = up) | `0x02 0x01 [0x00/0x01] 0x03` | +| 0x02 | Connection Update | Notification de connexion ou déconnexion d’un appareil | `0x02 0x02 [0x00/0x01] [MAC_ADDR (6 bytes)] 0x03` | +| 0x03 | Request Connected Devices | Demande la liste des appareils connectés | `0x02 0x03 0x03` | +| 0x04 | Send Message | Envoie un message à un appareil connecté via son MAC | `0x02 0x04 [MAC_ADDR (6 bytes)] [LEN (1 byte)] [MESSAGE] 0x03` | + +--- + +## Détails des champs + +- **MAC_ADDR** : 6 octets représentant l’adresse MAC du destinataire. +- **LEN** : Longueur du message à envoyer (1 octet). +- **MESSAGE** : Suite d’octets de taille `LEN` représentant le message (binaire ou texte selon le contexte). + +--- + +## Exemples + +### Exemple 1 : Wi-Fi actif +``` +0x02 0x01 0x01 0x03 +``` +→ Indique que le Wi-Fi est actif. + +### Exemple 2 : Connexion d'un appareil +``` +0x02 0x02 0x01 0x12 0x34 0x56 0x78 0x9A 0xBC 0x03 +``` +→ Un appareil avec l’adresse MAC `12:34:56:78:9A:BC` vient de se connecter. + +### Exemple 3 : Envoi de message +``` +0x02 0x04 0x12 0x34 0x56 0x78 0x9A 0xBC 0x05 0x48 0x65 0x6C 0x6C 0x6F 0x03 +``` +→ Envoi du message `"Hello"` à l’appareil `12:34:56:78:9A:BC`. + +--- + +## Remarques + +- Aucune vérification CRC/Checksum n’est ajoutée pour le moment (possible amélioration future). +- Le protocole est extensible : il suffit d’ajouter de nouveaux OP_CODEs au besoin. +