Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/papsdroidfr/esp32-web-serveur
https://github.com/papsdroidfr/esp32-web-serveur
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/papsdroidfr/esp32-web-serveur
- Owner: papsdroidfr
- License: gpl-3.0
- Created: 2023-10-31T15:37:01.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2023-10-31T16:56:24.000Z (about 1 year ago)
- Last Synced: 2023-11-01T16:42:18.952Z (about 1 year ago)
- Language: Python
- Size: 138 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ESP32 WEB SERVEUR
Ce module micropython permet de mettre en place un serveur WEB sur un ESP32-C3 équipé d'une LED RGB comme une [PYBSTICK-ESP32-C3](https://papsdroidfr.github.io/configuration/Pybstick-C3/).
Je me suis inspiré de [cet article](https://randomnerdtutorials.com/esp32-esp8266-micropython-web-server/) qui explique comment écrire un script pour allumer ou éteindre une led via une page HTML.## Software
Il faut importer tout le **module web** à la racine de son ESP32-C3: créer le dossier **\web** et y importer tous les programmes du module.
* \__init__.py: initialisation du module
* config.py: variables globales utilisées par le module
* log.py: gestion des messages
* RGBLed.py: gestion de la led RGB qui par défaut est sur la pin 8 de l'ESP32.
* serveur.py: gestion du serveur web avec une page HTML par défaut "hello world"
* wifi.py: gestion du WIFI.## Usage
Il faut dans un premier temps configurer la connection au WIFI dans **web/config.py**.
Je vous encourage à déclarer un wifi invité sur votre box pour éviter d'utiliser le mot de passe de votre wifi privé.la classe Serveur doit être initialisée avec 3 variables:
* une intance de la classe **Wifi**
* une fonction **gen-html()** qui génère le code HTML affiché de manière dynamique pour pouvoir afficher des informations captées par l'ESP32
* une fonction **exec_esp32(request)** qui va faire éxécuter des actions à l'ESP32 (commme allumer ou éteindre une LED) en fonction du paramètre request (string) passé. Cette fonction va rechercher des mots clés dans la request reçue (le format est "GET /?xxxxx" pour décider quelle action entreprendre. On peut imaginer ainsi pouvoir commander des moteurs, des leds etc ...Lors de la connection wifi, la led va avoir plusieurs status et des messages sont affichés dans la console:
* **bleu clignotant**: connection wifi en cours
* **vert**: connection wifi établie
* **rouge**: connexion wifi refusée ou inexistante.Quand le serveur web est démarré, son adresse est affichée:
![console](_materials/console.png)## Exemples
Ce 1er programme va générer une page HTML qui affiche "hello world": c'est le programme gen-html() par défaut utilisé par le module quand on ne lui spécifie rien.
```python
from web.wifi import Wifi
from web.serveur import Serveur#connection to my WIFI_SSID defined into web.config
my_wifi = Wifi()
print(my_wifi.scan_networks())
while not my_wifi.is_connected:
my_wifi.connect()#start web serveur
my_serveur = Serveur(wifi=my_wifi)
```![helloworld](_materials/helloworld.png)
Ce second programme va générer une page HTML avec deux boutons de commande pour allumer et étteindre la LED de l'ESP32.
Cette fois-ci nous définissons le générateur de code HTML avec la fonction **def my_html_page()** et les actions en réponse de l'ESP32 sont définies dans la fonction **def my_exec_request(request)** qui sont toutes deux passées en paramètre lors de la création de la variable my_serveur = Serveur(wifi=my_wifi, gen_html=my_html_page, exec_esp32 = my_exec_request)```python
from web.wifi import Wifi
from web.serveur import Serveur
from web.config import LED
import time#connection to my WIFI_SSID defined into web.config
my_wifi = Wifi()
print(my_wifi.scan_networks())
while not my_wifi.is_connected:
my_wifi.connect()
time.sleep(0.5)def my_html_page() -> str:
if LED.is_on:
led_state="ON"
else:
led_state="OFF"
html = """
ESP32-C3 Web Server
html{font-family: Helvetica; display:inline-block; margin: 0px auto; text-align: center;}
h1{color: #0F3376; padding: 2vh;}
p{font-size: 1.5rem;}
.button{display: inline-block; background-color: #e7bd3b; border: none;
border-radius: 4px; color: white;padding: 16px 40px; text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}
.button2{background-color: #4286f4;}
ESP32-C3 Web Server
Led state: """ + led_state + """
"""
return htmldef my_exec_request(request:str) ->None:
if request.find('GET /?led=on') > -1:
LED.color((32,0,0)) #green color
elif request.find('GET /?led=off') > -1:
LED.off()#start web serveur
my_serveur = Serveur(wifi=my_wifi, gen_html=my_html_page, exec_esp32 = my_exec_request)
```