ble_uart.py
La Feather se transforme en terminal série Bluetooth : le service NUS (Nordic UART) diffuse, l’app Adafruit Connect se connecte, et les tick 1 Hz arrivent sur le téléphone. La fin du câble USB pour les projets embarqués sur batterie.
Matériel requis
Une Adafruit Feather nRF52840 Express (SoC nRF52840 Cortex-M4F, BLE 5 / 802.15.4) avec NeoPixel embarqué, LED rouge, 2 Mo de flash QSPI pour le système de fichiers CircuitPython et connecteur batterie LiPo. La Feather seule ; un téléphone Android/iOS avec l’app gratuite Adafruit Connect (ou n’importe quel client BLE série).
Câblage
Aucun câblage : l’antenne est sur la carte. L’USB ne sert plus qu’à charger ou éditer code.py.
Fonctionnement
BLERadio pilote la radio nRF52840 ; ProvideServicesAdvertisement annonce le service UART ; UARTService expose write/read sur un canal BLE. La boucle bascule publiquement entre attente et échange.
Exécution
CircuitPython (build feather_nrf52840_express) installé via le bootloader UF2 (double reset) ; éditer code.py sur le lecteur CIRCUITPY, console dans Mu/Thonny.
Variantes
Envoyer des mesures de capteur au lieu de ticks, recevoir des commandes pour piloter un relais, ou passer au BLE HID (clavier) pour l’automatisation.
ble_uart.py
# BLE UART : la console passe dans l'air.
#libs : adafruit_ble (Bundle Adafruit CircuitPython Library).
# Client : app "Adafruit Connect" sur téléphone.
import time
import board
from adafruit_ble import BLERadio
from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
from adafruit_ble.services.nordic import UARTService
ble = BLERadio()
uart = UARTService()
annonce = ProvideServicesAdvertisement(uart)
print("Attente de connexion BLE...")
ble.start_advertising(annonce)
while not ble.connected:
time.sleep(0.2)
print("Connecté !")
compteur = 0
while ble.connected:
compteur += 1
uart.write("tick %d\n" % compteur)
# Entrée du téléphone -> console de la carte
if uart.in_waiting:
print("Reçu:", uart.read(uart.in_waiting))
time.sleep(1)