|
|
||
|---|---|---|
| main | ||
| CMakeLists.txt | ||
| README.md | ||
| partitions.csv | ||
| sdkconfig.defaults | ||
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
-
ESP32 mit Strom versorgen
- LED sollte nach Boot leuchten
-
Mit Hotspot verbinden
- SSID:
ESP32-SIP-Phone - Passwort:
sip-phone-setup
- SSID:
-
Weboberfläche öffnen
- Browser:
http://192.168.4.1
- Browser:
-
WLAN konfigurieren
- Tab "WLAN" → Netzwerk auswählen → Verbinden
-
SIP konfigurieren
- Tab "SIP" → Server, Benutzername, Passwort eingeben
-
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