b-parasite-esp32/code/nrf-connect/samples/ble
rbaron 7be5fe1669 [ble] Bumps default advertising interval to [30, 40] ms
This makes the BLE sample use the same parameters as the legacy
firmware, and immproves the range.
2023-02-12 16:02:51 +01:00
..
media Adds samples/ble/README.md 2022-12-07 18:57:27 +01:00
src Make advertisement intervals configurable 2023-01-28 11:44:17 +01:00
.gitignore Add blinky sample 2022-11-28 19:38:32 +01:00
ble.code-workspace Add blinky sample 2022-11-28 19:38:32 +01:00
CMakeLists.txt Extracts boards/ and dts/ to prstlib 2022-11-27 18:56:47 +01:00
Kconfig [ble] Bumps default advertising interval to [30, 40] ms 2023-02-12 16:02:51 +01:00
nrf52840dk_nrf52840.overlay Extracts prstlib 2022-11-27 18:37:42 +01:00
prj.conf Add board 1.0.0, 1.1.0, 1.2.0 board revisions for nRF52840 variant 2022-12-03 10:46:48 +01:00
README.md Adds samples/ble/README.md 2022-12-07 18:57:27 +01:00

Bluetooth Low Energy (BLE)

In this saple, b-parasite sensors are periodically read and broadcast using Bluetooth Low Energy (BLE) dvertising packets.

Configuration

Available configurations and their default values are in Kconfig. They are set in prj.conf. Here are some notable examples.

Sleep Interval

To save energy, the board spends most of the time in a "deep sleep" state, in which most peripherals and radio are completely turned off. The period of sleep is controlled by the PRST_SLEEP_DURATION_SEC config.

Advertising Duration

When it wakes up, the sample reads all sensors and keep broadcasting advertising packets for PRST_BLE_ADV_DURATION_SEC before going back to sleep.

Advertising Packet Encoding

There are different ways to encode the sensor data in a BLE advertising packet.

BTHome Encoding

BTHome is a new (as of Dec/2022) open standard for encoding sensor data in BLE applications. Home Assistant supports it out of the box. This makes the deployment extra convenient, since no additional configuration is needed - Home Assistant will automatically detect b-parasites in range.

What's even more interesting is that by employing ESPHome bridges with the bluetooth_proxy component, the range of BLE coverage can be transparently increased. Multiple ESPHome bridges will forward received BLE broadcasts to Home Assistant.

This is what a typical deployment with BTHome looks like: Topology with BTHome + Home Assistant

There are two versions of BTHome encodings supported by this sample:

  • PRST_BLE_ENCODING_BTHOME_V1=y uses the legacy BTHome V1, which was briefly in use
  • PRST_BLE_ENCODING_BTHOME_V2=y uses the BTHome V2, which is not yet (as of early Dec/2022) in the stable Home Assistant release. This will soon become the default.

b-parasite Encoding

PRST_BLE_ENCODING_BPARASITE_V2=y selects the "legacy" encoding, used historically inn this project. This is the encoding that the b_parasite ESPHome component understands.

With this encoding and a ESPHome + b_parasite component, this is an usual deployment topology:

Topology with Legacy encoding + Home Assistant

The disadvantages of this encoding are:

  • Each b-parasite has to be configured in the ESPHome component
  • Range is limited, unless multiple ESPHome bridges are deployed with the same static configuration

Battery Life

tl;dr: Theoretically well over two years with default settings.

While in deep sleep, the board consumes around 3.0 uA:

Sleep current consumption

In the active broadcasting state, with default settings, the average current consumption is around 344 uA:

Broadcasting current consumption

With a 200 mAh CR2032 battery, we can use this spreadsheet to estimate the battery life to over two years. Note that this is a simplified model and results in practice may vary.