ESP32 bridge for ResMed AirSense 11 / AirCurve 11 CPAP.
- Web UI
- live dashboard with AS11 status and identity
- read/write all therapy settings
- live pressure / flow / leak / SpO2 charts
- Time sync
- NTP-first with AS11 clock fallback
- Optional AirSense time synchronization - fixes RTC drift issue
- ResMed OTA
- flash AirSense firmware from web UI or CLI.
(Autodetects firmware format (raw or .abc container) and target memory block)
- flash AirSense firmware from web UI or CLI.
- Raw TCP bridge
- send commands to AirSense over WiFi.
(one JSON-RPC payload per line, compatible withas11_config.pyand other host tooling.)
- send commands to AirSense over WiFi.
- Multi-profile Wi-Fi
- up to four STA profiles, BSSID-targeted roaming, SoftAP auto-fallback or forced always-on.
- Oximetry
- use supported BLE oximeters or UDP sources with AirSense 11 HR/SpO2 recording
- currently supported: O2Ring, O2Ring-S, Checkme O2, Nonin 3150, generic PLX/HR sensors
- Live therapy data sinks - HTTP, SMB, SleepHQ, MQTT... Plugin sinks subscribe through the stream broker; bounded per-consumer queues
- Local EDF capture - record the active therapy session into set of EDF files on own SD card, indexed for remote retrieval over LAN.
- BLE provisioning - replace SoftAP-only first-run with a BLE service for Wi-Fi scan, multi-profile setup, and basic device config from a phone.
- Wire up the hardware.
- Flash:
pio run -e xiao-esp32s3-plus-sdmmc4 -t upload - Open
http://aircannect/(default login:admin/aircannect).
For a longer walkthrough see the quickstart.
xiao-esp32s3-plus-sdmmc4(default) - XIAO ESP32-S3 Plus, 4-bit microSD on the exposed non-strapping GPIOs.xiao-esp32s3-plus-sdmmc1- same board, 1-bit SDMMC.xiao-esp32s3-plus-spisd- same board, SPI-mode SD fallback.xiao-esp32s3-plus- no SD; PSRAM still available for stream pool and response buffers.
| Live charts | Clinical Settings |
|---|---|
![]() |
![]() |
| ResMed OTA | Oximetry |
|---|---|
![]() |
![]() |
AGPL v3. See LICENSE.




