Ce message a pour but de faire découvrir et de tester le Bluetooth BLE embarqué sur les cartes Arduino.
Pour ce premier message, on testera l'émulation du port série (UART BLE).
La carte qui a servi, est une Arduino nano IOT 33, normalement, les modules bluetooth embarqués sur les cartes que ce soit Arduino ou ESP32 donne la possibilité d'utiliser le Bluetooth classique ou le Bluetooth BLE (Bluetooth Low Energy), mais ce n'est pas le cas pour l'Arduino (pas d'implémentation pour le Bluetooth classique), d'où l'utilité de cette mise en place.
Il n'y a pas de service dédié (donc reconnu comme tel) pour réaliser une connexion série sur le Bluetooth BLE, mais certains constructeurs (NRF Nordic par exemple) ont créé un service pour cela et qui est reconnu par certaines applications externes.
Sachez qu'en général, les applications (Terminal BLE) permettent manuellement de choisir le service et les caractéristiques associés pour réaliser une connexion série; donc ici, il s'agit de mettre en place un service connu pour ne pas avoir à le faire manuellement au niveau de l'appli.
Le code qui suit permet de créer une émulation du port série (SPP UART BLE), l'application android qui a servi est Serial Bluetooth Terminal (de Kai Morich), il y a très peu de terminal BLE qui permette de traiter les chaines de caractères au format UTF8, je ne connais que celui-ci. Pour ceux qui ont un Apple, je vous laisse le soin de trouver une application correspondante.
Il y a une limitation Bluetooth sur le nombre d'octets que l'on peut écrire sur une caractéristique qui est de 20 octets si l'option BLENotify ou BLEIndicate est ajouté, sinon il dépend du MTU pourrait atteindre 124 octets ou plus en charge utile.
Paramètres de l'application (Serial Bluetooth Terminal de Kai Morich) pour le test:
*** Sur certains téléphones, il peut être nécessaire d'activer le GPS pour que le scan s'effectue correctement, même si l'appli ne le demande pas! ***
Terminal Settings: Charset UTF8 (par défaut)
Display mode: Text (par défaut)
Receive Settings: CR ou LF (Ne pas mettre les deux), le Moniteur série d'arduino devra être configuré de la même façon
Send Settings: Character delay -> 0 ms dans ce cas, l'appli envoie les données en bloc (on sera donc limité au 20 premiers caractères par envoie)
ou Send Settings: Character delay -> 1 ms envoie des données au fil de l'eau
la longueur max de la chaine est définie par la variable tamponCompletedText initialisé a 64 octets que vous pourrez modifier
Si vous souhaitez tester le débordement ou envoyer plus de 20 caractères avec l'envoie par bloc (le débordement signifie que l'on aura atteint le nombre de caractère max que la chaine peut recevoir avant le marqueur de fin. Il suffira d'envoyé 20 caractères à la fois (ainsi nous n'aurons pas le caractère de fin de ligne qui est ajouté par l'appli ('\r' ou '\n').