No description
Find a file
Nesquiik beb9cdb06f fix(boot): activer arm_local au démarrage si la clef est déjà en position
Après un restart silencieux avec la clef locale insérée, le relais arm_local
était laissé OFF (reset GPIO) même si kswitch.state() retournait True.
Le relais n'était réactivé que sur un changement de la clef (has_changed).

Ajout d'une activation immédiate à l'init si prearmed=True, pour que le
satellite soit physiquement préarmé dès la reconnexion.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-05 22:33:47 +02:00
.github/workflows v0.8.0 – Configuration dynamique et rechargement à chaud 2025-04-29 21:13:08 +02:00
docs v0.8.3 – Génération de la documentation 2025-05-01 15:50:23 +02:00
docs_auto chore: nettoyage du suivi git (.idea, vieux zips) et ajout docs_auto 2026-06-13 12:41:08 +02:00
src fix(boot): activer arm_local au démarrage si la clef est déjà en position 2026-07-05 22:33:47 +02:00
tests v0.8.3 – Résubscription MQTT et commandes JSON avancées 2025-05-01 15:43:06 +02:00
.gitignore chore: nettoyage du suivi git (.idea, vieux zips) et ajout docs_auto 2026-06-13 12:41:08 +02:00
CHANGELOG.md v0.8.3 – Résubscription MQTT et commandes JSON avancées 2025-05-01 15:43:06 +02:00
planning.md Initial commit 2025-04-29 20:41:09 +02:00
README.md v0.8.3 – Résubscription MQTT et commandes JSON avancées 2025-05-01 15:43:06 +02:00
requirements.txt v0.8.0 – Configuration dynamique et rechargement à chaud 2025-04-29 21:13:08 +02:00

Table de Tir PyFire Satellites Pico W

Ce dépôt contient le firmware pour les satellites basés sur Raspberry Pico W, développés en MicroPython, et conçu pour compléter le coordinateur (v1.0 gelé) du système de tir pyrotechnique.


Structure du projet

table_de_tir_satellites/
├── src/
│   ├── main.py
│   ├── config.py
│   ├── mqtt_receiver.py
│   ├── relay_control.py
│   ├── status_publisher.py
│   ├── watchdog.py
│   └── utils/
│       └── logger.py
├── tests/
│   ├── test_config.py
│   ├── test_mqtt_receiver.py
│   ├── test_relay_control.py
│   ├── test_status_publisher.py
│   ├── test_watchdog.py
│   └── __init__.py
├── docs/
│   └── architecture.md
├── .github/
│   └── workflows/
│       └── ci.yml
├── requirements.txt
├── config.json  ← Exemple ou fichier de production  
├── README.md
├── CHANGELOG.md
├── planning.md
└── .gitignore

Prérequis

  • MicroPython (≥ 1.19) sur le Pico W
  • Outils de déploiement : ampy, rshell ou équivalent
  • Bibliothèque MicroPython umqtt.simple (incluse dans le firmware MicroPython)
  • Accès à un broker MQTT (testé avec Eclipse Mosquitto)

Configuration

  1. Placez un fichier config.json à la racine du projet (côté Pico W) avant de démarrer :
    {
      "wifi": {
        "ssid": "MonReseau_WiFi",
        "password": "SuperSecret123"
      },
      "mqtt": {
        "broker": "192.168.1.10",
        "port": 1883,
        "keepalive": 60,
        "device_id": "satellite1"
      },
      "relay": {
        "pin": 15
      },
      "watchdog": {
        "timeout_s": 30
      }
    }
    
  2. config.py lit ce fichier (config.json) au démarrage, valide les paramètres, et initialise toutes les constantes utilisées par les modules.

Important : la configuration est lue une seule fois au démarrage et ne change pas pendant lexécution du firmware.


Installation & Déploiement

  1. Flasher MicroPython sur le Pico W.
  2. Copier tout le dossier src/ sur le Pico (via ampy/rshell).
  3. Copier config.json à la racine du Pico (via le même outil).
  4. Lancer le script principal :
    ampy --port /dev/ttyUSB0 run src/main.py
    

Usage

  • Le main.py :
    1. Charge la configuration.
    2. Connecte le Pico au réseau Wi-Fi.
    3. Démarre le service MQTT (récepteur et publisher).
    4. Initialise le relais et le watchdog.
    5. Attend les commandes sur le topic pyfire/{device_id}/cmd :
      • À la réception dun message, active le relais (0.5 s), puis renvoie un ACK.
    6. Réinitialise en permanence le watchdog pour éviter un reset non désiré.

Tests

  • Depuis un hôte de développement (PC) avec Python 3.x et pytest :
    pip install -r requirements.txt
    pytest -q
    
  • Les tests couvrent :
    • config.py (validation, lecture)
    • mqtt_receiver.py (connexion, subscription, callbacks, reconnexion)
    • relay_control.py (pilotage du GPIO via machine.Pin)
    • status_publisher.py (LWT, publication de statuts/ACK)
    • watchdog.py (reset, trigger avec et sans callback)

Intégration Continue

  • Une action GitHub Actions (.github/workflows/ci.yml) démarre un service Mosquitto en Docker, installe les dépendances, et exécute tous les tests à chaque push ou pull request sur main.

Contribution

  1. Créez une branche feature/xxx.
  2. Ajoutez ou modifiez le code dans src/.
  3. Mettez à jour ou ajoutez des tests dans tests/.
  4. Vérifiez que tous les tests passent (pytest).
  5. Proposez une Pull Request.

Merci de votre participation !