FIrmware der "externen" LTE Bridge (esp32-s3-a7670e-4g) des Aiways U5
  • C++ 93.9%
  • C 5.7%
  • Shell 0.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Timo Erdbrügger 1d40801dc0 release: v0.1.105 — Akku-Gegenmessung ohne Modem-Stromschnitt, max. 1x/h; Deep-Sleep schaltet Modem sauber ab
Bei falsch niedrigem Gauge-SoC (<10 %) lief die load-freie Gegenmessung nach jedem 3. Messpunkt --
aktiv alle ~1,5 min, geparkt alle ~6 min -- und schnitt dafuer jedes Mal VVBAT hart fuer 1,5 s ab
(unter SIMCom-Minimum 2 s, kein CPOF). Folge: das Modem verlor laufend seine Netzanmeldung und wurde
genau so abgewuergt, wie es der Hauptverdacht fuer das haengende Modem ist.
- confirmDeepSleepLoadFree: Last per AT+CFUN=0 (Funk aus, Modem nur noch wenige mA) statt VVBAT-
  Schnitt; danach AT+CFUN=1. Gesperrter AT-Kanal -> keine Gegenmessung. Ereignis lowchk=<mV>.
- Gegenmessung hoechstens 1x pro Stunde.
- enterDeepSleepFor: Modem per modemPowerOffClean (CPOF + VVBAT aus) statt hart.
Seit v0.1.104 faellt die Anzeige ohnehin nur bei wirklich leerer Zelle (~3,55 V) unter 10 %.

Lokal gebaut (pio run: SUCCESS), Host-Tests PASS. Am Geraet ungetestet.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011shUomooZ2agMQJjKmjHpi
2026-10-08 19:26:21 +02:00
.github/workflows test: nativer AICHI-Protokoll-Test (Host-mbedTLS) + CI-Job 2026-09-04 15:27:33 +02:00
include release: Fuel-Gauge auf richtigen I2C-Pins (SDA=15/SCL=16, Kamera-SCCB) 2026-09-05 15:02:33 +02:00
src release: v0.1.105 — Akku-Gegenmessung ohne Modem-Stromschnitt, max. 1x/h; Deep-Sleep schaltet Modem sauber ab 2026-10-08 19:26:21 +02:00
test/host release: v0.1.104 — Akku-Anzeige aus der Zellspannung (OCV-Tabelle) statt der MAX17048-Schaetzung 2026-10-08 13:58:58 +02:00
.gitignore fix: eindeutiger Config-Header (bridge_config.h) — __has_include-Kollision 2026-09-02 23:08:15 +02:00
platformio.ini rebrand: OpenAiways -> AiwaysCommunity (Anzeigename) 2026-09-09 20:21:05 +02:00
README.md rebrand: OpenAiways -> AiwaysCommunity (Anzeigename) 2026-09-09 20:21:05 +02:00

AiwaysCommunity LTE-Bridge (ESP32-S3-A7670E-4G)

Die Bridge ist ein dummer GET→POST-Übersetzer: Sie hängt sich in den WLAN-AP der TBox, holt die fertig aufbereiteten Daten von :9000 (der Daemon macht die ganze Logik) und schickt sie per LTE ans Backend. Keine Fahrzeuglogik auf dem ESP.

TBox (WLAN-AP, :9000)  --WiFi-->  ESP32-S3  --LTE (A7670E)-->  Backend (HTTPS)
     GET /cachedata /gps                POST /ingest/... (X-Api-Key)

Hardware / Pinbelegung (aus dem Schaltplan verifiziert)

Board: Waveshare ESP32-S3-A7670E-4G — ESP32-S3R8 (16 MB Flash, 8 MB PSRAM) + A7670E (LTE Cat-1 / 2G / GNSS). Modem-IO ist 1,8 V, UART über TXB0104-Level- Shifter auf 3,3 V. Modem-USB hängt zusätzlich über einen FSUSB42-Mux am nativen USB des ESP32-S3.

Signal ESP32-S3 Hinweis
Modem Power-Enable GPIO33 HIGH = VVBAT an; PWRKEY wird per Q9 automatisch getriggert (kein separater PWRKEY-Pin)
Modem UART TX (ESP→Modem) GPIO17 → R59 → TXD1 → Level-Shifter → Modem RXD
Modem UART RX (Modem→ESP) GPIO18 Modem TXD → Level-Shifter → RXD1 → R61 → GPIO18
Modem DTR GPIO45 LOW = wach halten
Modem RI GPIO40 Ring/Status
RGB-LED (WS2812) GPIO38 Statusanzeige
Modem USB (D-/D+) native USB (mux) für PPP/hohe Raten, per DIP/USB_SET umschaltbar

Voraussetzungen fürs Testen: SIM (Nano) mit Datentarif gesteckt, LTE-Antenne an RF_ANT, Strom über USB-C oder 18650-Akku (das Modem zieht im Sendeburst bis ~2 A — an schwachen USB-Ports kann es sonst resetten). DIP-Schalter so, dass die ESP32-UART/Programmierung erreichbar ist.

Aufbau in Phasen

  • Phase 0 — Bring-up (diese Firmware): Modem-AT-Probe (GPIO17/18), SIM/Netz/ Signal, WiFi-Scan nach MyAiways-*, danach transparenter AT-Passthrough (USB-Konsole ↔ Modem) für manuelle Tests. → beweist beide Funkteile einzeln.
  • Phase 1 — WiFi-Pfad: in den TBox-AP einloggen (Creds aus dem Bridge-Package), GET http://192.168.1.1:9000/cachedata mit X-Token, JSON puffern.
  • Phase 2 — LTE-Pfad: PPP über das Modem hochziehen (echter IP-Stack → HTTPClient/TLS), POST ans Backend mit X-Api-Key. Dafür Arduino-ESP32 3.x nötig → in platformio.ini auf die pioarduino-Platform wechseln.
  • Phase 3 — Loop + Konfig: Bridge-Package (ap_ssid/ap_key/backend/api_key) aus dem NVS/QR, Zyklus (GET→POST→Sleep), Fehler-/Retry-Handling, LED-Status.

Build / Flash (auf dem eigenen PC)

pio run                 # bauen
pio run -t upload       # flashen (Board per USB-C)
pio device monitor      # 115200 Baud

Phase 0 kommt mit der Standard-espressif32-Platform aus. Für Phase 2 (PPP) Platform-Zeile tauschen (Kommentar in platformio.ini).