forked from tanchou/Verilog
Add WiFi access point functionality and client management to ESP32 code
This commit is contained in:
106
Semaine_2/Projet_esp32/esp32_code/Wifi_ap/Wifi_ap.ino
Normal file
106
Semaine_2/Projet_esp32/esp32_code/Wifi_ap/Wifi_ap.ino
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
#include <WiFi.h>
|
||||||
|
#include <WebServer.h>
|
||||||
|
#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 += "<!DOCTYPE html>";
|
||||||
|
page += "<html>";
|
||||||
|
page += "<head>";
|
||||||
|
page += "<title>ESP32</title>";
|
||||||
|
page += "<meta charset=\"UTF-8\">";
|
||||||
|
page += "</head>";
|
||||||
|
page += "<body>";
|
||||||
|
page += "<h1>Appareils connectés à l'ESP32</h1>";
|
||||||
|
page += "<ul>";
|
||||||
|
|
||||||
|
page += "<ul>";
|
||||||
|
|
||||||
|
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 += "<li>MAC : ";
|
||||||
|
page += macStr;
|
||||||
|
page += "</li>";
|
||||||
|
}
|
||||||
|
|
||||||
|
page += "</ul>";
|
||||||
|
page += "<p>Nombre total : " + String(sta_list.num) + "</p>";
|
||||||
|
|
||||||
|
page += "</body></html>";
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
@@ -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);
|
||||||
|
}
|
63
Semaine_2/Projet_esp32/protocole_esp_fpga.md
Normal file
63
Semaine_2/Projet_esp32/protocole_esp_fpga.md
Normal file
@@ -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.
|
||||||
|
|
Reference in New Issue
Block a user