Bluetooth Serial Monitor Can't Pair with Arduino Nano 33 Ble

I am very new to arduino nano 33 ble and I want to send and receive data from an app to the mcu. But I have trouble pairing my phone and mcu from the start. I’m using Serial Bluetooth Monitor app and tried to pair with “LED” which is the localname of my bluetooth in MCU, but I receive the error “Connection failed: no serial profile found → use long click on device to define custom profile” as shown in pic 1. I tried following the instruction but got the error “no services discovered that provide read and write characteristics” as shown in pic 2. I really dont know what to do. Can you please help me with this

this is my code in arduino nano 33 ble

/*
LED

This example creates a BLE peripheral with service that contains a
characteristic to control an LED.

The circuit:

  • Arduino MKR WiFi 1010, Arduino Uno WiFi Rev2 board, Arduino Nano 33 IoT,
    Arduino Nano 33 BLE, or Arduino Nano 33 BLE Sense board.

You can use a generic BLE central app, like LightBlue (iOS and Android) or
nRF Connect (Android), to interact with the services and characteristics
created in this sketch.

This example code is in the public domain.
*/

#include <ArduinoBLE.h>

BLEService ledService(“19B10000-E8F2-537E-4F6C-D104768A1214”); // BLE LED Service

// BLE LED Switch Characteristic - custom 128-bit UUID, read and writable by central
BLEByteCharacteristic switchCharacteristic(“19B10001-E8F2-537E-4F6C-D104768A1214”, BLERead | BLEWrite);

const int ledPin = LED_BUILTIN; // pin to use for the LED

void setup() {
Serial.begin(9600);
while (!Serial);

// set LED pin to output mode
pinMode(ledPin, OUTPUT);

// begin initialization
if (!BLE.begin()) {
Serial.println(“starting BLE failed!”);

while (1);
}

// set advertised local name and service UUID:
BLE.setLocalName(“FIM0001”);
BLE.setAdvertisedService(ledService);

// add the characteristic to the service
ledService.addCharacteristic(switchCharacteristic);

// add service
BLE.addService(ledService);

// set the initial value for the characeristic:
switchCharacteristic.writeValue(0);

// start advertising
BLE.advertise();

Serial.println(“BLE LED Peripheral”);
}

void loop() {
// listen for BLE peripherals to connect:
BLEDevice central = BLE.central();

// if a central is connected to peripheral:
if (central) {
Serial.print("Connected to central: ");
// print the central’s MAC address:
Serial.println(central.address());

// while the central is still connected to peripheral:
while (central.connected()) {
// if the remote device wrote to the characteristic,
// use the value to control the LED:
if (switchCharacteristic.written()) {
if (switchCharacteristic.value()) { // any value other than 0
Serial.println(“LED on”);
digitalWrite(ledPin, HIGH); // will turn the LED on
} else { // a 0 value
Serial.println(F(“LED off”));
digitalWrite(ledPin, LOW); // will turn the LED off
}
}
}

// when the central disconnects, print it out:
Serial.print(F("Disconnected from central: "));
Serial.println(central.address());
}
}

Pairing is an optional security feature of Bluetooth LE and is not supported by the ArduinoBLE library.

You can use an app to just connect to an BLE device. I use BLE Scanner from bluepixel technologies. Its free on the iPhone, but there are other apps as well. Just start the app, wait for the devices to appear on the Scanner page, click connect and you can start reading and writing to characteristics depending the settings you have done in your sketch.

Apps that support special things like Serial are intended for other chips that have special protocols implemented. They are not what you want.

Your sketch creates a structure called a GATT which contains services and characteristics. This is the basic for BLE and describes the data your device/sketch provides and is much more flexible.