Skip to content

MatthieuGrr/Cat-feeder

Repository files navigation

Distributeur de Croquettes Intelligent pour Chats 🐱

Distributeur de croquettes connecté en Zigbee utilisant un ESP32-H2 et un servo moteur SG90 pour déverrouiller à distance l'accès aux croquettes.

📋 Description

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°)

🛠️ Matériel Nécessaire

  • ESP32-H2 (compatible Zigbee)
  • Servo moteur SG90
  • Alimentation 5V pour le servo
  • Câbles de connexion

🔌 Schéma de Connexion

Servo SG90

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.

🚀 Installation

Prérequis

Compilation et Flash

# 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 monitor

⚙️ Configuration

Modifier le GPIO du Servo

Par 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 GPIO

Modifier les Angles du Servo

Si 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

Personnaliser les Informations du Dispositif

É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"

📡 Appairage Zigbee

Première Configuration

  1. Flashez le firmware avec idf.py erase-flash && idf.py flash
  2. Le dispositif démarre en mode "factory-reset"
  3. Activez le mode appairage sur votre coordinateur Zigbee
  4. L'ESP32 s'appaire automatiquement

Logs de Démarrage Réussi

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

🏠 Intégration Home Assistant

Avec Zigbee2MQTT

  1. Activez "Permit join" dans Zigbee2MQTT
  2. Redémarrez l'ESP32
  3. Le dispositif apparaît comme "Cat Feeder" ou "Feeder ESP32H2"
  4. Il sera visible comme un interrupteur On/Off

Avec ZHA (Zigbee Home Automation)

  1. Allez dans ParamètresAppareils et servicesZigbee Home Automation
  2. Cliquez sur Ajouter un appareil
  3. Redémarrez l'ESP32
  4. Le dispositif sera détecté automatiquement

Utilisation dans Home Assistant

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_feeder

🔧 Dépannage

Le dispositif ne s'appaire pas

Solution : Effacez complètement la flash et recommencez :

idf.py erase-flash
idf.py flash monitor

Home Assistant reprend une ancienne configuration

Solution :

  1. Supprimez l'ancien dispositif de Home Assistant/Zigbee2MQTT
  2. Faites idf.py erase-flash
  3. Réappairez le dispositif

Le servo ne bouge pas

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°)
    

Le servo vibre ou ne se positionne pas correctement

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-2600

📁 Structure du Projet

Cat-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

🔑 Commandes Utiles

# 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 menuconfig

📝 Licence

Ce projet est basé sur les exemples ESP-IDF d'Espressif Systems et est sous licence Public Domain / CC0.

🤝 Contributions

Les contributions sont les bienvenues! N'hésitez pas à ouvrir une issue ou une pull request.

📞 Support

Pour toute question ou problème :


Fait avec ❤️ pour les chats gourmands 🐱

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published