BLE defining custom UUID cant make it work

RAK4631 programing it with VSCODE:

with bluefruit.h library always get a default UUIDs for RAK module and trying to define new custom UUIDs to use with some app does not work and always uses de defaults.

BLEService          customService(SERVICE_UUID_0);
BLECharacteristic   txCharacteristic(CHARACTERISTIC_UUID_TX_0);
BLECharacteristic   rxCharacteristic(CHARACTERISTIC_UUID_RX_0);

g_BleUart.begin();
customService.begin();

Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit.Advertising.addTxPower();
Bluefruit.Advertising.addName();
Bluefruit.Advertising.addService(customService);

Bluefruit.Advertising.restartOnDisconnect(true);
Bluefruit.Advertising.setInterval(32, 244);
Bluefruit.Advertising.setFastTimeout(30);
Bluefruit.Advertising.start(0);

You cannot change the UUID of the BLE UART port as far as I know, but you can create a new custom characteristic to send/receive data.

Code example attached.

Custom service advertised

Reading custom service data from the device:

Sending data to the device:

Data received on the device:
image

Code:main.zip (1.9 KB)

but creating a customService does not work either?

My examples shows how to do add custom service.

I followed it and could add a few customServices, but it seems I cant make them advertised and iOS app confirms it. Not Advertise Service available for this board.

void setup() {
        Bluefruit.begin(1, 0);
        Bluefruit.setTxPower(8);
        Bluefruit.setName("LoRa_APRS_RAK4631"); 

        Bluefruit.Periph.setConnectCallback(bleConnectCallback);
        Bluefruit.Periph.setDisconnectCallback(bleDisconnectCallback);

        g_BleUart.begin();
        customService.begin();

        txCharacteristic.setProperties(CHR_PROPS_READ | CHR_PROPS_NOTIFY);
        txCharacteristic.setPermission(SECMODE_OPEN, SECMODE_NO_ACCESS);
        txCharacteristic.setFixedLen(256);
        txCharacteristic.begin();

        rxCharacteristic.setProperties(CHR_PROPS_WRITE | CHR_PROPS_WRITE_WO_RESP);
        rxCharacteristic.setPermission(SECMODE_OPEN, SECMODE_OPEN);
        rxCharacteristic.setFixedLen(256);
        rxCharacteristic.begin();


        // Configure advertising
        Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);    
        Bluefruit.Advertising.addTxPower();
        Bluefruit.Advertising.addName();
        Bluefruit.Advertising.addService(g_BleUart);
        Bluefruit.Advertising.addService(customService);  // Advertise the custom service

        // Set advertising options
        Bluefruit.Advertising.restartOnDisconnect(true);    // - Enable auto advertising if disconnected
        Bluefruit.Advertising.setInterval(32, 244);         // - Interval:  fast mode = 20 ms, slow mode = 152.5 ms / in unit of 0.625 ms  
        Bluefruit.Advertising.setFastTimeout(30);           // - Timeout for fast mode is 30 seconds: number of seconds in fast mode
        Bluefruit.Advertising.start(0);                     // - Start(timeout) with timeout = 0 will advertise forever (until connected) --> 0 = Don't stop advertising after n seconds
    }

changing this to:

Bluefruit.ScanResponse.addTxPower();
Bluefruit.ScanResponse.addName();

let me get advertised as required !