No description
- Python 100%
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> |
||
|---|---|---|
| .github/workflows | ||
| docs | ||
| docs_auto | ||
| src | ||
| tests | ||
| .gitignore | ||
| CHANGELOG.md | ||
| planning.md | ||
| README.md | ||
| requirements.txt | ||
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,rshellou équivalent - Bibliothèque MicroPython
umqtt.simple(incluse dans le firmware MicroPython) - Accès à un broker MQTT (testé avec Eclipse Mosquitto)
Configuration
- 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 } } config.pylit 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 l’exécution du firmware.
Installation & Déploiement
- Flasher MicroPython sur le Pico W.
- Copier tout le dossier
src/sur le Pico (viaampy/rshell). - Copier
config.jsonà la racine du Pico (via le même outil). - Lancer le script principal :
ampy --port /dev/ttyUSB0 run src/main.py
Usage
- Le main.py :
- Charge la configuration.
- Connecte le Pico au réseau Wi-Fi.
- Démarre le service MQTT (récepteur et publisher).
- Initialise le relais et le watchdog.
- Attend les commandes sur le topic
pyfire/{device_id}/cmd:- À la réception d’un message, active le relais (0.5 s), puis renvoie un ACK.
- 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 surmain.
Contribution
- Créez une branche
feature/xxx. - Ajoutez ou modifiez le code dans
src/. - Mettez à jour ou ajoutez des tests dans
tests/. - Vérifiez que tous les tests passent (
pytest). - Proposez une Pull Request.
Merci de votre participation !