Go to file
Stefan Hacker 0b09765013 first commit 2026-01-29 20:31:37 +01:00
main first commit 2026-01-29 20:31:37 +01:00
CMakeLists.txt first commit 2026-01-29 20:31:37 +01:00
README.md first commit 2026-01-29 20:31:37 +01:00
partitions.csv first commit 2026-01-29 20:31:37 +01:00
sdkconfig.defaults first commit 2026-01-29 20:31:37 +01:00

README.md

ESP32-S3 Bluetooth SIP Client

Ein SIP-Telefon basierend auf ESP32-S3 mit Bluetooth- und USB-Headset-Unterstützung. Entwickelt für Thin-Client-Umgebungen ohne nativen CTI-Support.

Features

  • WiFi-Konfiguration

    • Automatischer Hotspot-Modus wenn keine WLAN-Daten konfiguriert
    • Web-basierte Konfiguration (SSID: ESP32-SIP-Phone, IP: 192.168.4.1)
    • DHCP oder statische IP-Konfiguration
    • Automatischer Fallback zu Hotspot bei Verbindungsproblemen
  • Bluetooth Headsets

    • HFP (Hands-Free Profile) Unterstützung
    • Mehrere Geräte pairen (>5 möglich)
    • Auto-Connect für bekannte Geräte
    • Headset-Tasten: Annehmen, Auflegen, Lautstärke
  • USB Headsets

    • USB Audio Class Unterstützung
    • USB-C direkter Anschluss oder USB-A mit Adapter
    • USB hat immer Priorität über Bluetooth
    • Automatische Erkennung
  • SIP/VoIP

    • SIP-Registrierung an TK-Anlage
    • Eingehende und ausgehende Anrufe
    • G.711 µ-law und A-law Codec
    • Digest Authentication
  • Weboberfläche

    • Status-Übersicht
    • WLAN-Konfiguration mit Scan
    • SIP-Einstellungen
    • Bluetooth-Geräte-Management
    • System-Einstellungen (Neustart, Werksreset)

Hardware

Empfohlenes Board

  • ESP32-S3-DevKitC-1 (oder ähnlich mit USB OTG)
  • Mindestens 4MB Flash
  • Optional: PSRAM für bessere Audio-Pufferung

Anschlüsse

  • USB-C (USB OTG): Für USB-Headsets
  • WLAN: 2.4GHz WiFi

Installation

Voraussetzungen

  • ESP-IDF v5.0 oder neuer
  • USB-Kabel für Programmierung

Build & Flash

# ESP-IDF Umgebung aktivieren
. $IDF_PATH/export.sh

# Konfigurieren
idf.py set-target esp32s3
idf.py menuconfig

# Bauen und Flashen
idf.py build flash monitor

Ersteinrichtung

  1. ESP32 mit Strom versorgen

    • LED sollte nach Boot leuchten
  2. Mit Hotspot verbinden

    • SSID: ESP32-SIP-Phone
    • Passwort: sip-phone-setup
  3. Weboberfläche öffnen

    • Browser: http://192.168.4.1
  4. WLAN konfigurieren

    • Tab "WLAN" → Netzwerk auswählen → Verbinden
  5. SIP konfigurieren

    • Tab "SIP" → Server, Benutzername, Passwort eingeben
  6. Bluetooth Headset verbinden

    • Headset in Pairing-Modus setzen
    • Tab "Bluetooth" → Gerät pairen

API Endpoints

Endpoint Methode Beschreibung
/api/status GET Gesamtstatus
/api/wifi/config GET/POST WLAN-Konfiguration
/api/wifi/scan GET WLAN scannen
/api/sip/config GET/POST SIP-Konfiguration
/api/bluetooth/devices GET Gepaarte BT-Geräte
/api/bluetooth/scan POST BT-Scan starten
/api/bluetooth/pair POST Gerät pairen
/api/call/answer POST Anruf annehmen
/api/call/hangup POST Anruf beenden
/api/system/reboot POST Neustart
/api/system/factory-reset POST Werksreset

Projektstruktur

bluetooth-sip-client/
├── CMakeLists.txt
├── sdkconfig.defaults
├── partitions.csv
└── main/
    ├── main.c                 # Hauptprogramm
    ├── config/
    │   ├── config_manager.h   # Konfiguration Header
    │   └── config_manager.c   # NVS-basierte Config
    ├── wifi/
    │   ├── wifi_manager.h     # WiFi Header
    │   └── wifi_manager.c     # WiFi AP/STA Manager
    ├── web/
    │   ├── web_server.h       # Webserver Header
    │   ├── web_server.c       # HTTP Server
    │   ├── web_api.h          # API Header
    │   ├── web_api.c          # REST API
    │   └── static/            # Web UI
    │       ├── index.html
    │       ├── style.css
    │       └── app.js
    ├── bluetooth/
    │   ├── bt_manager.h       # BT Manager Header
    │   ├── bt_manager.c       # BT Geräteverwaltung
    │   ├── bt_hfp.h           # HFP Header
    │   └── bt_hfp.c           # HFP Audio Gateway
    ├── usb_audio/
    │   ├── usb_audio_host.h   # USB Audio Header
    │   └── usb_audio_host.c   # USB Audio Class Host
    ├── audio/
    │   ├── audio_router.h     # Audio Router Header
    │   └── audio_router.c     # Audio Routing & Priorität
    └── sip/
        ├── sip_client.h       # SIP Client Header
        ├── sip_client.c       # SIP UA Implementation
        ├── sip_parser.h       # SIP Parser Header
        └── sip_parser.c       # SIP Message Parser

Einschränkungen

  • Bluetooth: Maximal 3-4 gleichzeitig aktive Verbindungen (ESP32 Limitation), aber mehr Geräte können gepaart werden
  • USB Audio: Grundlegende UAC1 Unterstützung, nicht alle Headsets getestet
  • Codecs: Aktuell nur G.711 (PCMU/PCMA)
  • SRTP: Nicht unterstützt (nur unverschlüsseltes RTP)

Troubleshooting

Kein WLAN nach Konfiguration

  • Gerät neu starten
  • Hotspot sollte nach 30 Sekunden automatisch starten

Bluetooth Headset verbindet nicht

  • Headset zurücksetzen und erneut pairen
  • Andere Bluetooth-Verbindungen am Headset trennen

Kein Audio bei Anruf

  • USB-Headset hat Priorität - bei Verwendung von BT das USB-Kabel entfernen
  • Audio-Routing prüfen im Status-Tab

Lizenz

MIT License