add button event and screeens

This commit is contained in:
Your Name
2025-06-20 11:03:50 +02:00
parent 2be04b6950
commit 5a2426becb
10 changed files with 936 additions and 41 deletions

View File

@@ -1,6 +1,15 @@
# moduleair_pro_4g
# ModuleAir Pro 4G
Version Pro du ModuleAir avec CM4, SaraR4 et ecran Matrix LED p2 64x64.
**Capteurs d'air intérieur IoT avec écran LED RGB 128x64 contrôlé par bouton.**
## Fonctionnalités
- **Capteurs multi-polluants**: PM1, PM2.5, PM10, CO2, température, humidité
- **Connectivité 4G/WiFi**: Transmission automatique des données via modem SARA R4
- **Affichage LED interactif**: 4 modes d'écran commutables par bouton-poussoir
- **Interface web locale**: Configuration et visualisation en temps réel
- **Base de données SQLite**: Stockage local avec nettoyage automatique
# Installation
## General
```
@@ -144,48 +153,68 @@ Switch off on-board sound:
Add `isolcpus=3` to `/boot/firmware/cmdline.txt`
## Start matrix loop at boot
## Affichage Matrix LED avec contrôle par bouton
We can use systemd to create a service (better than con because Cron doesnt monitor the script; if it fails, it wont restart automatically.).
```
sudo nano /etc/systemd/system/matrix_display.service
Le système dispose de 4 modes d'affichage contrôlés par un bouton-poussoir connecté au GPIO6 (GND quand pressé):
### Modes d'affichage
1. **État du réseau**: Statut de connectivité 4G et WiFi avec qualité du signal
2. **Tous les capteurs**: PM1, PM2.5, PM10 et CO2 avec indicateurs de qualité
3. **CO2 + PM + Réseau**: CO2, PM2.5, PM10 et statut réseau résumé
4. **Écran noir**: Tous les pixels éteints
### Compilation des programmes d'affichage
```bash
# Compiler la bibliothèque matrix
cd /var/www/moduleair_pro_4g/matrix/lib && make
# Compiler tous les programmes d'affichage
cd /var/www/moduleair_pro_4g
g++ -I/var/www/moduleair_pro_4g/matrix/include -L/var/www/moduleair_pro_4g/matrix/lib /var/www/moduleair_pro_4g/matrix/screenNetwork/network_status.cc -o /var/www/moduleair_pro_4g/matrix/screenNetwork/network_status -lrgbmatrix -lsqlite3
g++ -I/var/www/moduleair_pro_4g/matrix/include -L/var/www/moduleair_pro_4g/matrix/lib /var/www/moduleair_pro_4g/matrix/screenSensors/displayAll4_v2.cc -o /var/www/moduleair_pro_4g/matrix/screenSensors/displayAll4_v2 -lrgbmatrix -lsqlite3
g++ -I/var/www/moduleair_pro_4g/matrix/include -L/var/www/moduleair_pro_4g/matrix/lib /var/www/moduleair_pro_4g/matrix/screenSensors/displayCO2_PM_Network.cc -o /var/www/moduleair_pro_4g/matrix/screenSensors/displayCO2_PM_Network -lrgbmatrix -lsqlite3
g++ -I/var/www/moduleair_pro_4g/matrix/include -L/var/www/moduleair_pro_4g/matrix/lib /var/www/moduleair_pro_4g/matrix/screenSensors/blank_screen.cc -o /var/www/moduleair_pro_4g/matrix/screenSensors/blank_screen -lrgbmatrix
```
and we add the following:
```
[Unit]
Description=Matrix Display Script
After=network.target
### Contrôle du système d'affichage
[Service]
ExecStart=/var/www/moduleair_pro_4g/matrix/screen_sensors_loop
WorkingDirectory=/var/www/moduleair_pro_4g/matrix
Restart=always
User=root
Group=root
```bash
# Démarrer le système avec contrôle par bouton
sudo systemctl restart moduleair-boot.service
[Install]
WantedBy=multi-user.target
# Démarrage manuel du contrôleur de bouton
sudo python3 /var/www/moduleair_pro_4g/matrix/button_screen_controller.py
# Test du bouton uniquement
sudo python3 /var/www/moduleair_pro_4g/test_button_controller.py
# Arrêter le système
sudo systemctl stop moduleair-boot.service
# Vérifier le statut
sudo systemctl status moduleair-boot.service
```
Then Reload systemd and Enable the Service:
```
sudo systemctl daemon-reload
sudo systemctl enable matrix_display.service
sudo systemctl start matrix_display.service
```
You can check/restart/stop this service (restart combines stop and start)
```
sudo systemctl status matrix_display.service
sudo systemctl stop matrix_display.service
sudo systemctl restart matrix_display.service
```
### Fonctionnalités du contrôleur
- **Debounce 500ms**: Évite les pressions accidentelles multiples
- **Redémarrage automatique**: Relance le programme d'affichage s'il plante
- **Arrêt propre**: Nettoyage GPIO et termination des processus
- **Gestion des signaux**: Réagit aux signaux SIGINT/SIGTERM
### Branchement du bouton
Connecter un bouton-poussoir entre GPIO6 et GND. Le système utilise une résistance de pull-up interne, donc aucune résistance externe n'est nécessaire.
## Hardware requis
- **Raspberry Pi CM4** avec connecteur GPIO
- **Bouton-poussoir** connecté GPIO6 → GND
- **Écran Matrix LED 128x64** FM6126A
- **Capteur NPM** (particules) via Modbus RTU
- **Capteur MH-Z19** (CO2) via UART
- **Module BME280** (T/H/P) via I2C
- **Modem SARA R4** (4G) via UART
- **Module RTC DS3231** via I2C