Skip to content

Releases: ffosilva/bc-awake

v2.2.0

Choose a tag to compare

@ffosilva ffosilva released this 24 Oct 00:52

Full Changelog: v2.1.0...v2.2.0

Release v2.1.0: ESP32-CAM Carrier Board Target & BJT Buffer Support

Choose a tag to compare

@ffosilva ffosilva released this 22 Oct 12:43

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

Choose a tag to compare

@ffosilva ffosilva released this 20 Oct 01:12

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_BOOTING or STATE_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 in STATE_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-sync and bc250-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 the gracefulShutdown checkbox in the Power tab.

Included Firmware Binaries

  • bc-awake-esp32dev-v2.0.0.bin (and bc250-switch-esp32dev-v2.0.0.bin): Standard ESP32-WROOM-32 (DevKitC) boards (Classic Bluetooth wake).
  • bc-awake-esp32cam-v2.0.0.bin (and bc250-switch-esp32cam-v2.0.0.bin): AI-Thinker ESP32-CAM boards (Classic Bluetooth wake).
  • bc-awake-esp32c3-v2.0.0.bin (and bc250-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

Choose a tag to compare

@ffosilva ffosilva released this 17 Oct 17:40

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 into STATE_ON (board powered and qualified), the factory MAC restore is deferred by 5000 ms via a non-blocking timer in networkWakeLoop(), 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 reaching STATE_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 following WiFi.mode(WIFI_STA) before calling WiFi.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 dBm on 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 (and bc250-switch-esp32dev-v1.13.6.bin): Standard ESP32-WROOM-32 (DevKitC) boards (Classic Bluetooth wake).
  • bc-awake-esp32cam-v1.13.6.bin (and bc250-switch-esp32cam-v1.13.6.bin): AI-Thinker ESP32-CAM boards (Classic Bluetooth wake).
  • bc-awake-esp32c3-v1.13.6.bin (and bc250-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

Choose a tag to compare

@ffosilva ffosilva released this 17 Oct 15:43

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 (and bc250-switch-esp32dev-v1.13.5.bin): Standard ESP32-WROOM-32 (DevKitC) boards (Classic Bluetooth wake).
  • bc-awake-esp32cam-v1.13.5.bin (and bc250-switch-esp32cam-v1.13.5.bin): AI-Thinker ESP32-CAM boards (Classic Bluetooth wake).
  • bc-awake-esp32c3-v1.13.5.bin (and bc250-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

Choose a tag to compare

@ffosilva ffosilva released this 17 Oct 15:08

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, calling digitalWrite(PS_ON_PIN, PS_ON_RELEASE) before pinMode(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 calls gpio_set_level((gpio_num_t)PS_ON_PIN, PS_ON_RELEASE) before pinMode(PS_ON_PIN, OUTPUT_OPEN_DRAIN) to pre-load the hardware latch HIGH without glitching, followed immediately by digitalWrite(PS_ON_PIN, PS_ON_RELEASE) after pinMode() so PS_ON# remains cleanly released (high-Z) in STATE_OFF.

Included Firmware Binaries

  • bc-awake-esp32dev-v1.13.4.bin (and bc250-switch-esp32dev-v1.13.4.bin): Standard ESP32-WROOM-32 (DevKitC) boards (Classic Bluetooth wake).
  • bc-awake-esp32cam-v1.13.4.bin (and bc250-switch-esp32cam-v1.13.4.bin): AI-Thinker ESP32-CAM boards (Classic Bluetooth wake).
  • bc-awake-esp32c3-v1.13.4.bin (and bc250-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

Choose a tag to compare

@ffosilva ffosilva released this 17 Oct 14:25

What's Changed in v1.13.3

🐛 Power State & Radio Brownout Hardening

  • Pre-Loaded PS_ON Output Latch: Writes PS_ON_RELEASE to the output register before invoking pinMode(PS_ON_PIN, OUTPUT_OPEN_DRAIN) during startup in normalBegin(), eliminating any transient sub-millisecond LOW glitch during open-drain configuration.
  • Spaced Board Sense Consensus Filter: Inserts a 200 µs delay between each of the 16 consecutive digital samples (~3.2 ms total window) on BOARD_ESP32CAM GPIO 13 (BOARD_SENSE), rejecting high-frequency switching noise and ensuring consensus across a real time window.
  • Brownout Recovery & Startup Qualification Window: Detects ESP_RST_BROWNOUT reset reason to skip STATE_ON auto-adoption and bleed rail capacitance for 500 ms in STATE_OFF. On normal boot, requires readBoardSense() to remain continuously HIGH for the full 250 ms (BOARD_ON_DEBOUNCE_MS) window before adopting STATE_ON and 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 in STATE_OFF and disabled in STATE_BOOTING and STATE_ON.
  • Capped ESP32-CAM Wi-Fi TX Power & Staggered Station MAC Transition: Limits Wi-Fi transmit power to 11 dBm on BOARD_ESP32CAM across SoftAP and Station modes to prevent AMS1117-3.3 voltage droop under simultaneous BT + Wi-Fi bursts, and defers station MAC transitions out of STATE_OFF by 500 ms via a non-blocking timer.

Included Firmware Binaries

  • bc-awake-esp32dev-v1.13.3.bin (and bc250-switch-esp32dev-v1.13.3.bin): Standard ESP32-WROOM-32 (DevKitC) boards (Classic Bluetooth wake).
  • bc-awake-esp32cam-v1.13.3.bin (and bc250-switch-esp32cam-v1.13.3.bin): AI-Thinker ESP32-CAM boards (Classic Bluetooth wake).
  • bc-awake-esp32c3-v1.13.3.bin (and bc250-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

Choose a tag to compare

@ffosilva ffosilva released this 17 Oct 11:35

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), NVS flashOnWake configuration, /api/settings route, and Web UI toggles while clamping GPIO 4 (FLASH_LED) permanently LOW at 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_REQ in src/bt_classic.cpp behind 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) on BOARD_ESP32CAM GPIO 13 (BOARD_SENSE) before accepting a HIGH/LOW sample, rejecting transient switching glitches on the BC250 USB 5V rail.
  • Hardened Boot Confirmation Debounce: Increases STATE_BOOTING board-sense confirmation debounce from 30 ms to 250 ms (BOARD_ON_DEBOUNCE_MS) across all targets so early power rail stabilization ripples cannot falsely confirm STATE_ON and trigger an immediate transition back to STATE_OFF.

Included Firmware Binaries

  • bc-awake-esp32dev-v1.13.2.bin (and bc250-switch-esp32dev-v1.13.2.bin): Standard ESP32-WROOM-32 (DevKitC) boards (Classic Bluetooth wake).
  • bc-awake-esp32cam-v1.13.2.bin (and bc250-switch-esp32cam-v1.13.2.bin): AI-Thinker ESP32-CAM boards (Classic Bluetooth wake).
  • bc-awake-esp32c3-v1.13.2.bin (and bc250-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

Choose a tag to compare

@ffosilva ffosilva released this 17 Oct 10:55

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/network POST 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 provisioned flag 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 (and bc250-switch-esp32dev-v1.13.1.bin): Standard ESP32-WROOM-32 (DevKitC) boards (Classic Bluetooth wake).
  • bc-awake-esp32cam-v1.13.1.bin (and bc250-switch-esp32cam-v1.13.1.bin): AI-Thinker ESP32-CAM boards (Classic Bluetooth wake + Flash LED indicator).
  • bc-awake-esp32c3-v1.13.1.bin (and bc250-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

Choose a tag to compare

@ffosilva ffosilva released this 16 Oct 15:33

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() from normalBegin() into networkWakeLoop() 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 in WIFI_OFF mode, 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 (and bc250-switch-esp32dev-v1.12.1.bin): Standard ESP32-WROOM-32 (DevKitC) boards (Classic Bluetooth wake).
  • bc-awake-esp32cam-v1.12.1.bin (and bc250-switch-esp32cam-v1.12.1.bin): AI-Thinker ESP32-CAM boards (Classic Bluetooth wake + Flash LED indicator).
  • bc-awake-esp32c3-v1.12.1.bin (and bc250-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.