wiring PI
Introduction à WiringPi (pour Raspberry Pi)
WiringPi est une bibliothèque Cpp pour Raspberry Pi. Avec cette bibliothèque, vous pouvez utiliser de nombreuses fonctionnalités fournies par l'en-tête GPIO : broches numériques, SPI, I2C, UART, etc.
Bien qu'il existe de nombreuses bibliothèques Python pour les GPIO Raspberry Pi, Cpp est assez en retard. Heureusement, il existe WiringPi.
Dans cet article, vous allez installer WiringPi, apprendre à l'utiliser et voir de nombreux points pratiques qui vous seront utiles lorsque vous travaillerez avec cette bibliothèque sur vos propres projets.
Après cet aperçu et guide de démarrage, vous trouverez de nombreux autres tutoriels WiringPi :
- Lire les données d'un capteur avec I2C (ADXL345)
- Communiquez entre un Raspberry Pi (maître) et un Arduino (esclave) via I2C
- Communiquer entre un Raspberry Pi (maître) et un Arduino (esclave) via SPI
- Utiliser et compiler WiringPi avec ROS
!! Remarque : le câblagePi n'est plus pris en charge par son auteur initial, cependant il existe un fork sur GitHub où la communauté open source continue de fournir des mises à jour de support. WiringPi devrait toujours fonctionner correctement pour vous (avec Raspberry Pi 3-4).
Table des matières
- Installer WiringPi
- WiringPi sur Raspberry Pi OS
- Installer WiringPi sur Linux (général)
- Mise à niveau pour Raspberry Pi 4B
- Après l'installation
- Vérifiez toutes les broches du Raspberry Pi avec WiringPi
- Un exemple de code simple avec WiringPi
- L'outil de ligne de commande WiringPi gpio
- Aller plus loin avec WiringPi et Raspberry Pi
Installer WiringPi
Cette étape dépendra du système d'exploitation que vous avez installé sur votre Raspberry Pi.

Vous apprenez à utiliser Raspberry Pi pour construire vos propres projets ?
Découvrez Raspberry Pi pour les débutants et apprenez étape par étape.

WiringPi sur Raspberry Pi OS
Si vous utilisez le système d'exploitation Raspberry Pi, WiringPi devrait déjà être installé !
Vous pouvez découvrir facilement :
$ gpio -v
version gpio : 2.46
Copyright ( c ) 2012 - 2018 Gordon Henderson
Ceci est un logiciel gratuit avec ABSOLUMENT AUCUNE GARANTIE.
Pour plus de détails, tapez : gpio -warranty
Détails sur le Raspberry Pi :
Type : Pi 3+ , Révision : 03 , Mémoire : 1024 Mo, Fabricant : Sony
* L' arborescence des périphériques est activée.
*-- > Raspberry Pi 3 Modèle B Plus Rev 1.3
* Ce Raspberry Pi prend en charge l'accès GPIO au niveau utilisateur.
Si vous avez une carte Raspberry Pi 4, la section "Détails Raspberry Pi" sera un peu différente, mais les fonctionnalités de WiringPi restent les mêmes.
Installer WiringPi sur Linux (général)
Raspbian est le système d'exploitation officiellement pris en charge pour Raspberry Pi, mais il existe de nombreux autres systèmes d'exploitation Linux adaptés pour le Pi, par exemple Ubuntu Mate .
Si vous avez un système d'exploitation autre que Raspbian, vous devrez installer WiringPi à partir de la source, en suivant les étapes suivantes.
$ sudo apt-get purger le câblagepi
$ hachage -r
$ git clone --branch final_official_2. 50 https://github.com/WiringPi/WiringPi.git ~/ wiringpi
$ cd ~/câblagePi
$ ./construire
L'exécution de ces lignes de commande obtiendra le code source de git, récupérera la dernière mise à jour et créera WiringPi.
Une fois que vous avez exécuté toutes les étapes, vérifiez si WiringPi est correctement installé avec
gpio -v
.
Mise à niveau pour Raspberry Pi 4B
Si vous utilisez Raspberry Pi 4B, les éléments suivants
gpio readall
la commande peut ne pas fonctionner pour vous. Vous devez mettre à niveau la bibliothèque de la version 2.50 à 2.52.
Pour ce faire, exécutez simplement les commandes suivantes.
$ cd /tmp
$ wget https://project-downloads.drogon.net/wiringpi-latest.deb
$ sudo dpkg -i câblagepi-latest.deb
Après l'installation
Assurez-vous que WiringPi est correctement installé en exécutant
gpio -v
.
Maintenant, pour utiliser WiringPi dans votre code Cpp, vous devez savoir 2 choses :
- Dans vos programmes Cpp, ajoutez l'en-tête <wiringPi.h>.
- Lors de la compilation, ajoutez
-lwiringPi
aux paramètres g++ afin qu'il trouve et lie votre programme à la bibliothèque WiringPi.
Vérifiez toutes les broches du Raspberry Pi avec WiringPi
WiringPi n'est pas seulement une bibliothèque Cpp. Il contient des utilitaires de ligne de commande utiles pour vous aider à voir l'état de vos GPIO et effectuer un débogage.
Avant de plonger dans le code, vérifions quelles broches vous pouvez utiliser.
Présentation complète des broches avec gpio readall
Avec
gpio readall
, vous pouvez obtenir un aperçu complet de toutes les broches disponibles sur votre carte Pi. Nous verrons également plus loin dans cet article comment utiliser les autres fonctions du WiringPi
gpio
outil de ligne de commande.
Selon le Pi que vous avez (4, 3B+, 3B, …) vous obtiendrez quelque chose comme ceci :

Et pour comparer, voici le brochage Raspberry Pi (pour plus d'infos, voici un guide complet sur le brochage Raspberry Pi 4, 3B, 3B+) :

La table que vous voyez avec
gpio readall
est assez complet, il vous donne beaucoup d'informations utiles. Le tableau est séparé en 2 parties, qui sont en miroir, exactement comme l'aperçu du brochage du Raspberry Pi sur la deuxième image.
gpio readall : que signifie chaque colonne ?
Voici quelques explications pour chaque colonne de ce tableau :
- Physique : il correspond juste aux broches physiques de l'en-tête GPIO, vous pouvez donc localiser les broches sur votre carte.
- V : la « valeur » actuelle de la broche, en gros, cette colonne indique si la broche donnée est à l'état BAS ou HAUT.
- Mode : Une broche doit être définie dans un certain « mode » pour effectuer des opérations. Les modes les plus courants pour les broches numériques sont INPUT (vous pouvez lire la valeur à partir de la broche) et OUTPUT (vous pouvez écrire une valeur sur la broche). On peut également remarquer le mode ALT0, qui est ici utilisé pour le protocole I2C (SDA, SCL) et le protocole SPI (MOSI, MISO, SCLK).
- Nom : Si vous regardez la deuxième image avec le brochage du Raspberry Pi, vous pouvez voir que la colonne "Nom" affiche simplement la fonction standard de chaque broche, et le cas échéant, remplace cette fonction standard par la fonction alternative. Notez que les numéros GPIO correspondent à la colonne « wPi » et non à la colonne « BCM ».
- wPi : les numéros de broches réellement utilisés par la bibliothèque WiringPi. Cette convention de numérotation a été établie il y a assez longtemps lorsque la bibliothèque WiringPi a été écrite pour la première fois. Cela garantit que les numéros de broche restent les mêmes pour toutes les révisions de la carte. Mais à moins d'utiliser une très vieille carte (< Raspberry Pi 2), il n'y a plus vraiment d'intérêt à utiliser cette convention.
- BCM : La carte Raspberry Pi possède un BCM2835 (Broadcom SOC Channel). Il définit les numéros de broche et les fonctions alternatives pour l'en-tête GPIO. Cette convention de numérotation est désormais la plus utilisée au sein de la communauté Raspberry Pi.
Pour récapituler, ce tableau peut vous aider à obtenir un aperçu rapide de toutes les broches, du nombre à utiliser pour chaque broche et du mode/état actuel pour une broche donnée.
En règle générale, préférez utiliser la convention de numérotation BCM à la convention WiringPi. Ce sera plus facile pour vous d'être synchronisé avec d'autres développeurs, et si vous passez à une autre bibliothèque (par exemple RPi.GPIO avec Python), vous pourrez utiliser les mêmes numéros de broche.
Un exemple de code simple avec WiringPi
Dans cet exemple, nous allons gérer une LED et un bouton poussoir à l'aide de l'en-tête GPIO du Raspberry Pi.
Le but du programme est d'utiliser WiringPi pour lire les données du bouton poussoir (entrée numérique) et allumer la LED (sortie numérique) lorsque le bouton est enfoncé.
Nous utiliserons les fonctions de base de la bibliothèque WiringPi, et si vous êtes familier avec Arduino, vous verrez que ces fonctions sont presque les mêmes !
Les numéros de broche à l'intérieur du code WiringPi suivent la numérotation des broches BCM, utilisez donc la colonne "BCM" du tableau précédent afin de trouver le bon numéro à utiliser.
Configuration materielle

La LED est connectée à la broche 17 du BCM, qui est également la broche 0 de WiringPi, et la broche physique numéro 11.
Le bouton-poussoir est connecté à la broche 18 du BCM, qui est également la broche 1 de WiringPi et la broche physique numéro 12.
Gardons les choses simples et n'utilisons que la convention de numéro de broche BCM (GPIO 17 et GPIO 18) pour le reste de ce didacticiel.
Dans cette configuration matérielle, j'ai utilisé une résistance de 220 Ohm pour la LED et une résistance pull-down de 10 kOhm pour le bouton poussoir. Le Raspberry a déjà des résistances pull-up et pull-down, mais vous n'êtes jamais trop prudent. De plus, si vous avez l'habitude de travailler avec Arduino, la configuration reste la même, vous pouvez simplement remplacer votre Pi par votre Arduino et vous n'aurez rien à modifier.
Quelques éléments importants à prendre en compte lors de l'utilisation des GPIO Raspberry Pi :
- Assurez-vous de ne court-circuiter aucune des broches, cela peut endommager les broches et peut également endommager le microprocesseur lui-même.
- Le Raspberry Pi fonctionne à 3,3V. Assurez-vous que tous les capteurs et actionneurs que vous souhaitez utiliser prennent en charge 3,3 V. Parfois, vous devrez utiliser un convertisseur de niveau de tension. De plus, de nombreuses cartes Arduino (y compris Uno, Mega) fonctionnent à 5V, vous devez donc vraiment faire attention si vous ne voulez pas graver votre Raspberry Pi.
Programme WiringPi
#include <iostream>
#include <chrono>
#include <fil>
#include <câblagePi.h>
#define PIN_LED 17
#define PIN_BUTTON 18
int main ( int argc, char **argv )
{
câblagePiSetupGpio () ;
pinMode ( PIN_LED, SORTIE ) ;
pinMode ( PIN_BUTTON, INPUT ) ;
printf ( " Les broches des LED et des boutons ont été configurées.\n " ) ;
tandis que ( 1 )
{
if ( digitalRead ( PIN_BUTTON ) == HIGH ) {
digitalWrite ( PIN_LED, HAUT ) ;
}
sinon {
digitalWrite ( PIN_LED, LOW ) ;
}
std::this_thread:: sleep_for ( std::chrono:: milliseconds ( 10 )) ;
}
}
Compilons le code Cpp pour créer un exécutable – et n'oubliez pas de créer un lien vers la bibliothèque WiringPi !
$ g++ -o led_button led_button. cpp -lwiringPi
Voici le type d'erreur que vous obtiendrez si vous ne vous connectez pas à WiringPi :
$ g++ -o led_button led_button. cpp
/tmp/cccrNGcL. o : Dans la fonction 'main ' :
led_button.cpp:(.text+0x14): référence non définie à `wiringPiSetupGpio'
bouton_led. cpp : ( .text+ 0x20 ) : référence indéfinie à `pinMode '
led_button.cpp:(.text+0x2c): référence indéfinie à 'pinMode'
bouton_led. cpp : ( .text+ 0x3c ) : référence non définie à `digitalRead '
led_button.cpp:(.text+0x64): référence indéfinie à `digitalWrite'
bouton_led. cpp : ( .text+ 0x74 ) : référence indéfinie à `digitalWrite'
collect2 : erreur : ld a renvoyé 1 état de sortie
Exécutons maintenant le programme :
$ ./led_button
Les broches des LED et des boutons ont été configurées.
Si votre configuration matérielle a été correctement effectuée, lorsque vous appuyez sur le bouton, la LED s'allume et lorsque vous relâchez le bouton, la LED s'éteint.
Code expliqué pas à pas
Sachons décomposer le code ligne par ligne.
#include <iostream>
#include <chrono>
#include <fil>
#include <câblagePi.h>
La première chose à faire est d'inclure la bibliothèque WiringPi avec l'en-tête <wiringPi.h>.
#define PIN_LED 17
#define PIN_BUTTON 18
Utilisant
#définir
définir des numéros de broche est une bonne pratique, également souvent utilisée lors de l'écriture de programmes Arduino. Vous pouvez placer toutes vos broches en haut de votre programme, puis il devient très facile de modifier votre code si vous changez physiquement l'emplacement d'une broche.
Donc, ici, nous utilisons la broche BCM 17 pour la LED et la broche BCM 18 pour le bouton.
int main ( int argc, char **argv )
{
câblagePiSetupGpio () ;
Tous vos programmes utilisant WiringPi doivent appeler une fonction de configuration au début. Ici, comme nous utilisons des GPIO de base, vous pouvez simplement appeler la fonction wirePiSetupGPio(). Assurez-vous qu'il figure toujours en haut de votre programme et assurez-vous de ne l'appeler qu'une seule fois !
pinMode ( PIN_LED, SORTIE ) ;
pinMode ( PIN_BUTTON, INPUT ) ;
printf ( " Les broches des LED et des boutons ont été configurées.\n " ) ;
Si vous avez déjà programmé sur Arduino, vous devriez vous sentir très familier avec ces 2 lignes. Sinon, eh bien c'est assez simple : avant d'utiliser un pin, il faut configurer son mode. Nous définissons la broche LED comme broche de SORTIE, nous pourrons donc lui envoyer une valeur. Et nous définissons la broche du bouton en tant que broche INPUT, car nous voulons en lire une valeur.
La bibliothèque WiringPi contient des #defines utiles, telles que INPUT, OUTPUT, HIGH, LOW. Préférez toujours les utiliser dans votre code, au lieu de simplement 0 et 1.
tandis que ( 1 )
{
if ( digitalRead ( PIN_BUTTON ) == HIGH ) {
digitalWrite ( PIN_LED, HAUT ) ;
}
sinon {
digitalWrite ( PIN_LED, LOW ) ;
}
std::this_thread:: sleep_for ( std::chrono:: milliseconds ( 10 )) ;
}
}
Ce code est assez simple. Nous lisons la valeur du bouton avec la fonction digitalRead(). Cette valeur est soit HAUT, soit BAS (1 ou 0).
Lorsque le bouton est enfoncé (HIGH), on allume la LED avec la fonction digitalWrite(), en utilisant HIGH. Lorsque le bouton n'est pas enfoncé (LOW), nous éteignons la LED en utilisant digitalWrite(), mais cette fois avec LOW.
Enfin, nous mettons le programme en veille pendant 10 millisecondes entre chaque itération de la boucle, afin de ne pas utiliser trop de CPU.
L'outil de ligne de commande WiringPi gpio
le
gpio
L'outil en ligne de commande est assez utile pour tester rapidement vos GPIO, directement depuis le terminal, sans avoir à : 1. Ecrire un code Cpp, 2. le compiler, et 3. le lancer.
En fait, vous avez déjà vu 2 fonctions :
gpio -v
vous donne la version actuelle de WiringPi et quelques informations sur votre Pi, et
gpio readall
imprime un aperçu complet de toutes les broches de l'en-tête GPIO.
Voyons quelques autres fonctions de base ici. Conservez la configuration matérielle que vous avez faite avec l'exemple de code précédent, nous l'utiliserons pour vérifier que les commandes que nous écrivons fonctionnent correctement !
Pour toutes les fonctions, nous aurons besoin de donner le numéro de la broche que nous voulons utiliser. Comme vous l'avez vu précédemment dans cet article, il existe 3 numéros différents pour chaque broche : physique, câblagePi et BCM. Lors de l'écriture du code Cpp, la convention de numérotation est celle du BCM. Mais lors de l'utilisation
gpio
sur un terminal, la convention est celle de WiringPi, ce qui peut devenir assez déroutant.
Heureusement, vous ajoutez un indicateur pour utiliser la convention BCM :
gpio -g ...
. C'est ce que je vous recommande de faire afin de garder les choses simples.
mode gpio
Utiliser
mode gpio
pour changer le mode d'une broche. Remarque : c'est assez évident, mais les broches GND et d'alimentation (3,3 V, 5 V) ne peuvent pas être modifiées et utilisées pour autre chose que GND et l'alimentation.
Pour définir la broche LED (GPIO 17) comme broche de SORTIE, utilisez
gpio -g mode 17 sorties
. Si tu cours
gpio readall
encore une fois, vous verrez que le mode pin a maintenant changé.
Pour définir la broche du bouton (GPIO 18) comme INPUT, utilisez
gpio -g mode 18 dans
. Fondamentalement, cette broche devrait déjà être en mode INPUT lorsque vous démarrez le Pi, mais il est toujours préférable de configurer une broche avant de l'utiliser, car un autre programme peut l'avoir modifiée juste avant.
lecture gpio
Utiliser
lecture gpio
pour lire l'état d'une broche qui a été définie comme INPUT. Le résultat imprimé sera soit 0, soit 1 (LOW ou HIGH).
Ici, après avoir défini le mode de broche pour le bouton, exécutez simplement la commande.
$ gpio -g lire 18
0
Maintenant, appuyez sur le bouton et exécutez à nouveau la commande (tout en appuyant).
$ gpio -g lire 18
1
gpio écrire
Utiliser
gpio écrire
pour définir l'état d'une broche qui a été définie comme SORTIE. Pour le paramètre d'état, écrivez 0 pour LOW et 1 pour HIGH.
Après avoir défini le mode de broche pour la LED, allumez-la avec
gpio -g écrire 17 1
, et mettez-le sous tension avec
gpio -g écrire 17 0
.
Créé avec HelpNDoc Personal Edition: Faites de la Documentation un jeu d'enfant avec l'interface utilisateur propre et efficace de HelpNDoc