Repository navigation
Releases: ffosilva/bc-awake
Release list
v2.2.0
Release v2.1.0: ESP32-CAM Carrier Board Target & BJT Buffer Support
What's Changed in v2.1.0
🛠️ ESP32-CAM Prototype Carrier Board Support
• New Dedicated Build Target (esp32cam-carrier): Built specifically for the single-layer DIY carrier PCB with active-HIGH push-pull PS_ON# driving through a BC547/BC548 NPN BJT buffer and oversampled ADC2 board sensing on GPIO 12 with hysteresis.
• Anti-Oscillation & Resilience Circuit: Inverts PS_ON# logic to active-HIGH push-pull so the BJT collector pulls PS_ON# to GND while the base is held in saturation, eliminating boot floating and capacitive coupling.
• Isolated Reset: Isolated the ESP32-CAM GND/R reset pin on the carrier PCB layout to prevent unwanted resets during power fluctuations.
• Complete Hardware Design Files: Includes KiCad schematic, PCB layout, DRC report, SVG silk/copper masks, printable PDF fabrication sheet, and Bill of Materials (esp32cam-carrier-bom.csv).
⚡ Target Distinctions & Bare Board Compatibility
• Preserved Bare ESP32-CAM Target (esp32cam): Retains active-LOW open-drain PS_ON# switching and digital board sensing for direct wire setups without the carrier buffer circuit.
• Standardized Target Lineup: All 4 targets (esp32dev, esp32cam, esp32cam-carrier, esp32-c3-devkitm-1) fully supported with isolated Setup Mode and runtime radio teardown.
Included Firmware Binaries
• bc-awake-esp32dev-v2.1.0.bin (and bc250-switch-esp32dev-v2.1.0.bin): Standard ESP32-WROOM-32 (DevKitC) boards (Classic Bluetooth wake).
• bc-awake-esp32cam-carrier-v2.1.0.bin (and bc250-switch-esp32cam-carrier-v2.1.0.bin): AI-Thinker ESP32-CAM on prototype carrier PCB (BJT buffer + ADC2 sense).
• bc-awake-esp32cam-v2.1.0.bin (and bc250-switch-esp32cam-v2.1.0.bin): AI-Thinker ESP32-CAM bare board (open-drain + digital sense).
• bc-awake-esp32c3-v2.1.0.bin (and bc250-switch-esp32c3-v2.1.0.bin): ESP32-C3 DevKitM-1 / SuperMini boards (BLE wake).
OTA Upgrade Note: Fully compatible with existing dual-bank partition layouts. Upgrade directly over the air using the portal's Firmware update (OTA) card in the System tab while in Setup Mode.
Release v2.0.0: Isolate Setup Mode and Radio Lifecycle
What's Changed in v2.0.0
🚀 Complete Radio Teardown While Host is Operating
- Zero RF Transmissions During Boot and Runtime: Wi-Fi station and Bluetooth (Classic & BLE) controllers are completely torn down, stopped, and de-initialized when the system enters
STATE_BOOTINGorSTATE_ON. - Eliminates Post-Boot Flashing and Interference: Prevents brownouts, RF bursts, and 5-second post-boot reconnection loops while the host machine (BC250) is booting and running.
- Standby Auto-Restoration: Radios are cleanly re-initialized only upon transitioning back to
STATE_OFF, keeping Bluetooth wake and Wake-on-LAN listeners ready in standby.
🔒 Setup Mode Isolation
- Power Lock in Setup Mode: When in Setup Mode (SoftAP on
192.168.4.1),PS_ON#is locked released inSTATE_OFF. Power button short taps, serial commands, Bluetooth wake, and WOL packets are strictly ignored to guarantee the host PC cannot power on while configuring the board. - Portal Offline in Normal Mode: The web portal and REST API are restricted exclusively to Setup Mode over SoftAP. In normal operation mode, Wi-Fi Station runs headless, listening strictly for Wake-on-LAN magic packets on UDP ports 7 and 9.
🧹 Decommissioning Host Sync and Obsolete Controls
- Removed
bc250-syncandbc250-setup: Removed all host-side synchronization services, timers, discovery broadcast listeners, and CLI wizards. - Simplified Setup Portal UI: Removed obsolete remote power action buttons (
Power On,Force Cut Power,Shut Down OS) and endpoints (/api/power/on,/api/power/off,/api/shutdown), keeping thegracefulShutdowncheckbox in the Power tab.
Included Firmware Binaries
bc-awake-esp32dev-v2.0.0.bin(andbc250-switch-esp32dev-v2.0.0.bin): Standard ESP32-WROOM-32 (DevKitC) boards (Classic Bluetooth wake).bc-awake-esp32cam-v2.0.0.bin(andbc250-switch-esp32cam-v2.0.0.bin): AI-Thinker ESP32-CAM boards (Classic Bluetooth wake).bc-awake-esp32c3-v2.0.0.bin(andbc250-switch-esp32c3-v2.0.0.bin): ESP32-C3 DevKitM-1 / SuperMini boards (BLE wake).
OTA Upgrade Note: Fully compatible with existing dual-bank partition layouts. Upgrade directly over the air using the portal's Firmware update (OTA) card in the System tab while in Setup Mode.
Release v1.13.6: Defer Wi-Fi MAC Swap to STATE_ON & Clamp Pre-Connection TX Power
What's Changed in v1.13.6
🐛 Defer Wi-Fi MAC Swap to STATE_ON & Clamp Pre-Connection TX Power
- Isolate Booting State from Wi-Fi Radio Disruptions: Wi-Fi Station MAC address swapping is now completely skipped during
STATE_BOOTING, preventing Wi-Fi disconnect, driver reset, and reconnection storms while the ATX power supply is actively delivering 12V inrush current to BC250 motherboard VRMs. - Extended 5000 ms Settling Window in
STATE_ON: When transitioning intoSTATE_ON(board powered and qualified), the factory MAC restore is deferred by 5000 ms via a non-blocking timer innetworkWakeLoop(), ensuring all PSU switching transients and rail currents have fully stabilized before the brief Wi-Fi disconnect/reconnect cycle occurs. - Cancel Pending Swaps on
STATE_OFF: If a boot attempt aborts or the machine shuts off before reachingSTATE_ON, any pending MAC swap timer is immediately cancelled without disconnecting Wi-Fi or altering station configuration. - Pre-Connection Hardware PHY TX Power Clamping: Added
esp_wifi_set_max_tx_power((int8_t)AP_TX_POWER)immediately followingWiFi.mode(WIFI_STA)before callingWiFi.begin(). This guarantees that low-level Wi-Fi PHY calibration, probe requests, and association bursts are clamped to the target's configured power envelope (11 dBmon ESP32-CAM) right from driver initialization, eliminating AMS1117-3.3 brownout resets that previously caused the PSU to shut down ~500 ms after powering on.
Included Firmware Binaries
bc-awake-esp32dev-v1.13.6.bin(andbc250-switch-esp32dev-v1.13.6.bin): Standard ESP32-WROOM-32 (DevKitC) boards (Classic Bluetooth wake).bc-awake-esp32cam-v1.13.6.bin(andbc250-switch-esp32cam-v1.13.6.bin): AI-Thinker ESP32-CAM boards (Classic Bluetooth wake).bc-awake-esp32c3-v1.13.6.bin(andbc250-switch-esp32c3-v1.13.6.bin): ESP32-C3 DevKitM-1 / SuperMini boards (BLE wake).
OTA Upgrade Note: Fully compatible with existing dual-bank partition layouts. Upgrade directly over the air using the portal's Firmware update (OTA) card in the System tab.
Release v1.13.5: Fix Wi-Fi Station MAC Swapping Lifecycle
What's Changed in v1.13.5
🐛 Fix Wi-Fi Station MAC Swapping on Power-State Transitions
• Resolve Failed to set MAC: 12289 (ESP_ERR_WIFI_NOT_INIT): In v1.13.4, transitioning power states (STATE_OFF to STATE_BOOTING/STATE_ON and back) called WiFi.disconnect(true) which de-initialized the ESP-IDF Wi-Fi driver, followed immediately by esp_wifi_set_mac() before WiFi.mode(WIFI_STA) re-initialized it. This caused the call to fail with error 12289, preventing the ESP32 from swapping between its factory MAC and the host Wi-Fi dongle MAC (bc250Mac).
• Unify Station Startup Sequence: applyStateMacChange() now delegates directly to networkWakeBegin(isOff) after disconnecting Wi-Fi. This eliminates code duplication and ensures that WiFi.mode(WIFI_STA) initializes the driver and STA interface before setting the target MAC address, exactly matching the proven boot sequence.
Included Firmware Binaries
bc-awake-esp32dev-v1.13.5.bin(andbc250-switch-esp32dev-v1.13.5.bin): Standard ESP32-WROOM-32 (DevKitC) boards (Classic Bluetooth wake).bc-awake-esp32cam-v1.13.5.bin(andbc250-switch-esp32cam-v1.13.5.bin): AI-Thinker ESP32-CAM boards (Classic Bluetooth wake).bc-awake-esp32c3-v1.13.5.bin(andbc250-switch-esp32c3-v1.13.5.bin): ESP32-C3 DevKitM-1 / SuperMini boards (BLE wake).
OTA Upgrade Note: Fully compatible with existing dual-bank partition layouts. Upgrade directly over the air using the portal's Firmware update (OTA) card in the System tab.
Release v1.13.4: Fix Startup PS_ON# Latch State in STATE_OFF
What's Changed in v1.13.4
🐛 Fix Startup PS_ON_PIN Output Latch Initialization on Arduino-ESP32 v3.x
- ESP-IDF Hardware Latch Pre-Load + Arduino HAL Sync: In
v1.13.3, callingdigitalWrite(PS_ON_PIN, PS_ON_RELEASE)beforepinMode(PS_ON_PIN, OUTPUT_OPEN_DRAIN)was rejected by Arduino-ESP32 v3.x's peripheral manager (__digitalWrite(): IO 14 is not set as GPIO), leaving the hardware output register at its power-on reset state (0=LOW=PS_ON_ASSERT) once open-drain mode was enabled and causing the ATX PSU to immediately power on the BC250 board when AC power was connected.normalBegin()now callsgpio_set_level((gpio_num_t)PS_ON_PIN, PS_ON_RELEASE)beforepinMode(PS_ON_PIN, OUTPUT_OPEN_DRAIN)to pre-load the hardware latchHIGHwithout glitching, followed immediately bydigitalWrite(PS_ON_PIN, PS_ON_RELEASE)afterpinMode()soPS_ON#remains cleanly released (high-Z) inSTATE_OFF.
Included Firmware Binaries
bc-awake-esp32dev-v1.13.4.bin(andbc250-switch-esp32dev-v1.13.4.bin): Standard ESP32-WROOM-32 (DevKitC) boards (Classic Bluetooth wake).bc-awake-esp32cam-v1.13.4.bin(andbc250-switch-esp32cam-v1.13.4.bin): AI-Thinker ESP32-CAM boards (Classic Bluetooth wake).bc-awake-esp32c3-v1.13.4.bin(andbc250-switch-esp32c3-v1.13.4.bin): ESP32-C3 DevKitM-1 / SuperMini boards (BLE wake).
OTA Upgrade Note: Fully compatible with existing dual-bank partition layouts. Upgrade directly over the air using the portal's Firmware update (OTA) card in the System tab.
Release v1.13.3: Fix ESP32-CAM Power Flicker Loop
What's Changed in v1.13.3
🐛 Power State & Radio Brownout Hardening
- Pre-Loaded PS_ON Output Latch: Writes
PS_ON_RELEASEto the output register before invokingpinMode(PS_ON_PIN, OUTPUT_OPEN_DRAIN)during startup innormalBegin(), eliminating any transient sub-millisecond LOW glitch during open-drain configuration. - Spaced Board Sense Consensus Filter: Inserts a
200 µsdelay between each of the 16 consecutive digital samples (~3.2 ms total window) onBOARD_ESP32CAMGPIO 13(BOARD_SENSE), rejecting high-frequency switching noise and ensuring consensus across a real time window. - Brownout Recovery & Startup Qualification Window: Detects
ESP_RST_BROWNOUTreset reason to skipSTATE_ONauto-adoption and bleed rail capacitance for 500 ms inSTATE_OFF. On normal boot, requiresreadBoardSense()to remain continuouslyHIGHfor the full 250 ms (BOARD_ON_DEBOUNCE_MS) window before adoptingSTATE_ONand asserts a 200 ms settling delay before initializing wireless radios. - Idempotent Bluetooth Initialization: Makes
btBegin()idempotent when the Classic Bluetooth controller is already running and guards BT discovery / page scan so they are only enabled inSTATE_OFFand disabled inSTATE_BOOTINGandSTATE_ON. - Capped ESP32-CAM Wi-Fi TX Power & Staggered Station MAC Transition: Limits Wi-Fi transmit power to
11 dBmonBOARD_ESP32CAMacross SoftAP and Station modes to prevent AMS1117-3.3 voltage droop under simultaneous BT + Wi-Fi bursts, and defers station MAC transitions out ofSTATE_OFFby 500 ms via a non-blocking timer.
Included Firmware Binaries
bc-awake-esp32dev-v1.13.3.bin(andbc250-switch-esp32dev-v1.13.3.bin): Standard ESP32-WROOM-32 (DevKitC) boards (Classic Bluetooth wake).bc-awake-esp32cam-v1.13.3.bin(andbc250-switch-esp32cam-v1.13.3.bin): AI-Thinker ESP32-CAM boards (Classic Bluetooth wake).bc-awake-esp32c3-v1.13.3.bin(andbc250-switch-esp32c3-v1.13.3.bin): ESP32-C3 DevKitM-1 / SuperMini boards (BLE wake).
OTA Upgrade Note: Fully compatible with existing dual-bank partition layouts. Upgrade directly over the air using the portal's Firmware update (OTA) card in the System tab.
Release v1.13.2: Bluetooth Wake Stabilization & ESP32-CAM Flash Removal
What's Changed in v1.13.2
🐛 Bluetooth Wake Stabilization & Power Sense Hardening
- Permanent ESP32-CAM Flash LED Removal: Completely removes all camera flash LED pulsing (
triggerFlash,triggerFlashBurst,updateFlash), NVSflashOnWakeconfiguration,/api/settingsroute, and Web UI toggles while clampingGPIO 4(FLASH_LED) permanentlyLOWat startup to eliminate ~200–350 mA 5V/3.3V voltage rail droop during Bluetooth wake. - Reduced Bluetooth Radio Current Burst on Wake: Gates HCI
OP_REMOTE_NAME_REQinsrc/bt_classic.cppbehind active pairing listener mode (listenerActive) so normal controller wake connections immediately reject after ACL page-scan verification without initiating an extra paging transmission. - Multi-Sample Digital Board Sense Filtering: Requires 16 consecutive unanimous digital reads (
SENSE_OVERSAMPLE, ~1.6 ms window) onBOARD_ESP32CAMGPIO 13(BOARD_SENSE) before accepting aHIGH/LOWsample, rejecting transient switching glitches on the BC250 USB 5V rail. - Hardened Boot Confirmation Debounce: Increases
STATE_BOOTINGboard-sense confirmation debounce from30 msto250 ms(BOARD_ON_DEBOUNCE_MS) across all targets so early power rail stabilization ripples cannot falsely confirmSTATE_ONand trigger an immediate transition back toSTATE_OFF.
Included Firmware Binaries
bc-awake-esp32dev-v1.13.2.bin(andbc250-switch-esp32dev-v1.13.2.bin): Standard ESP32-WROOM-32 (DevKitC) boards (Classic Bluetooth wake).bc-awake-esp32cam-v1.13.2.bin(andbc250-switch-esp32cam-v1.13.2.bin): AI-Thinker ESP32-CAM boards (Classic Bluetooth wake).bc-awake-esp32c3-v1.13.2.bin(andbc250-switch-esp32c3-v1.13.2.bin): ESP32-C3 DevKitM-1 / SuperMini boards (BLE wake).
OTA Upgrade Note: Fully compatible with existing dual-bank partition layouts. Upgrade directly over the air using the portal's Firmware update (OTA) card in the System tab.
Release v1.13.1: Host-Powered Wi-Fi Onboarding & SoftAP Provisioning State Fix
What's Changed in v1.13.1
🚀 Direct Wi-Fi Onboarding While Host Is Powered On
- Always-Available Setup on Unconfigured Boot: The setup portal SoftAP now launches automatically if the board is unconfigured, even while the host machine is powered on, without interrupting normal power control or button monitoring.
- Protected Force Shutdown: Restricts the 8-second button hold for entering setup mode to
STATE_OFF, ensuring the 5-second long-press force shutdown remains reliable and safe while the host is powered on. - Host-Active Network Configuration: Enables
/api/networkPOST and Web UI configuration updates while the host is ON during setup mode. - Association Timeout & Fallback: Introduces a 20-second Wi-Fi connection timeout with SoftAP retention so connectivity issues don't drop setup access.
- Interactive Setup Wizard CLI: Adds a dedicated terminal onboarding script (
tools/bc250-setup/bc250-setup.py) and test suite for headless onboarding.
🐛 Bug Fix: SoftAP Loop Prevention via Explicit Provisioned State
- Explicit Provisioning Flag: Persists an explicit
provisionedflag in NVS when completing setup or when exiting setup mode via button hold. - Reliable Boot Mode: Ensures
isConfigured()accurately reflects onboarding completion even when Wi-Fi credentials are unset or optional, preventing unintended fallback loops into SoftAP mode. - Factory Reset Support: Accurately clears the provisioned flag on factory reset to allow re-onboarding.
Included Firmware Binaries
bc-awake-esp32dev-v1.13.1.bin(andbc250-switch-esp32dev-v1.13.1.bin): Standard ESP32-WROOM-32 (DevKitC) boards (Classic Bluetooth wake).bc-awake-esp32cam-v1.13.1.bin(andbc250-switch-esp32cam-v1.13.1.bin): AI-Thinker ESP32-CAM boards (Classic Bluetooth wake + Flash LED indicator).bc-awake-esp32c3-v1.13.1.bin(andbc250-switch-esp32c3-v1.13.1.bin): ESP32-C3 DevKitM-1 / SuperMini boards (BLE wake).
OTA Upgrade Note: Fully compatible with existing dual-bank partition layouts. Upgrade directly over the air using the portal's Firmware update (OTA) card in the System tab.
Release v1.12.1: Fix Portal Server Bootloop on Wi-Fi Disabled
What's Changed in v1.12.1
🐛 Bug Fix: Prevent Portal Server Bootloop on Wi-Fi Disabled or Unconfigured
- Deferred Web Server Initialization: Moved
portalServerBegin()fromnormalBegin()intonetworkWakeLoop()so the persistent web portal is started only after Wi-Fi Station connectivity has been established. - Defensive Guard: Added an explicit check in
portalServerBegin()to return immediately without binding sockets if Wi-Fi is inWIFI_OFFmode, preventing FreeRTOS assertion crashes (xQueueSemaphoreTake (( pxQueue ))). - Resilient Offline Boot: Devices with unconfigured network settings or disabled Network Wake (
wolEnabled = false) now boot reliably into normal mode without crash-looping, preserving physical power button operation and Bluetooth wake.
Included Firmware Binaries
bc-awake-esp32dev-v1.12.1.bin(andbc250-switch-esp32dev-v1.12.1.bin): Standard ESP32-WROOM-32 (DevKitC) boards (Classic Bluetooth wake).bc-awake-esp32cam-v1.12.1.bin(andbc250-switch-esp32cam-v1.12.1.bin): AI-Thinker ESP32-CAM boards (Classic Bluetooth wake + Flash LED indicator).bc-awake-esp32c3-v1.12.1.bin(andbc250-switch-esp32c3-v1.12.1.bin): ESP32-C3 DevKitM-1 / SuperMini boards (BLE wake).
OTA Upgrade Note: Fully compatible with existing dual-bank partition layouts. Upgrade directly over the air using the portal's Firmware update (OTA) card in the System tab.