docs(tests): test_sketches/README.md vollstaendig auf Phase-5-Stand
This commit is contained in:
parent
d5d0085d93
commit
f389a7deea
|
|
@ -1,121 +1,258 @@
|
|||
# Test Sketches – Hardware-Verdrahtungstests
|
||||
# Test Sketches - Hardware-Verifikationstests
|
||||
|
||||
Diese Verzeichnis enthält eigenständige Test-Sketches zur Verifikation der Hardware-Verdrahtung.
|
||||
Sie laufen als separate PlatformIO-Environments und berühren `main.cpp` nicht.
|
||||
Eigenstaendige Test-Sketches zur Verifikation der Hardware und einzelner Subkomponenten.
|
||||
Jeder Sketch laeuft als separates PlatformIO-Environment und beruehrt `src/main.cpp` nicht.
|
||||
|
||||
---
|
||||
|
||||
## Physische Modul-Anordnung (GYMAX7219, 4×2)
|
||||
## Physisches Display-Layout (GYMAX7219, 4x2)
|
||||
|
||||
```
|
||||
DIN ← ESP32 GPIO 23
|
||||
↓
|
||||
┌─────────┬─────────┬─────────┬─────────┐
|
||||
│ Modul 1 │ Modul 2 │ Modul 3 │ Modul 4 │ ← Obere Reihe (Zone 0, 0-idx: 0–3)
|
||||
│ links │ │ │ rechts │
|
||||
├─────────┼─────────┼─────────┼─────────┤
|
||||
│ Modul 5 │ Modul 6 │ Modul 7 │ Modul 8 │ ← Untere Reihe (Zone 1, 0-idx: 4–7)
|
||||
│ links │ │ │ rechts │
|
||||
└─────────┴─────────┴─────────┴─────────┘
|
||||
DOUT Modul 4 → DIN Modul 5 (Reihen verbinden)
|
||||
DIN <- ESP32 GPIO 23
|
||||
|
|
||||
+----------+----------+----------+----------+
|
||||
| Modul 1 | Modul 2 | Modul 3 | Modul 4 | <- Obere Reihe (0-idx: 0-3)
|
||||
| links | | | rechts |
|
||||
+----------+----------+----------+----------+
|
||||
| Modul 5 | Modul 6 | Modul 7 | Modul 8 | <- Untere Reihe (0-idx: 4-7)
|
||||
| links | | | rechts |
|
||||
+----------+----------+----------+----------+
|
||||
DOUT Modul 4 -> DIN Modul 5 (Reihen verbinden)
|
||||
```
|
||||
|
||||
SPI-Datenfluss: ESP32 → Modul 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8
|
||||
SPI-Datenfluss: ESP32 -> Modul 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8
|
||||
|
||||
**Hardware-Typ:** `GENERIC_HW` (verifiziert; 90° CCW Software-Rotation aktiv)
|
||||
**Hardware-Typ:** `GENERIC_HW` (verifiziert; 90 Grad CCW Software-Rotation aktiv per `rotateCCW()`)
|
||||
|
||||
### Modul-Belegung im Betrieb
|
||||
|
||||
| Modul(e) | 0-Index | Funktion |
|
||||
|-----------|---------|-------------------------------------------------------|
|
||||
| Modul 1 | 0 | WiFi-Fehler-Indikator (`E` = kein WLAN, leer = OK) |
|
||||
| Modul 2-4 | 1-3 | Session-Minuten ganzzahlig (0 bei Neustart, RAM-only) |
|
||||
| Modul 5 | 4 | MQTT-Fehler-Indikator (`E` = kein Broker, leer = OK) |
|
||||
| Modul 6-8 | 5-7 | Countdown (Gratiszeit) oder `--` (Idle/Netto) |
|
||||
|
||||
---
|
||||
|
||||
## Test 1.4 – Dot-Matrix-Display (`test_display.cpp`)
|
||||
## Test 1.4 - Dot-Matrix-Display (`test_display.cpp`)
|
||||
|
||||
### Zweck
|
||||
- Alle 8 Module in korrekter Reihenfolge und Ausrichtung prüfen
|
||||
- Zonentrennung (Zone 0 = oben, Zone 1 = unten) verifizieren
|
||||
- Realistische Anzeige (Minuten / Countdown) demonstrieren
|
||||
|
||||
### Verdrahtung
|
||||
|
||||
| ESP32 GPIO | Modul-Pin | Beschreibung |
|
||||
|-----------|-----------|---------------------|
|
||||
| GPIO 23 | DIN | SPI Data (VSPI MOSI)|
|
||||
| GPIO 18 | CLK | SPI Clock |
|
||||
| GPIO 5 | CS / LOAD | SPI Chip Select |
|
||||
| GND | GND | Masse (gemeinsam mit ESP32 GND) |
|
||||
| **5V extern** | VCC | **Externes Netzteil ≥ 1 A** (USB-Port des ESP32 reicht nicht – gemessen 0,5 A / 2,5 W) |
|
||||
|
||||
> Alle 8 Module teilen CLK und CS. DIN eines Moduls wird mit DOUT des Vorgängers verbunden.
|
||||
Verdrahtung und Ausrichtung aller 8 GYMAX7219-Module pruefen.
|
||||
|
||||
### Flash & Monitor
|
||||
|
||||
```bash
|
||||
pio run -e test-display --target upload
|
||||
pio device monitor -e test-display
|
||||
```
|
||||
|
||||
### Ablauf
|
||||
1. **Alle LEDs EIN** (2 s) → prüfen ob alle 8 Module reagieren
|
||||
2. **ZONE 0** auf oberer Reihe, `------` auf unterer Reihe
|
||||
3. **ZONE 1** auf unterer Reihe, `------` auf oberer Reihe
|
||||
4. **Realistische Anzeige**: `42.5` oben, `20` unten
|
||||
5. **Laufende Zähler** im Loop: Minuten und Countdown-Sekunden
|
||||
### Verdrahtung
|
||||
|
||||
### Erwartetes Ergebnis
|
||||
- Obere Reihe (Modul 1–4): zeigt `ZONE 0` bei Schritt 2
|
||||
- Untere Reihe (Modul 5–8): zeigt `ZONE 1` bei Schritt 3
|
||||
- Text erscheint lesbar von links nach rechts (nicht gespiegelt)
|
||||
| ESP32 GPIO | Modul-Pin | Beschreibung |
|
||||
|---------------|-----------|-----------------------------------------------------------|
|
||||
| GPIO 23 | DIN | SPI Data (VSPI MOSI) |
|
||||
| GPIO 18 | CLK | SPI Clock |
|
||||
| GPIO 5 | CS / LOAD | SPI Chip Select |
|
||||
| GND | GND | Masse (gemeinsam mit ESP32 GND) |
|
||||
| **5V extern** | VCC | **Externes Netzteil >= 1 A** (USB-Port reicht nicht aus) |
|
||||
|
||||
### Erwartetes Verhalten
|
||||
1. Alle LEDs EIN (2 s) - alle 8 Module leuchten
|
||||
2. Jedes Modul zeigt seine Nummer einzeln
|
||||
3. Realistische Anzeige: Minuten oben, Countdown unten
|
||||
Text erscheint lesbar (nicht gespiegelt oder kopfstehend).
|
||||
|
||||
### Ergebnis
|
||||
- [x] GYMAX7219 mit `GENERIC_HW` + 90 Grad CCW Software-Rotation
|
||||
- [x] Modul 1 oben-links, Modul 8 unten-rechts
|
||||
- [x] Externes 5 V-Netzteil notwendig
|
||||
|
||||
---
|
||||
|
||||
## Test 1.5 – Potentialfreier Schalter / Push Button (`test_button.cpp`)
|
||||
## Test 1.5 - Potentialfreier Schalter (`test_button.cpp`)
|
||||
|
||||
### Zweck
|
||||
- GPIO-Eingang mit INPUT_PULLUP testen
|
||||
- Pegel bei offenem und geschlossenen Schalter dokumentieren
|
||||
- Debounce-Verhalten prüfen (50 ms)
|
||||
- Betätigungsdauer (Basis für Gratiszeit-Logik) messen
|
||||
|
||||
### Verdrahtung – Phase 1: Push Button
|
||||
|
||||
```
|
||||
ESP32 GPIO 4 ────┤ Button ├──── GND
|
||||
(NO-Kontakt)
|
||||
```
|
||||
|
||||
Kein externer Widerstand nötig – der interne Pull-Up (INPUT_PULLUP) ist aktiv.
|
||||
|
||||
### Verdrahtung – Phase 2: Optokoppler (Laser-Signal)
|
||||
|
||||
```
|
||||
ESP32 GPIO 4 ──── Kollektor
|
||||
Optokoppler
|
||||
GND ──── Emitter
|
||||
```
|
||||
|
||||
Gleiche Logik wie Button – Laser aktiv = Optokoppler zieht GPIO auf GND.
|
||||
GPIO-Eingang (INPUT_PULLUP) testen, Pegel und Entprellzeit verifizieren.
|
||||
|
||||
### Flash & Monitor
|
||||
|
||||
```bash
|
||||
pio run -e test-button --target upload
|
||||
pio device monitor -e test-button
|
||||
```
|
||||
|
||||
### Erwartetes Ergebnis
|
||||
### Verdrahtung
|
||||
|
||||
| Zustand | GPIO-Pegel | Serial-Ausgabe |
|
||||
|-------------------|-----------|------------------------|
|
||||
| Button offen | HIGH | `HIGH (inaktiv)` |
|
||||
| Button gedrückt | LOW | `LOW → LASER AKTIV` |
|
||||
```
|
||||
ESP32 GPIO 4 ----| Button |----- GND (kein externer Widerstand noetig)
|
||||
```
|
||||
|
||||
→ Polarität: `LOW_ACTIVE` (Standardwert in `config.h` / NVS)
|
||||
### Erwartetes Verhalten
|
||||
|
||||
Alle 5 Sekunden erscheint ein Heartbeat mit aktuellem Pegel und Betätigungszähler.
|
||||
| Zustand | GPIO-Pegel | Serial-Ausgabe |
|
||||
|------------------|------------|----------------------|
|
||||
| Schalter offen | HIGH | `HIGH (inaktiv)` |
|
||||
| Schalter geschl. | LOW | `LOW -> LASER AKTIV` |
|
||||
|
||||
### Ergebnis
|
||||
- [x] `LOW_ACTIVE`-Polaritaet bestaetigt
|
||||
- [x] Debounce 50 ms funktioniert
|
||||
|
||||
---
|
||||
|
||||
## Testergebnisse
|
||||
## Test 2.2 - NVS Persistenz (`test_nvs.cpp`)
|
||||
|
||||
| Task | Status | Ergebnis |
|
||||
|------|--------|----------|
|
||||
| 1.4 Display | ✅ | GYMAX7219 mit `GENERIC_HW` + 90° CCW Software-Rotation; Modul 1 oben-links, Modul 8 unten-rechts; externes 5 V-Netzteil notwendig |
|
||||
| 1.5 Button | ✅ | `LOW_ACTIVE`; Debounce 50 ms funktioniert |
|
||||
### Zweck
|
||||
Schreiben, Lesen und Reset aller NVS-Werte ueber den `SettingsManager` pruefen.
|
||||
|
||||
### Flash & Monitor
|
||||
```bash
|
||||
pio run -e test-nvs --target upload
|
||||
pio device monitor -e test-nvs
|
||||
```
|
||||
|
||||
### Testablauf
|
||||
1. Testwerte in NVS schreiben (MQTT-Config, gratisSeconds, totalMinutes, Polaritaet)
|
||||
2. NVS-Werte zuruecklesen und pruefen
|
||||
3. ESP32 neu starten -> Werte muessen erhalten bleiben
|
||||
4. `settings.reset()` aufrufen -> alle Werte auf Default zurueck
|
||||
|
||||
### Erwartetes Verhalten
|
||||
Alle Pruefungen als `PASS` im Serial Monitor. Nach Neustart bleiben geschriebene Werte erhalten.
|
||||
|
||||
### Ergebnis
|
||||
- [x] NVS Roundtrip fuer alle Felder bestanden
|
||||
- [x] `reset()` setzt auf Defaults zurueck
|
||||
- [x] Persistenz ueber Neustart bestaetigt
|
||||
|
||||
---
|
||||
|
||||
## Test 3.3 - WiFiManager (`test_wifi.cpp`)
|
||||
|
||||
### Zweck
|
||||
WiFiManager Captive Portal und WLAN-Verbindungsaufbau testen.
|
||||
|
||||
### Flash & Monitor
|
||||
```bash
|
||||
pio run -e test-wifi --target upload
|
||||
pio device monitor -e test-wifi
|
||||
```
|
||||
|
||||
### Testablauf
|
||||
1. **Erstes Flash:** ESP32 oeffnet AP `LaserCutter-Setup`
|
||||
2. Mit Handy/PC mit AP verbinden - Captive Portal oeffnet sich automatisch
|
||||
3. WLAN-Credentials eingeben und speichern
|
||||
4. ESP32 verbindet sich mit dem WLAN und gibt IP-Adresse aus
|
||||
5. **BOOT-Taste (GPIO 0) beim Start 3 s halten** -> gespeicherte Credentials loeschen, AP neu oeffnen
|
||||
|
||||
### Erwartetes Verhalten
|
||||
Nach erfolgreicher Verbindung im Serial Monitor:
|
||||
```
|
||||
[WiFi] Verbunden: 192.168.x.x
|
||||
```
|
||||
|
||||
### Ergebnis
|
||||
- [x] Captive Portal startet korrekt
|
||||
- [x] Credentials werden in NVS gespeichert
|
||||
- [x] Reconnect nach Neustart ohne Portal
|
||||
|
||||
---
|
||||
|
||||
## Test 4.3 - DisplayManager (`test_display_manager.cpp`)
|
||||
|
||||
### Zweck
|
||||
Alle `show*`-Methoden des `DisplayManager` auf korrektes Modul-Mapping und Darstellung pruefen.
|
||||
|
||||
### Flash & Monitor
|
||||
```bash
|
||||
pio run -e test-display-mgr --target upload
|
||||
pio device monitor -e test-display-mgr
|
||||
```
|
||||
|
||||
### Testablauf (automatisch, kein Eingriff noetig)
|
||||
Der Sketch durchlaeuft nacheinander:
|
||||
|
||||
| Schritt | Methode | Modul(e) | Erwartete Anzeige |
|
||||
|---------|---------------------------|----------|----------------------------|
|
||||
| 1 | `showWifiError(true)` | 0 | `E` |
|
||||
| 2 | `showWifiError(false)` | 0 | leer |
|
||||
| 3 | `showLaserTime(0)` | 1-3 | ` 0` |
|
||||
| 4 | `showLaserTime(42)` | 1-3 | ` 42` |
|
||||
| 5 | `showLaserTime(999)` | 1-3 | `999` |
|
||||
| 6 | `showMqttError(true)` | 4 | `E` |
|
||||
| 7 | `showMqttError(false)` | 4 | leer |
|
||||
| 8 | `showCountdown(20)` | 5-7 | ` 20` |
|
||||
| 9 | `showCountdown(1)` | 5-7 | ` 1` |
|
||||
| 10 | `showIdle()` | 5-7 | ` --` |
|
||||
|
||||
### Ergebnis
|
||||
- [x] Alle Module reagieren auf die korrekten Methoden
|
||||
- [x] showLaserTime() zeigt ganze Zahlen rechtbuendig
|
||||
- [x] Fehler-Indikatoren auf Modul 0 und 4 unabhaengig voneinander
|
||||
|
||||
---
|
||||
|
||||
## Test 5.6 - LaserTracker (`test_laser_tracker.cpp`)
|
||||
|
||||
### Zweck
|
||||
Burst-Zustandsmaschine, Gratiszeit-Countdown, Session-Minuten und NVS-Gesamtzeit pruefen.
|
||||
|
||||
### Flash & Monitor
|
||||
```bash
|
||||
pio run -e test-laser-tracker --target upload
|
||||
pio device monitor -e test-laser-tracker
|
||||
```
|
||||
|
||||
### Verdrahtung
|
||||
GPIO 4: Push-Button gegen GND (simuliert Laser-AN/AUS, LOW_ACTIVE)
|
||||
|
||||
### Testablauf
|
||||
|
||||
**A) Gratis-Burst (Laser < 20 s):**
|
||||
1. Schalter schliessen -> Countdown startet auf Modul 6-8
|
||||
2. Schalter vor Ablauf der 20 s oeffnen
|
||||
3. Erwartung: Session-Minuten unveraendert (0), NVS erhoehte sich um Burst-Dauer
|
||||
|
||||
**B) Netto-Burst (Laser > 20 s):**
|
||||
1. Schalter schliessen -> Countdown startet
|
||||
2. Nach 20 s -> Countdown erlischt, Module 6-8 zeigen `--`
|
||||
3. Schalter nach z.B. 80 Netto-Sekunden oeffnen
|
||||
4. Erwartung: keine Minutenaenderung (80 s < 60 s ist falsch; 80 s >= 60 s -> +1 Minute auf Modul 2-4)
|
||||
|
||||
**C) Neustart-Test:**
|
||||
1. ESP32 neu starten
|
||||
2. Erwartung: Session-Minuten = 0 auf Modul 2-4
|
||||
3. NVS-Gesamtzeit aus vorherigen Bursts bleibt erhalten (im Serial Monitor sichtbar)
|
||||
|
||||
**D) Komplett-Reset:**
|
||||
1. BOOT-Taste (GPIO 0) 3 Sekunden halten
|
||||
2. Erwartung: `settings.reset()` + `resetTotal()` -> gratisSeconds = 20, totalMinutes = 0
|
||||
|
||||
### Erwartetes Display-Verhalten
|
||||
|
||||
| Zustand | Module 1-3 (Session) | Module 5-7 (Status) |
|
||||
|----------------------------|----------------------|-----------------------|
|
||||
| Idle | ` 0` | ` --` |
|
||||
| Laser an (0-20 s) | ` 0` | `20` -> `1` Countdown |
|
||||
| Laser an (> 20 s) | ` 0` | ` --` |
|
||||
| Laser aus nach 80 Netto-s | ` 1` | ` --` |
|
||||
| Neustart | ` 0` | ` --` |
|
||||
|
||||
### Ergebnis
|
||||
- [x] GRATIS -> NET_COUNTING Uebergang nach 20 s
|
||||
- [x] Session-Minuten incrementieren hart bei 60 Netto-Sekunden
|
||||
- [x] Gratis-Bursts addieren keine Session-Zeit
|
||||
- [x] NVS zaehlt gesamte Laser-AN-Zeit (inkl. Gratiszeit)
|
||||
- [x] resetTotal() loescht NVS + Session
|
||||
|
||||
---
|
||||
|
||||
## Gesamt-Testergebnisse
|
||||
|
||||
| Test | Environment | Status | Anmerkung |
|
||||
|------|----------------------|--------|-------------------------------------------------------------------|
|
||||
| 1.4 | `test-display` | OK | GENERIC_HW, 90 Grad CCW Rotation, externes 5V-Netzteil |
|
||||
| 1.5 | `test-button` | OK | LOW_ACTIVE, Debounce 50 ms |
|
||||
| 2.2 | `test-nvs` | OK | Alle NVS-Felder, Roundtrip, Persistenz, Reset |
|
||||
| 3.3 | `test-wifi` | OK | Captive Portal, Credentials-Persistenz, Reconnect |
|
||||
| 4.3 | `test-display-mgr` | OK | Alle show*-Methoden, Modul-Mapping, Fehler-Indikatoren |
|
||||
| 5.6 | `test-laser-tracker` | OK | Burst-Logik, Gratiszeit, Session/NVS-Trennung, Reset |
|
||||
Loading…
Reference in New Issue
Block a user