Le Framework IoT Industriel pour ESP32 : Modulaire, Extensible et No-Code.
OmniESP est un firmware open-source pour ESP32 conçu pour transformer n'importe quelle carte de développement en une centrale domotique intelligente. Contrairement aux solutions rigides, OmniESP repose sur une architecture Objet (C++) et une configuration JSON dynamique, permettant d'ajouter, configurer et contrôler plus de 50 types de capteurs et actionneurs sans écrire une seule ligne de code.
- 🔌 Architecture No-Code : Assignez vos capteurs (Relais, DHT22, Boutons...) directement depuis l'interface Web.
- 🚀 Extensibilité Maximale : Architecture logicielle basée sur le Polymorphisme. Un noyau unique gère une infinité de drivers.
- 💾 Persistance Intelligente : Configuration stockée en JSON via LittleFS. Redémarrage à chaud sans perte de config.
- 📱 Interface Web SPA : Tableau de bord moderne, réactif (WebSocket) et mobile-friendly.
- ⚡ Sécurité Hardware : Protection logicielle contre les conflits de PINs (GPIO).
- 🌐 API REST & WebSocket : Intégration facile avec des tiers (Applications mobiles, Scripts Python, etc.).
- 🛠️ 50+ Drivers Prêts à l'emploi : Support natif des protocoles Digital, Analog, PWM, I2C, OneWire.
- MCU : ESP32 (DevKit V1, NodeMCU, ESP32-S, etc.).
- Mémoire Flash : Minimum 4MB recommandé.
- Système de fichiers : LittleFS (Partitionnement
huge_appoumin_spiffsrecommandé).
Ce projet utilise PlatformIO (extension pour VS Code).
- Visual Studio Code
- Extension PlatformIO IDE
Assurez-vous que votre fichier de configuration contient les dépendances nécessaires :
[env:omniesp_prod]
platform = espressif32
board = esp32dev
framework = arduino
board_build.filesystem = littlefs
board_build.partitions = huge_app.csv
monitor_speed = 115200
lib_deps =
bblanchon/ArduinoJson
esphome/ESPAsyncWebServer-esphome
adafruit/Adafruit Unified Sensor
adafruit/DHT sensor library
adafruit/Adafruit NeoPixel
paulstoffregen/OneWire
milesburton/DallasTemperature
roboticsbrno/ServoESP32OmniESP nécessite deux étapes de téléversement : le code (Firmware) et l'interface Web (Filesystem).
- Connectez votre ESP32 en USB.
- Ouvrez l'onglet PlatformIO (Tête d'Alien à gauche).
- Exécutez
Platform > Upload Filesystem Image(Envoiedata/index.html). - Exécutez
General > Upload(Envoie le Firmware compilé).
Une fois flashé, connectez-vous au WiFi configuré et accédez à l'adresse IP de l'ESP32 (ex: http://192.168.1.50).
C'est la vue principale. Elle affiche l'état de tous vos appareils en temps réel.
- Relais/Lumières : Cliquez pour Allumer/Éteindre.
- Capteurs (Temp, Gaz...) : Les valeurs s'actualisent automatiquement.
- Servos/LEDs : Utilisez les curseurs pour ajuster.
Allez dans l'onglet "Appareils".
- Type : Choisissez votre composant dans la liste (ex:
Relais,DHT22,Servo). - Nom : Donnez un nom convivial (ex: "Lampe Salon").
- Pin (GPIO) : Sélectionnez le numéro du Pin où vous avez branché le fil sur l'ESP32.
- Note : Le système empêche d'utiliser deux fois le même Pin pour éviter les courts-circuits.
- Cliquez sur Ajouter.
- Une fois terminé, cliquez sur 💾 SAUVEGARDER & REDÉMARRER.
OmniESP embarque une factory intelligente capable de piloter ces périphériques :
| Type | Description | Usage Typique |
|---|---|---|
| RELAY | Sortie ON/OFF standard | Lampes, Prises, Relais |
| VALVE | Sortie ON/OFF | Électrovannes d'arrosage |
| LOCK | Sortie Impulsionnelle | Gâches électriques |
| SERVO | PWM (0-180°) | Bras robotiques, Verrous méca |
| NEOPIXEL | LED Adressables | Rubans LED RGB (WS2812B) |
| LIGHT_INV | Relais Inversé (Active LOW) | Modules relais chinois |
| Type | Description | Usage Typique |
|---|---|---|
| BUTTON | Entrée Pullup | Boutons poussoirs |
| DOOR | Contact Magnétique | Sécurité porte/fenêtre |
| PIR | Infrarouge Passif | Détection de mouvement |
| VIBRATION | Capteur SW-420 | Détection de chocs/bris de glace |
| Type | Description | Usage Typique |
|---|---|---|
| MQ2 | Gaz / Fumée | Sécurité Incendie |
| SOIL | Humidité Capacitive | Plantes / Jardin |
| LDR | Photo-résistance | Détection Jour/Nuit |
| VOLTAGE | Pont diviseur | Mesure batterie (0-3.3V) |
| Type | Description | Protocole |
|---|---|---|
| DHT11/22 | Température & Humidité | Digital One-Wire |
| DS18B20 | Température Étanche | OneWire (Dallas) |
OmniESP expose une API RESTful complète pour l'intégration.
Endpoint : /api/status
Réponse : JSON contenant tous les devices et leurs valeurs.
{
"devices": [
{ "id": "relay_23", "name": "Salon", "driver": "RELAY", "pin": 23, "val": { "val": 1, "human": "ON" } },
{ "id": "dht_4", "name": "Temp", "driver": "DHT22", "pin": 4, "val": { "temp": 24.5, "hum": 60 } }
]
}Endpoint : /api/control
Paramètres (Query ou Body) :
id: L'identifiant du device (ex:relay_23).cmd: La commande (toggle,set).val: (Optionnel) La valeur (ex:1pour ON,90pour Servo).
Exemple cURL :
# Allumer la lampe
curl -X POST "http://ip-esp/api/control?id=relay_23&cmd=set&val=1"Endpoint : /api/config
Body : JSON complet de la configuration (Devices + Settings).
Utilisé par l'interface Web pour la sauvegarde.
OmniESP/
├── data/ # Fichiers Web (Interface)
│ └── index.html # Le Dashboard (HTML/JS/CSS)
├── src/
│ ├── main.cpp # Point d'entrée, WebServer, API
│ └── OmniDrivers.h # Le Cœur : Classes Drivers & Factory
├── platformio.ini # Configuration du Build & Libs
└── README.md # Ce fichier
Les contributions sont les bienvenues ! Pour ajouter un nouveau driver :
- Définissez la classe dans
OmniDrivers.h(héritez deDevice). - Ajoutez la condition dans
DeviceFactory::create. - Ajoutez l'option dans le
<select>du fichierindex.html. - Compilez !
Auteur : NeoRak
Licence : MIT