🛠 Bluetooth LE : serveur GATT avec la radio 5.2
Objectifs
La Pico 2 W embarque le même CYW43439 que la Pico W : Bluetooth 5.2 confirmé, avec BLE rôles central et peripheral et même Bluetooth Classic. Ce tutoriel met en place un serveur GATT : la carte diffuse une annonce, un smartphone s'y connecte et lit une caractéristique qui compte les secondes. Le BLE cohabite avec le Wi-Fi sur la même puce, mais il faut choisir l'architecture btstack au lieu de lwIP au moment de la compilation.
Matériel
- Pico 2 W + pico-sdk (feature btstack)
- Smartphone avec n'importe quel scanner BLE (nRF Connect)
- Cable USB et console série
Code complet
// 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; } // même 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 + caractéristique compteur (READ)
// 3) gap_advertise(adv_data) ; dans la boucle, compteur++ chaque seconde
while (true) { sleep_ms(1000); }
}
Vérification attendue
Le scanner BLE du smartphone voit l'annonce Pico2, se connecte, et la caractéristique augmente d'une unité par seconde. La LED de la radio peut clignoter pendant la publicité.
Erreurs fréquentes
- Compiler en architecture lwIP (pico_cyw43_arch_lwip_*) puis appeler les API btstack : il faut pico_btstack_cyw43.
- Confondre avec la Pico 2 simple : sans puce CYW43, aucun BLE n'est possible.
- Nom d'annonce trop long : l'enveloppe BLE est limitee, la publicité est rejetee.
- Pas de scanner BLE sous Windows sans adaptateur externe : tester depuis le telephone.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.pyPythonbouton-interruption.pyPythonpwm-servo.pyPythonlecture-adc.pyPythonneopixel.pyPythonoled-i2c.pyPython