AU MENU
L’objet est de programmer les broches GPIO des cartes Raspberry Pi 4B, RTk.GPIO et Raspberry Pi 5 comme interfaces avec des composants électroniques, tels que des LED et des moteurs. C’est de l’informatique physique.
Par cohérence avec le système d’exploitation de mon ordinateur portable, j'ai d'abord choisi UBUNTU
comme système d'exploitation pour le Raspberry Pi 4B.
Dans un second temps, des difficultés m'ont conduit à choisir Raspberry Pi OS,
le système d'exploitaion développé pour Raspberry Pi.
C'est également Raspberry Pi OS qui a été choisi pour expérimenter le
Raspberry Pi 5 lorsque celui-ci est arrivé.
En ce qui concerne le module matériel RTk.GPIO, il ne faut pas choisir de système d'exploitation
puisque c'est celui d'ordinateur auquel la carte est connectée par interface USB2.
L’informatique physique, la programmation des broches GPIO, se fonde ensuite sur la mise en œuvre de différents langages de plus ou moins hauts niveaux.
La version 12 du Raspberry Pi OS (bookworm), utilise par défaut Device Tree (Arborescence Matérielle) pour gérer certaines allocations des
ressources et les chargements de modules.
L’objectif de ce changement est de diminuer le problème d’accès concurrent aux ressources du système par plusieurs pilotes,
et de permettre la configuration automatique de modules spécifiques.
Des accès simples sont aussi possibles directement sous Linux ou sous forme de fichiers shell .
Il s'agit de surcouches logicielles dans l’arbre des commandes Linux. On les ajoute en cas de besoin. On peut les ajouter directement dans le fichier de configuration ( /boot/firmware/config.txt) et les surcouches ajoutées sont alors toujours disponibles dès le démarrage suivant. Cette pratique, bien que préconisée, présente plusieurs désavantages :
Comme on va le voir dans les sections suivantes, le chargement d'une surcouche matérielle conduit souvent à définir des variables dans des répertoires spécifiques Linux.
En cohérence avec ce qui a été développé pour Raspberry Pi 4 et 5, c'est le langage python3 qui a été choisi pour la prise en charge des composants et modules mis en oeuvre. On aurait pu utiliser Scratch ou mieux C++.
Beaucoup de logiciels sont préinstallés. Pour certaines expérimentations, il faudra cependant installer des bibliothèques complémentaires composées de "classes" python3.
Qu’importe le système d’exploitation, python3 est lancé depuis un terminal. Si on veut exécuter un programme, l'instruction est plus simple si on accède au terminal par le répertoire où se trouve le programme à exécuter.
Si le système d’exploitation est UBUNTU, il est indispensable de démarrer python3 en administrateur (root) :
Beaucoup d’exemples python3 de la littérature sont proposés à partir de RPi.GPIO. La traduction, le passage de RPi.GPIO à gpiozero est décrit ici: https://gpiozero.readthedocs.io/en/stable/migrating_from_rpigpio.html
En principe, on utilise l'une ou l'autre classe mais gpiozero est plus dans l'esprit "python". RPi.GPIO est cependant en général plus rapide à l'exécution.
La mise en œuvre du module matériel RTk.GPIO exige l'utilisation de la classe RTk.GPIO qui contient les méthodes de base de RPi.GPIO.
Voici, liste non exhaustive, le matériel mis en oeuvre en relation avec le connecteur GPIO 40 broches :
1 plaque d’essai (*) | Des fils cavalier mâle / femelle | Des fils cavalier femelle / femelle | Des fils cavalier mâle / mâle | Bouton tactile |
![]() |
![]() |
![]() |
![]() |
![]() |
(*) La platine d’expérimentation ou plaque d’essai est une plaque perforée qui permet un montage des composants électronique sans soudure. C’est une platine de prototypage. |
LEDs | Mesure de distance + Déclenchement à large tension 3-5.5V IO - Module ultrasonique HC-SR04 | Capteur de mouvement infrarouge passif | Résistance dépendante de la lumière | Moteur 5V |
![]() |
![]() |
![]() |
![]() |
![]() |
Résistances 330Ω | Résistance 470Ω | Condensateur 1μF | Buzzer | Contrôleur de moteur |
![]() |
![]() |
![]() |
![]() |
![]() |
Pack batterie | Potentiomètre | Microchip CAN MCP3008 | Capteur de température et d'humidité – Module KY-015 | Lames magnétiques – Démarreur – Module KY-021 |
![]() |
![]() |
![]() |
![]() |
![]() |
LED bicolore rouge et vert montée en cathode commune – Module KY-011 | Interrupteur optique – Module KY-010 | Commutateur de vibration – Module KY-002 | Photorésistance – Module KY-018 | Capteur RGB 4 broches, électronique intelligente, 3 couleurs - Module KY-016 |
![]() |
![]() |
![]() |
![]() |
![]() |
Capteur de Percussion – Module KY-031 3 broches | LED clignotante – Module KY-034 | Capteur de température – Module KY-001 avec puce DS18B20 | Commutateur pour LED par inclinateur à mercure – Module KY-027 | Émetteur laser – Module KY-008 |
![]() |
![]() |
![]() |
![]() |
![]() |
Commutateur d'inclinaison – Module KY-020 | LED bicolore 3MM cathode commune – Module KY-029 | Commutateur au mercure – Module KY-017 | Capteur magnétique à effet Hall – Module KY-003 | LED RGB SMD – 5050 PWM – Module KY-009 |
![]() |
![]() |
![]() |
![]() |
![]() |
Encodeur rotatif – Module KY-040 | Capteur de recherche de ligne – Module KY-033 | Capteur infrarouge 4 broches pour éviter les obstacles – Module KY-032 | Module bouton commutateur, 50mA AC 250V - Module KY-004 | Module optique de mesure de vitesse à fente infrarouge |
![]() |
![]() |
![]() |
![]() |
![]() |
Relais 5V 1 canal – Module KY-019 + relais SONGLE SRS-05VDC-SL | Capteur analogique MPU6050 (accéléromètre et gyroscope dans les 3 axes) – Module GY-521 | Module d'alimentation réglable, MP1584EN DC DC 3A, module de sortie 12, LM2596 24V | Module de lecteur de carte SD | Contrôleur de jeu, joystick PS2 – Module KY-023 |
![]() |
![]() |
![]() |
![]() |
![]() |
DS1302 Module d'horloge Temps Réel | Capteur de niveau d'eau(*) | Interrupteur magnétique pour tube sec, 4 broches – Module KY-025 | Module de mesure accélérométrique ADXL345 | Alimentation pour plaque de prototypage – Régulateur de tension 3.3V 5V– Module MB102 |
![]() |
![]() |
![]() |
![]() |
![]() |
(*) Non encore testé |
Puce 4N35 – Optocoupleur | Puce NE555P – Timer | Puce L293D – Commande moteur | Puce L293D – Commande moteur | Module CAN ADS1115 |
![]() |
![]() |
![]() |
![]() |
![]() |
Capteur de détection d'humidité du sol avec hygromètre LM393(*) | Capteur de température analogique – Module KY-013 | Détection de rythme cardiaque au doigt – Module KY-014 / KY-039 | Capteur magnétique à effet Hall analogique – Module KY-035 | Microphone sensible – Module KY-038 |
![]() |
![]() |
![]() |
![]() |
![]() |
Fond rose : avec une sortie analogique (nécessite un CAN en interface avec le GPIO) |
Capteur tactile en métal, corps humain – KY-036 | Capteur de flamme – Module KY-026 | Commutateur de Hall magnétique linéaire, comptage de vitesse – Module KY-024 | Microphone haute Sensibilité - Module KY-037 | Électroaimant solénoïde CC JF-0530B 6V |
![]() |
![]() |
![]() |
![]() |
![]() |
Module CAN CJMCU-1808 (Autour de la puce PCM1808 Stéréo ADC) | ||||
![]() |
![]() |
![]() |
![]() |
![]() |
Une liste plus complète des composants à disposition est donnée dans le lien https://docs.sunfounder.com/projects/superkit-v3-pi/en/latest/components_List.html ou le document Super_Kit_V3.0_for_Raspberry_Pi_4_Model_B.pdf.
Il est parfois possible de relier directement les composants ou modules électroniques expérimentés aux broches GPIO mais il est plus aisé d’utiliser une plaque d’essai reliée elle-même aux broches GPIO par
1. Montage de la plaque d’essai sur la plaque support : | 2. Montage du T et du câble 40 broches sur la plaque support : |
![]() |
![]() |
3. Placer le Raspberry Pi dans le support et le fixer avec des vis M2, 5x5. 4. Brancher la natte GPIO à 40 broches dans la tête à 40 broches du Raspberry Pi 4B |
|
![]() ![]() |
|
Faire attention à la direction lorsqu’on branche la natte GPIO à 40 broches dans la tête à 40 broches du Raspberry Pi. Le fil noir au bord du câble doit être proche de la fente pour carte micro SD. |
Attention :
Bien que la connexion de composants simples aux broches GPIO soit parfaitement sûre, il est important de faire attention à la façon dont les composants sont câblés.
Les LED doivent avoir des résistances pour limiter le courant qui les traverse.
Ne pas utiliser 5V pour les composants 3.3V.
Ne pas connecter les moteurs directement aux broches GPIO, plutôt utiliser un circuit en pont en H ou une carte contrôleur de moteur.
Si on suit les instructions, jouer avec les broches GPIO est sûr et amusant. Cependant, le branchement aléatoire de fils et de sources d'alimentation sur le Raspberry Pi 4B peut le détruire, surtout si on utilise les broches 5V. Il faut éviter de connecter au Raspberry Pi 4B des éléments qui consomment beaucoup d'énergie; les LED sont bien, les moteurs ne le sont pas.
Quelques notions d’électricité sont indispensables ainsi que la connaissance de quelques termes comme "cathode" et "anode"
La lettre k indique la cathode.
La lettre a indique l'anode.
On a : Vk ≤ Va |
![]() Symbole d'une diode à vide |
Pour quitter un programme en cours d'exécution, il faut cliquer sur Crtl + c.
Crtl + c est une interruption de l’exécution du corps du programme qui peut
déclencher une série d'instructions avant la sortie.
Pour cela, il faut précéder le corps du programme dans lequel l'interruption se produira, par le mot clé
try:
Les instructions finales suite à l'interruption commencent par l’instruction clé
except KeyboardInterrupt:
Pour faciliter la lecture du site, c’est la convention anglo-saxonne du point décimal qui est utilisée à la place de la virgule. Cette disposition assure aussi la cohérence avec la présentation des résultats assurée par les logiciels utilisés comme Python.
Pour faciliter la compréhension, la programmation est volontairement la plus simple possible, quitte à sacrifier l'élégance, les vérifications de cohérence et la prise en compte des possibilités d'interruption.
Les broches GPIO du Raspberry Pi sont des broches numériques, on ne peut donc régler les sorties que sur niveau HAUT ou BAS, ou lire les entrées comme étant à un niveau HAUT ou BAS. Cependant, en utilisant une puce CAN (Convertisseur Analogique-Numérique) ou en anglais DAC ( Analogue-to-Digital Converter ), on peut lire la valeur des périphériques d'entrées analogiques tels que les potentiomètres et les transformer en signal numérique.
Les valeurs analogiques numérisées sont communiquées au Raspberry Pi à l'aide du protocole SPI. Bien que cela fonctionne en principe dans gpiozero, on obtient de meilleurs résultats si on active la prise en charge complète de SPI.
sudo apt-get install python3-spidev python-spidev