![]() |
Dernière révision : mars 2025 |
![]() |
![]() |
![]() |
![]() |
![]() | ![]() |
Sommaire Introduction L’électronique et l’informatique ont profondément modifié notre société. C’est certainement la révolution industrielle la plus rapide de l’histoire de l’humanité. Aujourd'hui, les systèmes embarqués sont omniprésents dans notre vie quotidienne et nous emmènent vers un monde de plus en plus connecté, avec ses avantages et ses inconvénients... L’auteur ne pourra en aucun cas être tenu responsable des dommages qui résulteraient de l’utilisation des informations publiées sur ce site, sous licence Creative Commons BY-NC-SA. Toute reproduction ou modification d'un document, même partielle, est autorisée à condition que son origine et le nom de l'auteur soient clairement indiqués (BY), qu'il soit utilisé à des fins non commerciales (NC), que son mode de diffusion soit identique au document initial (SA), et que cela ne porte pas atteinte à l’auteur. Ce document présente la carte Raspberry Pi Pico et sa programmation en langage Python, en espérant toujours être le plus clair et précis possible. Malgré tout le soin apporté à la rédaction, l'auteur vous remercie de bien vouloir le contacter si vous relevez la moindre erreur ou omission, et vous souhaite une agréable lecture. Raspberry Pi Pico La carte Raspberry Pi Pico (qu'on appellera juste Pico par la suite) est la première carte de la fondation Raspberry Pi basée sur un microcontrôleur. Elle vient s'ajouter aux nombreuses cartes déjà existantes (Arduino, ESP, etc...). Il ne faut pas la confondre avec la famille des nano-ordinateurs Raspberry Pi. Parmi ses points forts, on peut citer un prix très bas, un nombre important de GPIO1, et une fréquence pouvant atteindre 300 MHz ! Je vous conseille la version WH intégrant une puce wifi 802.11 b/g/n, le Bluetooth 5.2, et un connecteur soudé. Vous trouverez les différentes versions ici. La Pico 2, sortie en août 2024, est également disponible. Vous trouverez ses caractéristiques ici, et les différentes versions ici. Microcontrôleur : RP2040 (2 x ARM Cortex M0+ 32 bits @ 133 MHz) Mémoire vive (SRAM) : 264 kio2 Mémoire de stockage (flash) : 2 Mio, accès via QSPI (Queued Serial Peripheral Interface) La Pico possède des caractéristiques qui se situent entre l'ESP8266 et l'ESP32, c'est plutôt pas mal, même si la mémoire flash est un peu faible par rapport aux ESP, qui vont jusqu'à 16 Mio (la Pico 2 corrige le problème en passant à 4 Mio). On trouve également 16 canaux PWM (16 bits), 3 entrées analogiques (12 bits), 2 I2C, 2 SPI et 2 UART, comme indiqué ci-dessous : ![]() Vous pouvez alimenter la Pico en utilisant un câble USB Micro-B (dans ce cas, la broche VBUS passe à 5 V), ou la broche VSYS (1,8 à 5,5 V). Attention, la tension de fonctionnement d'une Pico est de 3,3 V, comme l'Arduino Due et les ESP ! Tout dépassement de cette valeur sur l'une des broches le détruira. Il faudra donc prévoir éventuellement des convertisseurs 3,3 V <> 5 V. MicroPython Micropython est l'implémentation (l'adaptation) du langage Python aux microcontrôleurs. Après avoir téléchargé la dernière version (pour un Pico W) ici, vous devez appuyer sur le bouton BOOTSEL et connecter votre Pico à un port USB, sans lâcher le bouton (vous pouvez lâcher une fois la Pico branchée). Le volume RPI-RP2 apparaît sur votre bureau, ouvrez-le et copiez-y le fichier uf2 téléchargé précédemment. Si tout se passe bien, le volume disparait après quelques secondes. Vous pouvez désormais exécuter des programmes Python ! Logiciel Thonny Thonny est un Environnement de Développement Intégré adapté au langage Python. Vous trouverez la dernière version ici. Ouvrez le menu Outils, Options..., Interpréteur, choisissez MicroPython (Raspberry Pi Pico), et le port USB sur lequel est connectée votre Pico. Vous devriez avoir un affichage qui ressemble à : ![]() L'exemple suivant gère la LED de la Pico via un serveur web : # serveur web MicroPython sur Raspberry Pi Pico W import machine,network,time,socket ip = "192.168.1.22" masque = "255.255.255.0" passerelle = "192.168.1.1" dns = "192.168.1.1" nom_wifi = "mon_ssid" # saisissez le nom de votre réseau wifi mdp_wifi = "mon_mdp" # saisissez le mot de passe de votre réseau wifi led = machine.Pin("LED",machine.Pin.OUT) led.value(0) def page_web(): if led.value() == 1: etat_led = "on" else: etat_led = "off" code_html = """<!DOCTYPE HTML> <HTML> <HEAD> <TITLE>Serveur web MicroPython sur Raspberry Pi Pico W</TITLE> </HEAD> <BODY> <FONT FACE="carlito"> <CENTER><BR> <B>Serveur web MicroPython sur Raspberry Pi Pico W</B><BR><BR> LED : """ + etat_led + """<BR><BR> <A HREF="/?on"><BUTTON>On</BUTTON></A><BR><BR> <A HREF="/?off"><BUTTON>Off</BUTTON></A><BR><BR> <A HREF="/?stop"><BUTTON>Stop</BUTTON></A> </CENTER> </FONT> </BODY> </HTML>""" return code_html station = network.WLAN(network.STA_IF) station.active(True) station.ifconfig((ip,masque,passerelle,dns)) station.connect(nom_wifi,mdp_wifi) print("Connexion au réseau wifi",end="") while not station.isconnected(): print(".",end="") time.sleep(0.1) print("\nConnecté " + str(station.ifconfig()) + " !") socket_serveur = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # IPv4, TCP socket_serveur.bind((ip,80)) # on écoute sur le port 80 socket_serveur.listen(5) # 5 connexions (clients) max. while True: socket_client,adresse_client = socket_serveur.accept() # on créé un socket client pour dialoguer avec le socket serveur print("Connexion depuis " + str(adresse_client)) requete_client = str(socket_client.recv(1024)) # on reçoit la requête du client #print(requete_client) if requete_client.find("on") == 8: # b'GET /?on led.value(1) if requete_client.find("off") == 8: # b'GET /?off led.value(0) if requete_client.find("stop") == 8: # b'GET /?stop socket_client.close() socket_serveur.close() station.disconnect() station.active(False) machine.reset() socket_client.sendall("HTTP/1.1 200 OK\n") # on envoie la réponse au client socket_client.sendall("Content-Type: text/html; charset=utf-8\n") socket_client.sendall("Content-Language: fr-FR\n\n"); # ligne vide obligatoire à la fin de l'en-tête HTTP socket_client.sendall(page_web()) socket_client.close() Si vous voulez utiliser le DHCP de votre box, vous pouvez supprimer la ligne station.ifconfig. Sinon, n'oubliez pas de modifier les valeurs ip, masque, passerelle, et dns, en fonction de votre réseau. Ouvrez le menu Fichier, Enregistrer sous..., et choisissez Raspberry Pi Pico. Ouvrez un navigateur web et saisissez l'adresse IP choisie, vous devriez obtenir l'affichage suivant : ![]() Le bouton Stop arrête le programme, grâce à la fonction reset(). Documentation complémentaire 1 : General Purpose Input/Output (Entrée/Sortie à usage général). 2 : 1 ki (kilo informatique) = 1024 et non pas 1000, donc 1 kio = 1024 octets et 16 kio = 16384 octets. |
Haut de page |
![]() |
![]() |
![]() |