Distributeur de croquettes connecté en Zigbee utilisant un ESP32-H2 et un servo moteur SG90 pour déverrouiller à distance l'accès aux croquettes.
Ce projet permet de contrôler à distance l'accès aux croquettes de vos chats via votre système domotique (Home Assistant, Zigbee2MQTT, etc.). Le dispositif fonctionne comme un interrupteur Zigbee On/Off qui contrôle un servo moteur.
- ON : Déverrouille le distributeur (servo à 90°)
- OFF : Verrouille le distributeur (servo à 0°)
- ESP32-H2 (compatible Zigbee)
- Servo moteur SG90
- Alimentation 5V pour le servo
- Câbles de connexion
| Pin Servo | Connexion |
|---|---|
| Signal (Orange/Jaune) | GPIO 2 (configurable) |
| VCC (Rouge) | 5V |
| GND (Marron/Noir) | GND |
⚠️ Important : Le servo nécessite une alimentation 5V suffisante. N'alimentez pas directement depuis le GPIO de l'ESP32.
- ESP-IDF v5.4.1 ou supérieur
- Python 3.11 ou supérieur
# Configurer la cible ESP32-H2
idf.py set-target esp32h2
# (Optionnel) Configurer les paramètres
idf.py menuconfig
# Compiler le projet
idf.py build
# Effacer la flash et flasher le firmware
idf.py erase-flash
idf.py flash monitorPar défaut, le servo est connecté au GPIO 2. Pour changer cela, éditez le fichier main/servo_driver.h :
#define SERVO_GPIO GPIO_NUM_X // Remplacez X par votre GPIOSi votre mécanisme nécessite des angles différents, modifiez dans main/servo_driver.h :
#define SERVO_ANGLE_LOCKED 0 // Position verrouillée
#define SERVO_ANGLE_UNLOCKED 90 // Position déverrouilléeÉditez main/esp_zb_feeder.h pour changer le nom du fabricant et le modèle :
#define ESP_MANUFACTURER_NAME "\x0A""Cat Feeder"
#define ESP_MODEL_IDENTIFIER "\x0D""Feeder ESP32H2"- Flashez le firmware avec
idf.py erase-flash && idf.py flash - Le dispositif démarre en mode "factory-reset"
- Activez le mode appairage sur votre coordinateur Zigbee
- L'ESP32 s'appaire automatiquement
I (xxxx) SERVO_DRIVER: Initializing servo driver on GPIO 2
I (xxxx) SERVO_DRIVER: Setting servo to LOCKED position (0°, 500 us)
I (xxxx) ESP_ZB_CAT_FEEDER: Device started up in factory-reset mode
I (xxxx) ESP_ZB_CAT_FEEDER: Start network steering
I (xxxx) ESP_ZB_CAT_FEEDER: Joined network successfully
- Activez "Permit join" dans Zigbee2MQTT
- Redémarrez l'ESP32
- Le dispositif apparaît comme "Cat Feeder" ou "Feeder ESP32H2"
- Il sera visible comme un interrupteur On/Off
- Allez dans Paramètres → Appareils et services → Zigbee Home Automation
- Cliquez sur Ajouter un appareil
- Redémarrez l'ESP32
- Le dispositif sera détecté automatiquement
Créez une automation pour distribuer les croquettes :
automation:
- alias: "Nourrir les chats"
trigger:
- platform: time
at: "08:00:00"
action:
- service: switch.turn_on
target:
entity_id: switch.cat_feeder
- delay:
seconds: 5
- service: switch.turn_off
target:
entity_id: switch.cat_feederSolution : Effacez complètement la flash et recommencez :
idf.py erase-flash
idf.py flash monitorSolution :
- Supprimez l'ancien dispositif de Home Assistant/Zigbee2MQTT
- Faites
idf.py erase-flash - Réappairez le dispositif
Vérifications :
- Le servo est-il correctement alimenté en 5V ?
- Le GPIO est-il correctement configuré ?
- Vérifiez les logs pour voir si les commandes sont reçues :
I (xxxx) ESP_ZB_CAT_FEEDER: Feeder command: UNLOCK (servo will rotate to 90°)
Solution : Ajustez les valeurs de largeur d'impulsion dans main/servo_driver.c :
#define SERVO_MIN_PULSEWIDTH_US 500 // Essayez 400-600
#define SERVO_MAX_PULSEWIDTH_US 2500 // Essayez 2400-2600Cat-feeder/
├── main/
│ ├── esp_zb_feeder.c # Logique principale Zigbee
│ ├── esp_zb_feeder.h # Configuration Zigbee
│ ├── servo_driver.c # Driver du servo moteur
│ ├── servo_driver.h # Configuration du servo
│ └── CMakeLists.txt # Configuration de compilation
├── partitions.csv # Table de partitions
├── sdkconfig.defaults # Configuration par défaut
├── CMakeLists.txt # Configuration racine
└── README.md # Ce fichier
# Voir les logs en temps réel
idf.py monitor
# Nettoyer le build
idf.py fullclean
# Flasher uniquement (sans recompiler)
idf.py flash
# Voir la taille du firmware
idf.py size
# Ouvrir le menu de configuration
idf.py menuconfigCe projet est basé sur les exemples ESP-IDF d'Espressif Systems et est sous licence Public Domain / CC0.
Les contributions sont les bienvenues! N'hésitez pas à ouvrir une issue ou une pull request.
Pour toute question ou problème :
- Consultez la documentation ESP-IDF
- Vérifiez les issues existantes sur GitHub
- Consultez le guide ESP Zigbee SDK
Fait avec ❤️ pour les chats gourmands 🐱