ESP32 bridge for ResMed AirSense 11 / AirCurve 11 / AirMini CPAP.
Using an AirSense 10? See AirBridge.
- Web UI
- live dashboard with device status and identity
- read/write all therapy settings
- live pressure / flow / leak / SpO2 charts
- EDF capture
- record active therapy sessions to ResMed-style EDF files on SD card
- browse and download captured EDF files over the Web UI
- SMB share sync
- SleepHQ sync
- Reports
- therapy-night charts with event flags, session toggles, zoom, and cached data
- Oximetry
- use supported BLE oximeters or UDP sources
- let the AirSense record HR/SpO2 when application control uses CAN, or write it directly to local SA2 EDF when application control uses BLE or the device is an AirMini
- currently supported: O2Ring, O2Ring-S, Checkme O2, Nonin 3150, generic PLX/HR sensors
- Local display and controls
- optional status and therapy display with motion wake and automatic rotation
- configurable local buttons for common device actions
- Alerts
- configurable high-leak warnings with speaker output on supported hardware
- Time sync
- NTP-first with device clock fallback
- Optional AirSense time synchronization - fixes RTC drift issue
- 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.
- ResMed OTA
- flash compatible AirSense 11 / AirCurve 11 / AirMini firmware from web UI or CLI.
(Autodetects raw and .abc formats; CONF, APPL, and bootloader regions can be selected explicitly.)
- flash compatible AirSense 11 / AirCurve 11 / AirMini firmware from web UI or CLI.
- Wire up the hardware.
- Download the
*-initial.zipmatching the board from the latest release and extract the*-initial.binimage. - Program the board with the extracted image. See the quickstart for installation options.
- Open
http://aircannect/(default login:admin/aircannect) and follow the setup wizard.
AirMini connects over CAN only, with the same wiring as AirSense 11. Keep the AirMini app closed while AirCANnect is recording: AirMini shares one data stream between CAN and Bluetooth.
Supported build profiles require an ESP32-S3 with PSRAM and microSD:
xiao-esp32s3-plus-sdmmc4(default) - 4-bit microSD on the exposed non-strapping GPIOs.xiao-esp32s3-plus-spisd- SPI-mode SD fallback for 4-wire SD modules.waveshare-esp32s3-touch-lcd-1-54- onboard SDMMC and BLE transport on the Waveshare ESP32-S3-Touch-LCD-1.54, with its local status display and action button enabled.waveshare-esp32s3-geek- onboard microSD, status display, configurable button, BLE by default, and optional CAN.
airbreak-plus provides Python tools that can use AirCANnect as their device transport:
python/as11_config.py -d tcp:aircannect get _PNA- read settings, call RPC methods, and follow streams or events.python/as11_flash.py flash -d tcp:aircannect -f resmed-firmware.bin- upload ResMed firmware through AirCANnect.
Both tools also support direct CAN and BLE connections without AirCANnect.
| Live charts | EDF |
|---|---|
![]() |
![]() |
| Reports | Oximetry |
|---|---|
![]() |
![]() |
| Clinical settings | ResMed OTA |
|---|---|
![]() |
![]() |
AGPL v3. See LICENSE.






