ble_uart.py
La Feather se convierte en terminal serie Bluetooth: el servicio NUS (Nordic UART) se anuncia, Adafruit Connect se conecta y los tick a 1 Hz llegan al teléfono. El fin del cable USB para proyectos a batería.
Hardware
Una Adafruit Feather nRF52840 Express (nRF52840, BLE 5) con NeoPixel, LED rojo, 2 MB de flash QSPI para CircuitPython y conector LiPo. Solo la Feather; un teléfono Android/iOS con la app gratuita Adafruit Connect (o cualquier cliente BLE serie).
Cableado
Sin cableado: la antena va en la placa. El USB solo sirve para cargar o editar code.py.
Funcionamiento
BLERadio pilota la radio del nRF52840; ProvideServicesAdvertisement anuncia el servicio UART; UARTService expone write/read por un canal BLE. El bucle alterna entre espera e intercambio.
Ejecución
CircuitPython (build feather_nrf52840_express) vía bootloader UF2 (doble reset); editar code.py en la unidad CIRCUITPY.
Variantes
Enviar medidas del sensor en vez de ticks, recibir comandos para manejar un relé, o pasar a BLE HID (teclado) para automatización.
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)