Files
appRobotDriver/EmergencyStopButton/EmergencyStopButton.md
2026-06-25 18:58:55 +02:00

87 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Emergency Stop Button — Erkenntnisse & Entscheidungen
## Hardware-Wahl
### ESP32-C3 Super Mini — abgelehnt
Das kompakte Board hat **keinen Laderegler** (kein TP4056/MCP73831, kein JST-Akku-Anschluss).
Zudem zieht eine dauerhaft leuchtende Power-LED 12 mA — selbst ohne WLAN-Betrieb würde ein kleiner Akku in wenigen Tagen leer sein.
### DFRobot FireBeetle 2 — gewählt
- Integrierter Laderegler + JST-PH-2.0-Anschluss direkt am Board
- Low-Power optimiert (ab Werk ~15 µA im Deep Sleep)
- Kein Zusatz-Hardware nötig für Akkubetrieb
## Akku-Spezifikation für den FireBeetle 2
Suchbegriffe:
- `LiPo Akku 3.7V JST PH2.0 2000mAh Schutzschaltung`
- `Li-Po 1S 3.7V protected JST-PH 2.0mm 2000mAh`
Pflichtmerkmale:
| Merkmal | Wert |
|---|---|
| Typ | LiPo / Li-Polymer, **1S** (1 Zelle) |
| Spannung | **3,7 V** nominal |
| Stecker | **JST PH, 2,0 mm Raster, 2-polig** |
| Schutzschaltung | **Ja** (BMS/PCM) |
| Kapazität | **2000 mAh** |
> **Achtung:** Polarität vor dem Einstecken mit Multimeter prüfen — JST-PH-Stecker sind nicht normiert. Sicherste Option: Akku direkt bei DFRobot kaufen.
## Architektur-Entscheidung: WiFi Light Sleep (Priorität: 250 ms Latenz)
Die **250 ms Latenz** vom Knopfdruck bis zum API-Call ist das primäre Ziel.
| Option | Latenz | Ø Strom | Laufzeit (2000 mAh) |
|---|---|---|---|
| **WiFi Light Sleep (DTIM=10)** | **150250 ms** ✅ | ~1 mA | **~80 Tage** |
| Deep Sleep + Reconnect | 6001300 ms ❌ | ~0,02 mA | ~mehrere Jahre |
Deep Sleep scheidet aus: Der WiFi-Reconnect nach dem Aufwachen dauert 6001300 ms — die 250-ms-Anforderung wird klar verfehlt.
## WiFi Light Sleep — Funktionsprinzip
Die CPU schläft, der WiFi-Stack bleibt aktiv. Mit DTIM=10 wacht der ESP32 alle ~1000 ms für 12 ms auf, um gepufferte Pakete vom Router abzuholen. Die Verbindungsassoziation bleibt erhalten.
Ein **GPIO-Interrupt** (Leitung auf GND) weckt den ESP32 in **15 ms** — der API-Call kann sofort abgesetzt werden, weil WiFi bereits verbunden ist.
## Latenzbudget
| Schritt | Zeit |
|---|---|
| Wakeup aus Light Sleep | 15 ms |
| WiFi-Verbindung prüfen (bereits aktiv) | 0 ms |
| HTTP-Request aufbauen | 2050 ms |
| TLS-Handshake (HTTPS) | 50150 ms |
| Server-Antwort | 2050 ms |
| **Gesamt** | **~100250 ms** ✅ |
## Akkulaufzeit (WiFi Light Sleep, 2000 mAh)
```
Durchschnittsstrom (DTIM=10, Taster selten gedrückt): ~1 mA
Nutzbare Kapazität (80 %): 1600 mAh
Selbstentladung LiPo: ~2 mAh/Tag
Laufzeit ≈ 1600 mAh / 1 mA ≈ 1600 h ≈ 6780 Tage
```
> Zum Vergleich: Mit 1000 mAh (alter Stand) waren es ~40 Tage.
## GPIO Wake-Up — technische Details
- **Pegel-Trigger** (kein Flanken-Trigger): die Leitung muss >ein paar ms auf GND bleiben.
- **Pull-Up intern** aktivieren: im Ruhezustand HIGH, Ereignis zieht auf GND.
- **Wake-fähige Pins** sind nur RTC/LP-GPIOs — im FireBeetle-2-Datenblatt prüfen.
- API: `esp_sleep_enable_gpio_wakeup()` / `esp_light_sleep_start()`
## Vergleich: Alternative Deep-Sleep-Architektur (nicht für E-Stop geeignet)
Falls in einem anderen Projekt Latenz < 1 s ausreicht und Akkulaufzeit Monate betragen soll:
- Deep Sleep, WLAN nur 818 Uhr alle 30 min (20 WLAN-Verbindungen/Tag)
- Zusätzlich GPIO-Wake für Ereignisse (innerhalb ~300 ms nach Aufwachen + Reconnect)
- Laufzeit 2000 mAh: **~810 Monate** (Selbstentladung dominant)
Für den Emergency Stop Button ist diese Option **nicht geeignet**, da die WiFi-Reconnect-Zeit die 250-ms-Anforderung überschreitet.