{"id":21887478,"url":"https://github.com/papsdroidfr/esp32-web-serveur","last_synced_at":"2026-05-01T21:35:13.804Z","repository":{"id":204717784,"uuid":"712500592","full_name":"papsdroidfr/ESP32-WEB-SERVEUR","owner":"papsdroidfr","description":"ESP32 WEB Serveur","archived":false,"fork":false,"pushed_at":"2023-10-31T16:56:24.000Z","size":141,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-07T06:36:02.287Z","etag":null,"topics":["esp32","esp32-c3","micropython-esp32","pybstick","web","webserver"],"latest_commit_sha":null,"homepage":"https://papsdroidfr.github.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/papsdroidfr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-10-31T15:37:01.000Z","updated_at":"2024-05-28T02:27:33.000Z","dependencies_parsed_at":"2023-10-31T17:45:16.909Z","dependency_job_id":null,"html_url":"https://github.com/papsdroidfr/ESP32-WEB-SERVEUR","commit_stats":null,"previous_names":["papsdroidfr/esp32-web-serveur"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/papsdroidfr/ESP32-WEB-SERVEUR","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/papsdroidfr%2FESP32-WEB-SERVEUR","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/papsdroidfr%2FESP32-WEB-SERVEUR/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/papsdroidfr%2FESP32-WEB-SERVEUR/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/papsdroidfr%2FESP32-WEB-SERVEUR/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/papsdroidfr","download_url":"https://codeload.github.com/papsdroidfr/ESP32-WEB-SERVEUR/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/papsdroidfr%2FESP32-WEB-SERVEUR/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32513938,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["esp32","esp32-c3","micropython-esp32","pybstick","web","webserver"],"created_at":"2024-11-28T11:10:25.764Z","updated_at":"2026-05-01T21:35:13.785Z","avatar_url":"https://github.com/papsdroidfr.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ESP32 WEB SERVEUR\n\nCe 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/).\nJe 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.\n\n## Software\nIl 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.\n* \\__init__.py: initialisation du module\n* config.py: variables globales utilisées par le module\n* log.py: gestion des messages\n* RGBLed.py: gestion de la led RGB qui par défaut est sur la pin 8 de l'ESP32.\n* serveur.py: gestion du serveur web avec une page HTML par défaut \"hello world\"\n* wifi.py: gestion du WIFI.\n\n##  Usage\nIl faut dans un premier temps configurer la connection au WIFI dans **web/config.py**.\nJe vous encourage à déclarer un wifi invité sur votre box pour éviter d'utiliser le mot de passe de votre wifi privé.\n\nla classe Serveur doit être initialisée avec 3 variables:\n* une intance de la classe **Wifi**\n* 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\n* 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 ... \n\nLors de la connection wifi, la led va avoir plusieurs status et des messages sont affichés dans la console:\n* **bleu clignotant**: connection wifi en cours\n* **vert**: connection wifi établie\n* **rouge**: connexion wifi refusée ou inexistante.\n\nQuand le serveur web est démarré, son adresse est affichée:\n![console](_materials/console.png)\n\n## Exemples\n\nCe 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. \n\n```python\nfrom web.wifi import Wifi\nfrom web.serveur import Serveur\n\n#connection to my WIFI_SSID defined into web.config\nmy_wifi = Wifi()\nprint(my_wifi.scan_networks())\nwhile not my_wifi.is_connected:\n    my_wifi.connect()\n\n#start web serveur\nmy_serveur = Serveur(wifi=my_wifi)\n```\n\n![helloworld](_materials/helloworld.png)\n\nCe second programme va générer une page HTML avec deux boutons de commande pour allumer et étteindre la LED de l'ESP32. \nCette 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)\n\n```python\nfrom web.wifi import Wifi\nfrom web.serveur import Serveur\nfrom web.config import LED\nimport time\n\n#connection to my WIFI_SSID defined into web.config\nmy_wifi = Wifi()\nprint(my_wifi.scan_networks())\nwhile not my_wifi.is_connected:\n    my_wifi.connect()\n    time.sleep(0.5)\n\ndef my_html_page() -\u003e str:\n      if LED.is_on:\n        led_state=\"ON\"\n      else:\n        led_state=\"OFF\"\n  \n      html = \"\"\"\n        \u003chtml\u003e\n            \u003chead\u003e\n                \u003ctitle\u003eESP32-C3 Web Server\u003c/title\u003e \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\"\u003e\n                \u003clink rel=\"icon\" href=\"data:,\"\u003e\n                \u003cstyle\u003ehtml{font-family: Helvetica; display:inline-block; margin: 0px auto; text-align: center;}\n                    h1{color: #0F3376; padding: 2vh;}\n                    p{font-size: 1.5rem;}\n                    .button{display: inline-block; background-color: #e7bd3b; border: none; \n                        border-radius: 4px; color: white;padding: 16px 40px; text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}\n                    .button2{background-color: #4286f4;}\n                \u003c/style\u003e\n            \u003c/head\u003e\n        \n            \u003cbody\u003e\n                \u003ch1\u003eESP32-C3 Web Server\u003c/h1\u003e \n                \u003cp\u003eLed state: \u003cstrong\u003e\"\"\" + led_state + \"\"\"\u003c/strong\u003e\u003c/p\u003e\n                \u003cp\u003e\u003ca href=\"/?led=on\"\u003e\u003cbutton class=\"button\"\u003eON\u003c/button\u003e\u003c/a\u003e\u003c/p\u003e\n                \u003cp\u003e\u003ca href=\"/?led=off\"\u003e\u003cbutton class=\"button button2\"\u003eOFF\u003c/button\u003e\u003c/a\u003e\u003c/p\u003e\n            \u003c/body\u003e\n        \u003c/html\u003e\n        \"\"\"\n      return html\n\ndef my_exec_request(request:str) -\u003eNone:\n    if request.find('GET /?led=on') \u003e -1:\n        LED.color((32,0,0)) #green color\n    elif request.find('GET /?led=off') \u003e -1:\n        LED.off()  \n\n#start web serveur\nmy_serveur = Serveur(wifi=my_wifi, gen_html=my_html_page, exec_esp32 = my_exec_request)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpapsdroidfr%2Fesp32-web-serveur","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpapsdroidfr%2Fesp32-web-serveur","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpapsdroidfr%2Fesp32-web-serveur/lists"}