COMMUNICATION SANS FIL


La communication sans fil de type WiFi ou encore Bluetooth doit surtout permettre l'échange de données entre cartes Raspberry Pi ou entre cartes Raspberry Pi et autres appareils comme un PC ou un Smartphone.


MENU

  1. Communication WiFi sur réseau local existant
    1. Échange entre PC et Raspberry Pi 4B (RasPi4B) sur réseau local
    2. Raspberry Pi Pico2W comme client sur réseau local
      1. Insertion du Pico2W dans le réseau local par WiFi
      2. Suite de la configuration du Pico2W comme terminal du réseau local : nœud IPv4
      3. Échange entre PC et Pico2W sur réseau local
    3. Carte Pico2W comme Terminal WiFi sur réseau local hébergeant un site web
      1. Site Web simple "Hello World"
      2. Commande extérieure de processus Pico2W

  2. Communication WiFi sur réseau privé à construire (Point d'Accès - Hotspot)
    1. Un PC configuré comme serveur WiFi et un Raspberry Pi 4B comme client
      1. Création du point d'accès
      2. Mise en œuvre de python3 pour l'échange de données
    2. Un Raspberry Pi 4B configuré comme serveur WiFi et un PC comme client
      1. Création du point d'accès
      2. Mise en œuvre de python3 pour l'échange de données
    3. Un Raspberry Pi Pico2W comme Point d'Accès (serveur WiFi)
      1. Configuration du Pico2W comme Point d'Accès WiFi
      2. Serveur web simple - Affichage d'informations
      3. Commande simple
      4. Commande du mouvement d'un véhicule
      5. Capteur "boussole"
      6. Boussole et bras manipulateur
      7. Boussole et bras manipulateur sur 2 coeurs
    4. Connexion d'un client à l'URL définie par le Pico2W configuré comme Point d'Accès (serveur WiFi)
      1. Le dispositif client est un ordinateur portable sous Ubuntu 24.04 LTS - L'interface est Firefox
      2. Le dispositif client est un smartphone de type Samsung Galaxy A23 sous Android 14 - L'interface est Firefox
      3. Le dispositif client est un ordinateur portable sous Ubuntu 24.04 LTS - L'interface est un programme python3
      4. Le dispositif client est un smartphone de type Samsung Galaxy A23 sous Android 14 - L'interface est un programme python3

  3. Communication Bluetooth
    1. Généralités sur le Bluetooth pour comprendre les programmes utilisés
    2. Commande à distance des broches GPIO du Raspberry Pi 4B par Smartphone via Bluetooth
      1. Liens
      2. Principe
      3. Connexion Bluetooth entre Smartphone et Raspberry Pi
      4. Expérimentation
    3. Application du Bluetooth au Pico2W
      1. Raspberry Pi Pico2W utilisant le Bluetooth pour communiquer avec une application Android


1. Communication sur réseau local existant

Généralement à la maison, on dispose d'une connexion internet par fibre reliée à un terminal jouant le rôle de routeur. A partir de ça, on peut se créer un réseau filaire ou de communication par WiFi.
Un réseau local se compose donc d'un serveur et de clients.
Le serveur est le routeur au bout de la fibre, les clients pouvant être des imprimantes, des PC ou autres Raspberry Pi.
On se propose d'échanger des données soit par réseau filaire, soit par WiFi.
Si un Raspberry Pi Pico2W est dans la boucle, il ne peut communiquer sur le réseau local que par WiFi et il lui faudra d'abord s'insérer dans le réseau.

1.1. Échange entre PC et Raspberry Pi 4B (RasPi4B) sur réseau local

J'ai constitué à la maison un réseau local filaire (LAN). Le PC et le RasPi4B peuvent donc être connectés à la box par fil ou par WiFi de façon traditionnelle.

Adresses IPv4 en usage ici
PC RasPi4B
LAN 192.168.1.25 192.168.1.46
WiFi 192.168.1.41 192.168.1.24

Dans un premier exemple, le RasPi4B qui va envoyer des données au PC qui va accuser réception : (Programmes python3: PC_Client_Box.py et RasPi4B_Client_Box.py.

La mise en œuvre de python3 pour l'échange de données se fonde sur la classe socket. La classe principale, socket.socket, permet de créer des objets socket, qui servent de points d'entrée pour la communication réseau (par exemple, pour créer un serveur TCP ou un client TCP).

Liens :

Les méthodes utilisées dans les programmes python n'ont pas besoin d'être introduites, sauf :

AU NIVEAU DU PC :
Dans un terminal démarré à partir du répertoire contenant le programme PC_Client_Box.py, on va le lancer par
sudo python3 PC_Client_Box.py
Le PC joue le rôle de serveur, c'est-à-dire qu'il va attendre une demande de connexion d'un appareil extérieur, demande qu'il va accepter en révélant qui s'est connecté (adresse IP du RasPi4B), puis va recevoir des données et envoyer un accusé de réception

AU NIVEAU DU RasPi4B
Après avoir démarré le programme au niveau du PC, on lance le programme au niveau du RasPi4B : dans un terminal démarré à partir du répertoire du programme RasPi4B_Client_Box.py, on le lance par
python3 RasPi4B_Client_Box.py
Le RasPi4B demande de se connecter au PC puis envoie des données et reçoit une réponse.

1.2. Raspberry Pi Pico2W comme client sur réseau local

Le module de communication WiFi permet d'utiliser le pico2W en 2 modes différents :

Les deux modes sont déclarés et utilisés de façon identique, seuls quelques mots-clés diffèrent. La communication de fait en trois grandes étapes :

Les détails sont donnés ci-après.

1.2.1. Insertion du Pico2W dans le réseau local par WiFi

Le PC est connecté à la box par fil ou par WiFi de façon traditionnelle. Il faut aussi s'assurer d'avoir lancé le WiFi à partir de la box.

Ensuite, avant de procéder à l'échange de données, il faut insérer le Pico2W dans le réseau :

On récupère ainsi l'adresse IPv4, par exemple 192.168.1.34. Ce résultat n'est pas vraiment utile mais permettra plus tard de vérifier les connexions.

1.2.2 Suite de la configuration du Pico2W comme terminal du réseau local : nœud IPv4

La programmation par nœud (sockets = prise ou nœud) permet de connecter deux nœuds d'un réseau pour communiquer entre eux. Un nœud écoute sur un port spécifique d'une adresse IP. Le serveur forme le nœud d'écoute tandis que le client établit la connexion avec le serveur.

On peut maintenant se connecter au serveur (box) via ce nœud (socket ou prise).

1.2.3. Échange entre PC et Pico2W sur réseau local

On va s'intéresser aux 2 programmes python3 et micropython : PC_Client_Box.py et Pico2W_Client_Box.py.

Le programme PC_Client_Box.py de l'exemple précédent est en principe valable ici aussi.

Le programme Pico2W_Client_Box.py contient 2 parties : Cependant l'exécution de ce dernier programme conduit à une erreur : la méthode with ... as ... n'est pas valable avec MicroPython utilisé pour programmer le Pico2W. Cette méthode a donc été remplacée et le bloc se termine maintenant par l'instruction s.close(), mais on sait que la fermeture n'est pas complète. Ceci peut poser problème lorsqu'on relance les programmes.
Alors l'instruction s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) a été rajoutée dans le programme PC_Client_Box.py comme le suggère le lien
https://lxadm.com/socket-error-errno-98-address-already-in-use/
pour permettre la réutilisation immédiate du port, même si celui-ci est dans l’état TIME_WAIT.
Ce programme devient donc maintenant PC_Client_Box2.py .

1.3. Carte Pico2W comme Terminal WiFi sur réseau local hébergeant un site web

1.3.1. Site Web simple "Hello World"

Tout comme le programme Pico2W_Client_Box.py, le programme Pico2W_SiteWEB.py est décomposé en 2 parties.
La partie 1, c'est-à-dire l'insertion dans le réseau du Pico2W est identique.
Au début de la partie 2, le Pico2W est configuré comme serveur, attendant que des clients demandent une connexion.

Voici la procédure d'exécution :

1.3.2. Commande extérieure de processus Pico2W

Les programmes Pico2W_Box_web_control_LED.py et Pico2W_Box_web_control_mouv.py sont des exemples qui permettent de commander, par une page web, un processus lié au serveur.
Dans le premier exemple, on utilise des boutons et dans le second exemple, une disposition spatiale qui ressemble beaucoup à celle utilisée par la classe Python - Bluedot dans la commande du véhicule autonôme, non présente dans MicroPython et qui en constitue donc une alternative.

L'explorateur peut être lancé sur un smartphone Android. Dans ce cas, le résultat ressemble fort à celui qu'on peut obtenir avec BlueDot sous python3. BlueDot n'est pas disponible sous MicroPython.


2. Communication WiFi sur réseau privé à construire (Point d'Accès - Hotspot)

Un réseau privé contient aussi un serveur et des clients. Mais ici, il faut configurer un appareil comme serveur appelé aussi "Point d'Accès" ou "Hotspot". Plusieurs situations sont présentées :

Le WiFi de la box internet n'est donc pas utilisé ici.

2.1. Un PC configuré comme serveur WiFi et un Raspberry Pi 4B comme client

2.1.1. Création du point d'accès

Le Point d'Accès est créé ici sur un ordinateur portable fonctionnant sous Ubuntu 24.04.5 LTS.

La création d'un Point d'Accès sans fil sous Linux est nettement facilité par la mise en œuvre de l'utilitaire linux-WiFi-hotspot.

Pour installer linux-WiFi-hotspot sur une machine Ubuntu, il faut ajouter l'archive de packages personnels lwh à l'aide de add-apt-repository :
sudo add-apt-repository ppa:lakinduakash/lwh
Maintenant, il faut mettre à jour les applications et installer linux-WiFi-hotspot avec :
sudo apt update
sudo apt install linux-WiFi-hotspot
Une fois le processus terminé, dans un terminal, on exécute
wihotspot
Une fenêtre apparaît, dans laquelle il faut définir un SSID (Nom du Point d'Accès), par exemple "Legion" et un mot de passe par exemple "blablabla".
Dans les paramètres avancés, on découvre le numéro de la passerelle associée (Gateway), par exemple 192.168.12.1, dont on aura besoin plus tard.
Il faut ensuite cliquer sur "Create hotspot" pour créer le point d'accès Legion, cette création n'étant valable que pour la session en cours.
En cas de besoin, dans une nouvelle cession, on exécute à nouveau
wihotspot
sachant que SSID et mot de passe ne doivent plus être redéfinis. Par contre "Create hotspot" est nécessaire.

En fonction de l'historique WiFi, une erreur peut intervenir suite à la commande
wihotspot

Error: Failed to run hostapd, maybe a program is interfering.
If an error like 'n80211: Could not configure driver mode' was thrown
try running the following before starting create_ap:
    nmcli r WiFi off
    rfkill unblock wlan
Command not found or exited with error status
Les commandes
nmcli r WiFi off
rfkill unblock wlan
rectifient effectivement la situation permettant
wihotspot
de s'effectuer maintenant sans erreur.

2.1.2. Mise en œuvre de python3 pour l'échange de données

Voici la procédure du programme PC_Serveur_wifi.py

Voici la procédure du programme RasPi4B_Client_wifi.py

2.2. Un Raspberry Pi 4B configuré comme serveur WiFi et un PC comme client

Le Raspberry Pi 4B fonctionne sous OS bookworm.

2.2.1. Création du point d'accès

Le Point d'Accès doit être créé ici sur un Raspberry Pi 4B fonctionnant sous OS bookworm.

La création d'un Point d'Accès sans fil sous Linux est nettement facilité en installant d'abord l'utilitaire Pi-Apps qui permet d'installer facilement des applications sur Raspberry Pi 4B :
wget -qO- https://raw.githubusercontent.com/Botspot/pi-apps/master/install | bash

On peut alors installer linux-WiFi-hotspot à partir du menu des applications :
Accessoires / Pi Apps / Tools / Linux Wifi Hotspot

Pour créer l'émetteur WiFi, il faut aller dans le Menu des applications / Outils système et lancer
Wifi Hotspot
Il faut nommer le réseau (SSID par exemple "Suisse") et donner un mot de passe (par exemple "blablabla"). Il faut ensuite cliquer sur Create hotspot.
Le réseau est alors visible sur d'autres appareils, par exemple le PC. Cette création n'est valable que pour la session en cours.
En cas de besoin, dans une nouvelle cession, on retourne dans le Menu des applications / Outils système et on relance
Wifi Hotspot
sachant que SSID et mot de passe ne doivent plus être redéfinis. Par contre "Create hotspot" est nécessaire.

ATTENTION :
Un gros problème : en quittant le hotspot, la situation antérieure (client WiFi pour se relier à la box, par exemple) n'est pas rétablie.
Dans un terminal, la commande
nmcli device status
montre que le WiFi est non-géré !
En fait la configuration du NetWorkManager a dû être modifiée par la création hotspot ! On peut éditer la configuration du NetWorkManager par :
sudo nano /etc/NetworkManager/NetWorkManager.conf
Sous [ifupdown], il faut modifier "managed=false" par "managed=true" et
sous [keyfile], il faut modifier "unmanaged..." par "managed..."
La commande
nmcli device status
montre que maintenant le WiFi est géré.

2.2.2. Mise en œuvre de python3 pour l'échange de données

Voici la procédure du programme RasPi4B_Serveur_wifi.py

Voici la procédure du programme PC_Client_wifi.py

2.3. Un Raspberry Pi Pico2W comme Point d'Accès (serveur WiFi)

On peut utiliser le Pico2W pour créer un réseau sans fil personnel auquel d'autres appareils peuvent se connecter.
C'est le mode AP (AP = Access Point).
Voici quelques exemples d'utilisation du mode AP sur le Pico2W :

La carte microcontrôleur Pico2W n'intègre pas de périphérique permettant l'affichage ou l'échange d'informations. Pac contre, son module WiFi engage son utilisateur à le définir comme Point d'Accès (AP) et à le configurer comme serveur web. Ainsi n'importe quel autre appareil du genre PC ou Smartphone disposant d'un navigateur peut se connecter à ce HotSpot WiFi permettant ainsi tout échange d'information, y compris graphique, prévue par le langage HTML.

Les exemples de cette section illustrent ces possibilités.

2.3.1. Configuration du Pico2W comme Point d'Accès WiFi

Le programme Pico2W_AP.py valable en microPython comprend les étapes suivantes :

2.3.2. Serveur web simple - Affichage d'informations

Tous les exemples ici possèdent contiennent 2 parties.

La PARTIE 1 est la même pour tous : La carte Pico2W est configurée comme Point d’Accès WiFi d'adresse 192.168.4.1

Éléments sur la PARTIE 2 du programme Pico2W_AP_bienvenue.py :

Quelques remarques pour s'y connecter comme client :

2.3.3. Commande simple

Éléments sur la PARTIE 2 du programme Pico2W_AP_web_control_LED.py :

2.3.4. Commande du mouvement d'un véhicule

Éléments sur la PARTIE 2 du programme Pico2W_AP_web_control_mouv.py :

2.3.5. Capteur "boussole"

Un module boussole électronique QMC5883L, capteur de champ magnétique à trois axes, est connecté à la carte Pico2W en I2C (pin 0 pour sda et pin 1 pour scl sans oublier l'alimentation 5V et la masse).
L'idée est de déterminer le cap magnétique d'après les mesures et de le transmettre par WiFi à un client, par exemple un PC, pour une utilisation ultérieure.

Le programme MicroPython Pico_I2C_boussole.py a permis de réceptionner le module boussole électronique QMC5883L sans transmission des valeurs mesurées ou de leurs dérivés. Il utilise obligatoirement un éditeur du genre Thonny pour récupérer les résultats. Il n'est donc pas compatible avec une mise en oeuvre indépendante du Pico. Voir Mise en œuvre du module QMC5883L, capteur de champ magnétique à trois axes - Boussole.

Ici, le transfert du programme sur Pico2W et son adaptation permet la transmission des données par WiFi de deux façons :

2.3.6. Boussole et bras manipulateur

La même carte Pico2W recueille les données de la boussole mais doit aussi servir à télécommander un bras manipulateur en InfraRouge (Voir le programme MicroPython Pico_IR_Bras.py présenté dans la section Bras manipulateur avec télécommande IR).

De nouveau la transmission des données par WiFi des informations "boussole" s'effectue de deux façons :

2.3.7. Boussole et bras manipulateur sur 2 coeurs

La carte Pico2W intègre un microcontrôleur RP2350 avec 2 coeurs (core0 et core1) mais sans programmation spécifique, le travail ne se répartit pas sur les 2 coeurs.
Pour accélérer l'exécution, on peut cependant répartir le travail sur les 2 coeurs : bras sur core0 et boussole sur core1.
Cependant la technique impliquant la méthode _thread est assez délicate et a nécessité des étapes préalables pour sa mise au point.

Un petit programme de clignotement de la LED interne au Pico2W (script_led.py) a été utilisé comme programme complémentaire pour être exécuté conjointement avec le programme de boussole. Le Pico2w est toujours le serveur et le client est un navigateur (Firefox), sur URL 192.168.4.1.

Deux possibilités ont été considérées :

Finalement, en tenant compte de toutes ces "découvertes", le programme core2.py a pu être développé. Le programme de bras manipulateur ainsi que la création du point d'accès WiFi s'exécutent sur le coeur principal core0 et le programme de boussole s'exécute sur core1 où plutôt son script importable script_boussole.py.

La technique 2 coeurs permet aussi d'avoir des variables communes aux deux programmes s'exécutant sur les 2 coeurs. Ces variables doivent être déclarées globales. Ceci peut être intéressant pour des développements futurs. Par contre, il faut régler le problème d'accès simultanés. La création d'un verrou et son utilisation permettent de régler ce problème : voir Pico2W_MemPartage.py.

2.4. Connexion d'un client à l'URL définie par le Pico2W configuré comme Point d'Accès (serveur WiFi)

Les procédures sont parfois très délicates à mettre au point et diffèrent d'après le dispositif support du client.

2.4.1. Le dispositif client est un ordinateur portable sous Ubuntu 24.04 LTS - L'interface est Firefox

Du côté "serveur", le programme tournant sur le Pico2W est Pico2W_AP_bienvenue.py.
Du côté "client" comme l'interface utilisateur est firefox, il n'y a pas besoin de programme python3.

Procédure :

  1. Il faut d'abord s'assurer qu'aucun autre dispositif ne veuille se brancher sur le WiFi du Pico2W configuré comme point d'accès.
  2. Arrêter le WiFi du client
  3. S'assurer que Firefox n'est pas lancé
  4. Lancer le programme sur le Pico2W
  5. Lancer le WiFi du client et s'assurer qu'il se connecte bien au WiFi du Pico2W
  6. Mettre en route le Firefox et ouvrir un nouvel onglet
  7. Saisir l'adresse "http://192.128.4.1" (En fait l'URL définie par le Pico2W)

Les informations voulues doivent maintenant s'afficher à l'écran.

Pour interrompe le programme, il suffit de débrancher le Pico2W.

Si la procédure ne marche plus, il faut penser à redémarrer l'ordinateur

Cette procédure est à essayer avec tout dispositif client, mais cela ne marche pas toujours, comme montré ci-après

2.4.2. Le dispositif client est un smartphone de type Samsung Galaxy A23 sous Android 14 - L'interface est Firefox

Si du côté "serveur", le programme du Pico2W Pico2W_AP_bienvenue.py est lancé par l'éditeur Thonny tournant sur PC, le smartphone android utilisé ici, un Samsung Galaxy A23, réagit correctement selon la procédure ci-dessus. Par contre, si le programme est lancé directement au branchement d'une batterie sur le Pico2W, le smartphone bug. Si on remplace le smartphone Samsung Galaxy A23 par un smartphone Huawei P10 Lite ou un PC, pas de problème.

Certains rapports montrent que si le Pico2W ne répond pas assez vite ou avec le bon format HTTP à la demande initiale du navigateur Android, la session échoue ou bug, alors qu'elle est tolérée sur PC.
La solution est d'ajouter un délai [par exemple time.sleep(10)] au début du script après la mise sous tension peut laisser au Wi-Fi et au serveur le temps de s'initialiser correctement avant de commencer à servir les pages web.

Certains programmes testés avec le smartphone ont été adaptés en ce sens, mais suivant les circonstances, le délai introduit peut être diminué ou augmenté. Ici, ce délai n'a pas été optimisé.

2.4.3. Le dispositif client est un ordinateur portable sous Ubuntu 24.04 LTS - L'interface est un programme python3

Si l'objectif est simplement de voir les informations, l'interface Firefox est certainement la plus confortable, puisqu'elle ne nécessite pas de développer de programme python du côté "client".
Mais souvent, ces données doivent être transmises pour servir dans des algorithmes, par exemple de pilotage. Là, Firefox n'est pas adapté.

Du côté "serveur", le programme MicroPython Pico2W_I2C_boussole0.py et
du côté "client", le programme Python3 client_Pico2W_I2C_boussole0.py
ont déjà été présenté plus haut lorsque le client est un ordinateur portable. Nous n'y revenons pas.

Tout fonctionne, que le Pico2W soit lancé par Thonny ou par une batterie extérieure

Cependant, la boussole ne fonctionne bien qu'à l'extérieur, en particulier sa calibration. De ce fait, lancer le Pico2W à l'aide d'une batterie et recevoir les données sur un smartphone paraît être optimal du moins pour la calibration.

2.4.4. Le dispositif client est un smartphone de type Samsung Galaxy A23 sous Android 14 - L'interface est un programme python3

Il faut d'abord introduire la mise en oeuvre de python3 sur le smartphone, ici un Samsung Galaxy A23.

Il existe plusieurs applications, particulièrement destinés à l'enseignement et qui comprennent aussi un éditeur Python. Par contre, ici, les programmes ont déjà été développé par ailleurs et n'ont besoin que d'être transférés sur le smartphone. C'est pourquoi, on utilise ici l’application Termux qui est un émulateur de terminal Linux. On se retrouve ainsi dans une situation symétrique à celle utilisée sur PC ou Raspberry Pi 4B.

Voici les étapes initiales
  1. Ouvrir Termux et mettre à jour les paquets avec la commande :
    pkg update && pkg upgrade
  2. Installer Python avec :
    pkg install python
  3. Permettre l'accès au stockage interne :
    termux-setup-storage
  4. Ouvrir le répertoire du stockage interne :
    Remarque : Termux ne permet pas un accès facile à la carte SD *.
    cd storage/shared/
    *
    - Avec une application comme "Gestionnaire de fichiers", sélectionner un répertoire sur la carte SD, par exemple "Documents"
    - Regarder les propriétés qui donnent le chemin d'accès par exemple /storage/9C33-3BBD/Documents
    - Il suffit alors dans Termux de se positionner sur ce répertoire par
    cd /storage/9C33-6BBD/Documents
  5. Créer sur le stockage interne du smartphone un répertoire dédié par exemple "Python"
    mkdir Python
  6. Exporter un programme python3 vers ce répertoire, par exemple client_Pico2W_I2C_boussole0.py en reliant par exemple le PC au smartphone par USB.
Exécution des programmes
  1. Pico2W
    1. Le programme Pico2W_I2C_boussole0.py est chargé préalablement dans la mémoire du Pico2W sous le nom main.py à l'aide de "Thonny".
    2. Le programme est lancé en reliant le Pico2W à une alimentation, comme une batterie externe.

  2. Smartphone / Termux
    1. Ouvrir le répertoire adhoc :
      cd storage/shared/Python
    2. Exécuter le programme client_Pico2W_I2C_boussole0.py:
      python3 client_Pico2W_I2C_boussole0.py

3. Communication Bluetooth

Le Bluetooth est une technologie de communication sans fil à courte portée qui permet à différents appareils électroniques de se connecter et d’échanger des données sans utiliser de câbles.

Le Bluetooth fonctionne sur la bande de fréquence des micro-ondes (2,4 GHz) et utilise des transmissions radio pour connecter des appareils sur de courtes distances, généralement jusqu’à une quinzaine de mètres. Il est utilisé pour connecter des périphériques comme des écouteurs, des claviers, des souris, des haut-parleurs, ainsi que des objets connectés tels que des montres intelligentes ou des capteurs.

Les principaux avantages du Bluetooth sont sa simplicité d’utilisation, son économie d’énergie (surtout avec la version Bluetooth Low Energy), la sécurité des données grâce au chiffrement, et sa polyvalence avec de nombreux types d’appareils. Il existe différentes versions, chaque nouvelle version apportant des améliorations en vitesse de transfert, portée, sécurité et efficacité énergétique.

3.1. Généralités sur le Bluetooth pour comprendre les programmes utilisés

3.2. Commande à distance des broches GPIO du Raspberry Pi 4B par Smartphone via Bluetooth

3.2.1. Liens

3.2.2. Principe

L'idée est de commander à distance par smartphone un circuit utilisant les broches GPIO du Raspberry Pi.
La communication entre Smartphone et Raspberry Pi s'effectue par Bluetooth. On utilise ici aussi le logiciel python3.

Il faut d'abord installer 2 modules de python3 :

3.2.3. Connexion Bluetooth entre Smartphone et Raspberry Pi

La connexion Bluetooth entre Smartphone et Raspberry Pi se fait de façon traditionnelle. Par contre, il faut installer l'application "Blue Dot" sur le Smartphone pour assurer la communication Bluetooth avec le programme python. Après installation, il est possible d'ouvrir "Blue Dot" pour s'assurer que le Raspberry Pi est bien présent dans la liste des clients mais la connexion ne sera possible que lorsque le programme python aura été lancé sur le Raspberry Pi.

3.2.4. Expérimentation

L'expérimentation est ici très simple. Une LED est reliée à la broche GPIO18 par l'intermédiaire d'une résistance 220Ω.
A l'exécution, le programme python3
Bluetooth.py, très simple aussi, signale que le serveur a démarré mais qu'il attend la connexion.
Il faut alors démarrer l'application "Blue Dot" sur le Smartphone et le connecter au Raspberry Pi. Un gros point bleu apparaît alors sur le Smartphone.
En mettant le doigt dessus, la LED s'allume et lorsqu'on retire le doigt, la LED s'éteint.

Un application plus étendue est développée ici et .

3.3. Application du Bluetooth au Pico2W

https://picockpit.com/raspberry-pi/fr/tout-sur-le-bluetooth-sur-le-raspberry-pi-pico-w/

Le Pico2W fonctionne à la fois avec Bluetooth Classic et Bluetooth Low Energy. Bluetooth Classic et Bluetooth Low Energy (BLE) sont deux façons différentes pour les appareils de communiquer dans le cadre de la spécification Bluetooth.

Bluetooth Classic, également connu sous le nom de Bluetooth Basic Rate/Enhanced Data Rate (BR/EDR), est la version originale de Bluetooth. Elle a été conçue pour la transmission de données à haut débit, le streaming audio et le couplage d'appareils. Bluetooth Classic est couramment utilisé pour des applications telles que les haut-parleurs audio sans fil, les claviers, les souris et le transfert de fichiers entre appareils.

Bluetooth Low Energy (BLE), également connu sous le nom de Bluetooth Smart, est une variante économe en énergie de Bluetooth. BLE a été introduit dans le cadre de la spécification Bluetooth 4.0 et est optimisé pour les appareils à faible consommation d'énergie qui nécessitent une longue durée de vie de la batterie, tels que les trackers de fitness, les smartwatches, les appareils de domotique et les capteurs sans fil.

Le BLE présente les topologies de communication suivantes :

Note : Le Pico2W peut fonctionner à la fois comme un dispositif central et comme un dispositif périphérique.

3.3.1. Raspberry Pi Pico2W utilisant le Bluetooth pour communiquer avec une application Android

La procédure générale est la suivante

  1. Création d'une instance BLE et activation de la puce Bluetooth à partir de la classe bluetooth de MicroPython.
  2. Diffusion (advertising) : Rendre l’appareil visible pour qu’un autre périphérique puisse le détecter et s’y connecter (typiquement, un smartphone ou un ordinateur).
  3. Appairage et communication : Échanger des données entre le microcontrôleur et un autre périphérique via un modèle client-serveur (le microcontrôleur est souvent le serveur BLE qui annonce ses services/capteurs).
  4. Gestion des services et caractéristiques : Créer des services et des caractéristiques BLE pour transmettre des informations comme des états ou des mesures de capteurs.
  5. Notifications et callbacks : Envoyer des notifications (push) à un client connecté ou réagir à des événements reçus via des fonctions de rappel (callbacks).
  6. Ensuite, il est possible d’annoncer le périphérique et d’enregistrer des services/caractéristiques spécifiques, gérer les événements de connexion/déconnexion, et d’envoyer/recevoir des données.

https://electrocredible.com/raspberry-pi-pico-w-bluetooth-ble-micropython/

On envisage ici de lire le status d'un bouton poussoir et d'envoyer des commandes pour contrôler la led du Pico2W en utilisant l'application Android Serial Bluetooth Terminal).

Deux outils généraux MicroPython doivent être inclus dans un répertoire lib du Pico2W. Il s'agit des fichiers

Le programme Pico2W_Ble_LED.py lance l'application :