🛠 Bluetooth LE : serveur GATT avec la radio 5.2
Objetivos
La Pico 2 W incorpora el mismo CYW43439 que la Pico W: Bluetooth 5.2 confirmado, con roles BLE central y periférico, e incluso Bluetooth Classic. Este tutorial configura un servidor GATT: la placa emite una publicidad, un smartphone se conecta a ella y lee una característica que cuenta los segundos. El BLE coexiste con el Wi-Fi en el mismo chip, pero es necesario elegir la arquitectura btstack en lugar de lwIP en el momento de la compilación.
Material
- Pico 2 W + pico-sdk (función btstack)
- Smartphone con cualquier escáner BLE (nRF Connect)
- Cable USB y consola serie
Código completo
// main.c - squelette inspire de pico-examples pico_w/btstack
// lien : pico_btstack_cyw43 pico_stdlib
#include "pico/stdlib.h"
#include "pico/cyw43_arch.h"
#include "btstack.h"
static const uint8_t adv_data[] = {
0x02, 0x01, 0x06, // flags LE general
0x06, 0x09, 'P', 'i', 'c', 'o', '2' // nom d'annonce
};
int main(void) {
stdio_init_all;
if (cyw43_arch_init) { return 1; } // meme puce que le Wi-Fi
cyw43_arch_enable_bt_mode; // mode Bluetooth du CYW43
// 1) hci_setup + btstack_run_loop
// 2) att_server : service 16 bits 0xA0FB + caracteristique compteur (READ)
// 3) gap_advertise(adv_data) ; dans la boucle, compteur++ chaque seconde
while (true) { sleep_ms(1000); }
}
Verificación esperada
El escáner BLE del smartphone ve la publicidad Pico2, se conecta, y la característica aumenta una unidad por segundo. El LED de la radio puede parpadear durante la publicidad.
Errores frecuentes
- Compilar con la arquitectura lwIP (pico_cyw43_arch_lwip_*) y luego llamar a las API de btstack: se debe usar pico_btstack_cyw43.
- Confundirla con la Pico 2 simple: sin el chip CYW43, no es posible usar BLE.
- Nombre de publicidad demasiado largo: el marco BLE está limitado y la publicidad es rechazada.
- No hay escáner BLE en Windows sin un adaptador externo: prueba desde el teléfono.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.pyPythonbouton-interruption.pyPythonpwm-servo.pyPythonlecture-adc.pyPythonneopixel.pyPythonoled-i2c.pyPython