Как получить имя подключенного устройства через BLE?
Я внедряю периферийное устройство BLE в свою прошивку с Arduino ESP32.
Когда центр подключится к нему, я хотел бы зарегистрировать имя центра и его адрес.
Как я могу это сделать?
#include <BLEServer.h>
class ServerCallbacks: public BLEServerCallbacks {
void onConnect(BLEServer* pServer) {
ble.log("ServerCallbacks: Connected");
// ==> как добавить идентификатор или имя подключенного устройства в журнал?
ble.deviceConnected = true;
#if SUPPORT_LEDS_INDICATOR
// === Показать цвета флага Франции
// RGBW = 1,2,3, 4
// КОД : BBWRR
// КОД = 33411
const String code = "BBWRR";
ledIndicator.showAccessCode(code);
#endif
#if SUPPORT_BUZZER
/// Звон соединения BLE
buzzer.playBleConnectedMelody();
#endif
};
void onDisconnect(BLEServer* pServer) {
ble.deviceConnected = false;
ble.log("ServerCallbacks: Disconnected");
#if SUPPORT_BUZZER
/// Звон соединения BLE
buzzer.playBleDisconnectedMelody();
#endif
}
};
/// Где-то в настройках:
server = BLEDevice::createServer();
// == Настройте наш
server->setCallbacks(new ServerCallbacks());
1 ответ
(Примечание: это все просто из чтения исходного кода библиотеки, ничего не было протестировано).
Вы не можете получить подробную информацию о только что подключенном клиенте. Однако вы можете получить список подключенных в данный момент клиентов.
В классе BLEServer есть функция
:
std::map<uint16_t, conn_status_t> getPeerDevices(bool client);
Вы можете использовать это, чтобы получить список подключенных клиентов. "Ключ" карты - это идентификатор соединения, а "значение" карты - это структура "conn_status_t", которая включает в себя указатель на структуру однорангового устройства:
typedef struct {
void *peer_device;
bool connected;
uint16_t mtu;
} conn_status_t;
Вы можете сохранить свой собственный список "текущих" идентификаторов соединений и сравнить его с "текущим" списком при создании нового соединения, чтобы определить, какое из них является новым соединением.
Таким образом, вы можете взять этот указатель peer_device, преобразовать его
в
указатель BLEClient, затем вызвать для него любую из обычных функций BLEClient, включая toString()
, которая вернет строковое представление клиента.
Это, конечно, не "имя" клиента. Я не уверен (не будучи экспертом по BLE), как вы получаете имя, но я думаю, вам, возможно, придется активно запрашивать его у клиента, что должно быть вполне возможно, теперь у вас есть указатель на
объект BLEClient.
- Библиотека ардуино или код для ESP32 для сканирования устройств Bluetooth?
- ESP32 запускает BLE после глубокого сна
- Антенна для ESP32-pico-d4
- Как получить продолжительность сканирования менее 1 секунды с помощью Arduino BLE?
- ESP32 - BLE не подключается/не перезапускается после легкого сна
- Служба BLE ESP32 не видна Node-RED
- Ошибка стека ESP32 при чтении с устройства BLE
- BLE OTA не удается обновить прошивку на ESP32 WROVER 16MB