I'm using a nRF52832 as peripheral and a nRF52840 as central.
In the peripheral device I add the device name to the ScanResponse:
Code: Select all
void setup() {
Serial.begin(115200);
while ( !Serial ) delay(10);
if (!Bluefruit.begin()) {
Serial.println("Unable to init Bluefruit");
while(1) {
digitalToggle(LED_RED);
delay(100);
}
}
else {
Serial.println("Bluefruit initialized (peripheral mode)");
}
Bluefruit.setName(__NAME__);
Bluefruit.autoConnLed(false);
Bluefruit.setTxPower(4);
battery_service.begin();
battery_level_characteristic.setProperties(CHR_PROPS_READ);
battery_level_characteristic.setPermission(SECMODE_OPEN, SECMODE_NO_ACCESS);
battery_level_characteristic.setFixedLen(1);
battery_level_characteristic.begin();
Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit.Advertising.addTxPower();
Bluefruit.Advertising.addUuid(uuid);
Bluefruit.Advertising.addService(battery_service);
Bluefruit.ScanResponse.addName(); // <========================= HERE
Bluefruit.Advertising.restartOnDisconnect(true);
Bluefruit.Advertising.setInterval(32, 244); // in units of 0.625 ms
Bluefruit.Advertising.setFastTimeout(30); // number of seconds in fast mode
Bluefruit.Advertising.start();
Serial.println("Advertising started");
}
Code: Select all
void setup() {
Serial.begin(115200);
delay(100);
if ( !Bluefruit.begin(2, 2) ) {
Serial.println("Unable to init Bluefruit");
while(1)
{
digitalToggle(LED_RED);
delay(100);
}
}
else {
Serial.println("Bluefruit initialized (central mode)");
}
Bluefruit.setName(__NAME__);
Bluefruit.setTxPower(TXPOWER);
Bluefruit.autoConnLed(false);
clientUart.begin();
clientUart.setRxCallback(bleuart_rx_callback);
Bluefruit.Central.setConnectCallback(connect_callback);
Bluefruit.Central.setDisconnectCallback(disconnect_callback);
Bluefruit.Scanner.setRxCallback(scan_callback); // <==================== HERE
Bluefruit.Scanner.restartOnDisconnect(true);
Bluefruit.Scanner.filterUuid(tableUUID, relayUUID);
Bluefruit.Scanner.setInterval(160, 80);
Bluefruit.Scanner.useActiveScan(true); // <==================== HERE
Bluefruit.Scanner.start(0);
Serial.println("Scanning ...!");
}
Code: Select all
void scan_callback(ble_gap_evt_adv_report_t* report) {
Serial.printf("scan_response is: %u\n", report->type.scan_response); // <=========== HERE
uint8_t buffer[10];
memset(buffer, 0, sizeof(buffer));
uint8_t res = Bluefruit.Scanner.parseReportByType(report, BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME, buffer, sizeof(buffer) - 1); // <============ HERE
Serial.printf("Got successfully device name? %u \n", res);
if ( Bluefruit.Scanner.checkReportForUuid(report, relayUUID) ) {
scan_callback_relay(report);
}
if ( Bluefruit.Scanner.checkReportForUuid(report, tableUUID) ) {
scan_callback_table(report);
}
Bluefruit.Scanner.resume();
}
How to do it properly?