MENU |
Les cartes microcontrôleur utilisées sont de type Raspberry Pi Pico. Elles permettent de contrôler en toute indépendance leurs ports GPIO et les composants auquels ces ports sont connectés.
Pour leur programmation, toutes les cartes sont munies d'un port USB (USBC ou micro-USB) qui permet de les relier par câble à un ordinateur hôte.
Il faut faire attention au choix du câble :
ne pas choisir un câble de charge uniquement et veiller à ce qu'il soit d'un seul tenant (sans adaptateur supplémentaire).
Attention aussi à bien choisir le port USB sur l'hôte car c'est le protocole USB 1.1 qui permet l'échange entre la carte microcontrôleur et l'hôte.
Un port USBC sur l'hôte ne permet pas l'échange.
Introduction
La Raspberry Pi Pico est une carte microcontrôleur basée sur la puce de microcontrôleur Raspberry Pi RP2040.
Il a été conçu pour être une carte de microcontrôleur à faible coût et à haute performance avec des interfaces numériques flexibles.
Le Raspberry Pi Pico dispose de deux Cortex-M0 ARM + cœurs fonctionnant jusqu'à 133MHz, 256 Ko de RAM, 30 broches GPIO et
une large gamme d'options d'interfaçage.
Ceci est associé à 2 Mo de mémoire flash QSPI embarquée pour le stockage de code et de données.
En plus de ressources matérielles puissantes, Pico dispose d'un support logiciel riche et complet et de ressources communautaires.
Il est programmable notamment avec MicroPython SDK.
Spécification
Par facilité pour le développement expérimental, une version avec broches de couleur a été choisie.
La carte est munie d'une prise micro-usb.
CARACTÉRISTIQUES
Cette carte est inspirée du Raspberry Pi Pico, construite autour du microcontrôleur double cœur Raspberry Pi RP2350A. Elle intègre le même processeur Arm Cortex-M33 double cœur et un processeur Hazard 3 RISC-V double cœur, avec des fréquences d'horloge allant jusqu'à 150 MHz. La carte intègre 520Ko de SRAM et 16Mo (option de la carte ici) de mémoire Flash intégrée, ce qui vous offre de nombreuses ressources pour divers projets. Cette carte permet d'améliorer ou d'ajouter des fonctionnalités supplémentaires.
Pour l'alimentation, un connecteur USB Type-C est disponible. L'une des fonctionnalités supplémentaires absentes du Pico 2 est un connecteur de recharge/décharge de batterie au lithium, très utile pour un projet mobile ! La puce MP28164 DC-DC est un convertisseur abaisseur-élévateur haute efficacité à faible courant de repos, capable de fournir un courant de charge maximal de 2 A. La carte est compatible avec la plupart des modules complémentaires Raspberry Pi Pico.
Avec ses 26 broches GPIO multifonctions, cette carte offre une grande flexibilité pour diverses configurations. Elle prend en charge plusieurs interfaces, dont 2 SPI, 2 I2C, 2 UART, 4 canaux ADC 12 bits et 16 canaux PWM contrôlables. Elle est compatible avec C/C++ et MicroPython. Elle dispose d'un SDK complet, de ressources de développement et de tutoriels pour vous aider à démarrer !
PROPRIÉTÉS
COMPOSANTS
![]() |
Le bouton de démarrage (5) a le même usage que le bouton BOOTSEL des cartes de type "Pico". |
L'installation des logiciels est semblable pour toutes les cartes microcontrôleur utilisées. On présente ci-après l'installation de MicroPython sur la carte Pico2W
La première étape est d'installer MicroPython sur la carte Pico2W via le câble USB.
La dernière version du micrologiciel MicroPython (exemple : mp_firmware_unofficial_latest.uf2 ) spécifique de Pico2W doit être téléchargée, par exemple à partir de l’URL https://www.raspberrypi.com/documentation/microcontrollers/micropython.html#drag-and-drop-micropython.
La carte Pico2W dispose d'un mode BOOTSEL pour la programmation du micrologiciel MicroPython via le port USB.
Le micrologiciel MicroPython est équipé d'un port série USB virtuel auquel on accède via le connecteur micro-USB sur le Pico2W.
L’ordinateur auquel est connecté le Pico2W devrait remarquer ce port série et le répertorier comme périphérique de caractères,
sous le nom /dev/ttyACM0 suite au lancement dans un terminal de l’instruction
ls /dev/tty*
Toujours à partir du terminal, on peut installer minicom, si ce n’est déjà fait :
sudo apt install minicom
et on peut l’ouvrir par l’instruction
minicom -o -D /dev/ttyACM0
Le prompt >>> doit apparaître.
MicroPython attend qu’on saisisse une instruction à interpréter.
La LED intégrée sur le Pico2W est connectée à la broche GP25 mais on peut utiliser la chaîne « LED ».
On peut l’allumer et l'éteindre.
On peut ainsi saisir successivement au prompt minicom :
>>> from machine import Pin
>>> led = Pin("LED", Pin.OUT)
Le module machine est utilisé pour contrôler le matériel sur la carte. Il s'agit d'un standard sur tous les ports MicroPython. Ici, on l’utilise pour prendre le contrôle d'un GPIO, afin de pouvoir le piloter en mode HAUT et BAS.
Si on saisit ceci :
>>> led.value(1)
La LED doit s'allumer.
On peut l'éteindre à nouveau avec
>>> led.value(0)
Porter MicroPython vers les appareils comme la carte Pico2W élaborée autour d'un microcontrôleur de la série RP fonctionne avec les environnements de développement couramment utilisés comme THONNY.
Cela ajoutera une icône THONNY au menu du bureau de l’ordinateur hôte.
Lorsqu’on ouvre THONNY pour la première fois, il faut s’assurer que le Pico2W
est branché sur le bon interpréteur.
Par défaut, l'interpréteur est la copie que Python exécute sur l’ordinateur hôte.
Il doit donc être modifié pour exécuter les programmes en MicroPython sur le Pico2W.
Pour ce faire, il faut cliquer sur l’onglet « exécuter » - « Configurer l’interpréteur … » puis « Interpréteur » et dans le menu déroulant
THONNY peut changer suivant l’ordinateur hôte qui peut être par exemple un Raspberry Pi 5, et la procédure peut être légèrement différence suivant la dénomination des onglets.
Dans le cas le plus simple, la fenêtre de Thonny est découpée en 2 parties : la partie inférieure pour l’interprétation ligne par ligne comme avec minicom, la partie supérieure permet d’écrire des programmes.
on peut exécuter directement le programme en cliquant sur la flèche blanche dans un cercle vert.
La led clignote à la fréquence définie dans le programme.
On peut arrêter le programme en cliquant sur le carré blanc dans un cercle rouge.
Il est possible d’enregistrer le programme dans la mémoire flash du Pico2W pour exécution immédiate ou ultérieure.
Si on l’enregistre dans la mémoire flash du Pico2W sous le nom main.py,
le programme sera exécuté dès la mise sous tension du Pico2W.
MicrPython se fonde ici sur 2 librairies
Cette référence fournit aussi en exemple un programme (ble_LED.py) pour maitriser la led de la carte pico 2 W, c'est-à-dire qu'à partir d'un smartphone, on peut allumer et éteindre la led de la carte pico 2 W.
Lorsque le programme tourne sur pico2W,
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 :
Le programme BOX_connect_reseau.py donne les différentes étapes.
La LED utilisateur intégrée au Pico2W permet de concrétiser ces différentes étapes.
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).
Le programme BOX_connect_HelloWorld.py est le premier exemple bien simple.
Les programmes
BOX_connect_LED.py et
BOX_web_control_test.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.
Voici les étapes de la configuration du Pico2W comme serveur web indépendant du réseau local, donc pour agir comme un point d'accès.
La première partie est montrée dans le programme AP_connect_reseau.py mais toutes
les parties sont rassemblées dans le programme AP_connect_HelloWorld.py
Cet exemple simple permet essentiellement aux clients de se connecter au Pico2W.
Lorsqu'un client s'y connecte, il reçoit une simple page HTML en guise de réponse.
Le code commence par importer les modules requis : réseau, heure et socket.
Il existe une fonction définie appelée web_page(), qui renvoie une chaîne HTML. C'est ce que le serveur Web créé affichera une fois que le serveur sera visité à partir d'un périphérique externe. Il peut être personnalisé.
Une série de commandes MicroPython est responsable de l'activation du mode point d'accès (AP) sur un périphérique et de la création du serveur Web sur le Pico2W.
Un objet point d'accès (ap) est créé à l'aide de
ap = network.WLAN(network.AP_IF)Associés à cet objet, 2 paramètres importants sont à choisir : ssid (le nom de la connexion Internet) et password (mot de passe pour la connexion Internet - Au moins 8 caractères) :
ap.config(essid='pico2w',password='Bizarre_1234')Pour l’afficher sur d’autres appareils, le point d’accès doit être activé par
ap.active(True)Le code entre dans une boucle while et attend que le point d’accès devienne actif. Cette boucle ne s'exécute généralement jamais car le mode AP s'active rapidement.
Une fois le point d’accès actif, il affiche un message indiquant que le mode AP est actif et fournit l'adresse IP à laquelle se connecter. Mais il faut plus d’informations pour la suite.
print(ap.ifconfig())permet d’btenir les paramètres de l'interface réseau au niveau IP : adresse IP, masque de sous-réseau, passerelle et serveur DNS.
Ici, on obtient : (‘192.168.4.1’,’255.255.255.0’,’192.168.4.1’,’0.0.0.0’)Le reste du code est un code client-serveur très simple.
Le composant de base de la plupart des connexions Internet est le socket, mot anglais qui signifie prise. Dans le contexte des logiciels, on peut le traduire par connecteur réseau ou interface de connexion. Ces sockets fournissent un flux fiable d'octets entre les périphériques réseau connectés.
La communication par socket est souvent comparée aux communications humaines. On distingue ainsi deux modes de communication :Un objet socket s est créé à l'aide de
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)AF_INET est une famille d'adresses qui est utilisée pour désigner le type d'adresses avec lesquelles le socket peut communiquer (dans ce cas, les adresses Internet Protocol v4). Lorsqu'on crée un socket, il faut spécifier sa famille d'adresses, et on ne peut ensuite utiliser que des adresses de ce type avec le socket. Le noyau Linux, par exemple, prend en charge 29 autres familles d'adresses telles que les sockets UNIX (AF_UNIX) et IPX (AF_IPX), ainsi que les communications avec IRDA et Bluetooth (AF_IRDA et AF_BLUETOOTH, mais il est peu probable qu'on les utilise à un niveau aussi bas).
Dans la plupart des cas, s'en tenir à AF_INET pour la programmation de sockets sur un réseau est l'option la plus sûre. Il existe également AF_INET6 pour les adresses Internet Protocol v6.
SOCK_STREAM signifie qu’il s’agit d’un socket de type TCP.
Le socket est lié au port général 80 avec
s.bind(('', 80))Un port est comme un numéro de téléphone.
Le socket commence à écouter les connexions entrantes avec
s.listen(5)Jusqu'à 5 appareils peuvent être connectés en mode AP.
Le code entre dans une autre boucle while pour gérer en continu les connexions entrantes. Cela fonctionnera indéfiniment jusqu'à ce que le code soit arrêté ou le Pico W débranché.
conn, addr = s.accept()Accepte une connexion. Le socket doit être lié à une adresse et écouter les connexions. La valeur de retour est une paire (conn, address) où "conn" est un nouvel objet socket utilisable pour envoyer et recevoir des données sur la connexion, et "address" est l'adresse liée au socket à l'autre extrémité de la connexion.
Lorsqu'une connexion est reçue, elle imprime l'adresse du client.
La demande reçue du client est stockée dans la variable de demande à l'aide de
request = conn.recv(1024)socket.recv(bufsize[, flags]) reçoit des données depuis le socket. La valeur de retour est un objet bytes représentant les données reçues. La quantité maximale de données à recevoir en une fois est spécifiée par bufsize. Un objet bytes vide renvoyé indique que le client s'est déconnecté. Consultez la page de manuel Unix recv(2) pour connaître la signification des arguments optionnels flags ; la valeur par défaut est zéro.
response = web_page()La fonction web_page() est appelée pour générer une réponse HTML, qui est stockée dans la variable de response.
La réponse est envoyée au client à l'aide de
conn.send(response)D’autres réponses sont générées et envoyées au client. Elles sont simplement affichées à la suite l’une de l’autre sur l’écran du client. Les sauts de ligne ne sont pas encore maîtrisés.
La connexion est fermée avec
conn.close()À titre d'exemple, prenons le programme MicoPython AP_connect_HelloWorld.py
Soit le programme AP_connect_bienvenue.py
Dans ce programme, la page web est un peu plus développée et les envois ( conn.send(response) ) sont divers :
Soit les programmes AP_connect_LED.py et AP_web_control_test.py semblables aux programmes ci-dessus.
Dans ce dernier programme, la page web utilise des formulaires liés à des actions.
Ces actions sont définies par des fonctions MicroPython.
La mise en ligne est identique à celle de l'exemple simple.
Sur la page web, apparaissent des carrés avec des actions prédéfinies qui sont déclenchées en cliquant dessus.