BLE Channel Map for scanning
Posted: Fri Sep 28, 2018 3:23 pm
On another controller we have implemented a small BLE-based mesh using advertising packets.
Low latency (<150ms) and low power is an issue, and we achieve this by letting the nodes synchronize so that they communicate in certain timeslots. Each node transmits an advertisement package with dynamic data in a specific timeslot, while the other nodes listen.
We would like to substitute one of the nodes with an ESP32-based implementation, but are uncertain how to make sure that the radio listens on the correct channel at the right time.
esp_err_t esp_ble_gap_start_advertising(esp_ble_adv_params_t *adv_params)
allows selection of which channels to use for the advertising through
adv_params->channel_map
However, there is not a similar option in
esp_err_t esp_ble_gap_set_scan_params(esp_ble_scan_params_t *scan_params)
On our original controller we have this option, but I have not been able to find something similar in ESP-IDF.
I suppose a radio receiver could be made, so that it receives on multiple channels simultaneously. This would render the channel map option obsolete with respect to scanning. However, I suspect this is not the case for the BT controller in ESP32, although I have not been able to find sufficiently detailed information regarding the ESP32 BT controller/radio implementation online.
So my question is this:
Is it possible to start a scan that catches a packet on a specific BLE advertising channel that we know will be sent within a specific short time interval (3msec +/- 1msec) ?
Low latency (<150ms) and low power is an issue, and we achieve this by letting the nodes synchronize so that they communicate in certain timeslots. Each node transmits an advertisement package with dynamic data in a specific timeslot, while the other nodes listen.
We would like to substitute one of the nodes with an ESP32-based implementation, but are uncertain how to make sure that the radio listens on the correct channel at the right time.
esp_err_t esp_ble_gap_start_advertising(esp_ble_adv_params_t *adv_params)
allows selection of which channels to use for the advertising through
adv_params->channel_map
However, there is not a similar option in
esp_err_t esp_ble_gap_set_scan_params(esp_ble_scan_params_t *scan_params)
On our original controller we have this option, but I have not been able to find something similar in ESP-IDF.
I suppose a radio receiver could be made, so that it receives on multiple channels simultaneously. This would render the channel map option obsolete with respect to scanning. However, I suspect this is not the case for the BT controller in ESP32, although I have not been able to find sufficiently detailed information regarding the ESP32 BT controller/radio implementation online.
So my question is this:
Is it possible to start a scan that catches a packet on a specific BLE advertising channel that we know will be sent within a specific short time interval (3msec +/- 1msec) ?