Arduino RP2040 data transmission problem


I have a small problem with my MIT App Inventor application.

I'm trying to do something rather basic: Send a byte to my arduino when I press a button. And then, if it works, send a float when I move a slider.

The problem is that I get nothing. However, when I use the "BytesWritten" function, the correct value is displayed in my Label.

Trying with the nRF Connect application, I manage to send a bytes on my "button" UUID. But not with MIT :(. Have I forgotten something? Do I need a special authorization that nRF connect asks for without me seeing it but that I have to do manually on MIT app ?

Thanks in advance for your help.

My Arduino code :

#include <ArduinoBLE.h>

// Définition de l'UUID pour le service et la caractéristique

BLEService appandroid("0bd217e8-f703-11ee-a951-0242ac120002"); // Crée un service BLE personnalisé
BLEByteCharacteristic boutonCharacteristic("0bd21a0e-f703-11ee-a951-0242ac120002", BLERead | BLENotify | BLEWrite); // Caractéristique pour la valeur du bouton
BLEFloatCharacteristic sliderCharacteristic("0bd21e5a-f703-11ee-a951-0242ac120002", BLERead | BLENotify | BLEWrite); // Caractéristique pour la valeur du slider

float sliderValue = 0;
byte boutonvalue = 0;

void setup() {

  // Initialise le BLE
  if (!BLE.begin()) {
    Serial.println("Starting BLE failed!");
    while (1);

  // Déclare le service et la caractéristique



  // Commence à diffuser le service BLE

  Serial.println("Bluetooth device active, waiting for connections...");

void loop() {
  // Écoute les connexions BLE
  BLEDevice central = BLE.central();

  // Si une connexion est établie
  if (central) {
    Serial.print("Connected to central: ");

    // Tant que la connexion est active
    while (central.connected()) {

      // Attend la mise à jour de la valeur de la caractéristique du slider
      if (sliderCharacteristic.written()) {
        // Lit la nouvelle valeur du slider
        sliderValue = sliderCharacteristic.value();
        Serial.print("Received slider value: ");
        // Faites ce que vous voulez avec la valeur du slider ici
      if (boutonCharacteristic.written()) {
        // Lit la nouvelle valeur du slider
        boutonvalue = boutonCharacteristic.value();
        Serial.print("Received bouton value: ");
        // Faites ce que vous voulez avec la valeur du slider ici


    // La connexion a été perdue
    Serial.print("Disconnected from central: ");

Screen of my MIT App :

Hi, one thing may be that you haven't done"registerforbytes", this sends a notification to your device, try this example:

This doesn't work. And for me, "registerforbyte" is used to receive bytes from the arduino. But here, I want to send bytes, and for me, I shouldn't use it.

Did you try it anyway, it's needed to finalise the connection, even if you don't write.

I tried yes, but nothing change.

This is stupid, I'm almost there, but the most important part is missing ^^