🛠 Périphérique BLE : pont série air ↔ USB (Bluefruit)
Objectifs
Créer un périphérique BLE avec la pile Nordic SoftDevice via Bluefruit52Lib (core Adafruit nRF52) : le service Nordic UART (NUS) sert de pont entre un téléphone (app Bluefruit LE Connect) et le port série USB. Comprendre advertising, connexion et la contrainte clé : la SoftDevice a une priorité supérieure à tout le code utilisateur quand la radio tourne.
Matériel
- 1× Adafruit Feather nRF52840 Express + câble micro-USB à données
- 1× smartphone Android/iOS avec l'app Bluefruit LE Connect
- Core Adafruit nRF52 Boards ≥ 1.1.x + bibliothèque Adafruit Bluefruit nRF52 Libraries
Code complet
// nrf52840-ble-peripheral-bluefruit.ino — inspire de l'exemple officiel bleuart
#include <bluefruit.h>
BLEUart bleuart; // service Nordic UART (caractéristiques RX/TX)
void setup {
Serial.begin(115200); // console USB CDC
Bluefruit.begin; // démarre la SoftDevice (orchestree FreeRTOS)
Bluefruit.setTxPower(4); // jusqu'à +8 dBm sur le module MDBT50Q
Bluefruit.setName("Feather52840");
bleuart.begin;
Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit.Advertising.addService(bleuart);
Bluefruit.Advertising.start(0); // advertising illimite
}
void loop {
if (bleuart.available) // telephone -> carte -> USB
Serial.write((uint8_t)bleuart.read);
if (Serial.available) // USB -> carte -> telephone
bleuart.write((uint8_t)Serial.read);
}
Vérification attendue
Dans Bluefruit LE Connect, l'appareil « Feather52840 » apparaît, la connexion aboutit et la page UART affiche ce que vous tapez dans le moniteur USB — et réciproquement. Le NeoPixel de la carte clignote en bleu lors de la connexion (comportement de statut du BSP).
Erreurs fréquentes
- Timing dur pendant la radio : la SoftDevice « a une priorité supérieure à tout le code utilisateur, y compris les interruptions » — un pilotage temps réel (NeoPixel strict, trames WS2812) peut casser quand BLE est actif.
- Mauvais profil sélectionné dans l'app : c'est le service *UART* qu'il faut ouvrir, pas « Bluetooth Low Energy » générique.
Bluefruit.beginoublié ou aprèsbleuart.begin: la pile doit démarrer avant les services.- Advertising stoppé silencieusement : sans
start(0), plus de découverte après une déconnexion.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
neopixel_pulsation.pyPythonled_bouton.pyPythonentrees_num.pyPythonanalogique_lumiere.pyPythonservo_pwm.pyPythonscanner_i2c.pyPython