raspberrypi:linux:gpio

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
raspberrypi:linux:gpio [2019/07/07 08:07] – [Exemples de mise en oeuvre du GPIO] adminraspberrypi:linux:gpio [2021/08/12 08:25] (Version actuelle) phil
Ligne 1: Ligne 1:
 +[[raspberrypi:linux:raspilinux|{{ :iconemaison.jpg?nolink&25|Sommaire Raspberry Pi sous Linux}}]]
  
 +===== Raspberry Pi - Le port GPIO =====
 +
 +[Mise à jour le 7/7/2019]
 +
 +  * **Sources**
 +    * Python et le port GPIO : <html><a href="https://deusyss.developpez.com/tutoriels/RaspberryPi/PythonEtLeGpio/" target="_blank">Developper.com</a></html>
 +    * Un module pour contrôler les entrées, sorties du Raspberry pi : <html><a href="https://pypi.org/project/RPi.GPIO/" target="_blank">RPi.GPIO x.x.x</a></html>
 +    * Exemples et documentation : <html><a href="https://sourceforge.net/p/raspberry-gpio-python/wiki/Home/" target="_blank">raspberry-py-gpio-python</a></html>
 +
 +  * **Opérations nécessaires à la mise en oeuvre du port GPIO Python** \\ Pour mettre en oeuvre le port GPIO en Python : 
 +    - Mettre à jour le module RPi.GPIO (préinstaller dans Raspbian)
 +    - Dans le programme : 
 +      - Importer le module Rpi.GPIO
 +      - Identifier le mode de numérotation des broches utilisées
 +      - Configurer les broches (entrée, sortie)
 +      - Lire ou écrire les broches
 +
 +Ces opérations sont décrites ci-dessous.
 +
 +{{ :raspberrypi:linux:thonny.png?nolink&60|}}
 +  * **IDE utilisé**
 +    * Environnement de développpement intégré disponible avec Raspbian : <html><a href="https://korben.info/thonny-un-ide-python-pour-les-debutants.html">Thonny</a></html>
 +
 +----
 +
 +==== 1. Aspect matériel ====
 +
 +=== 1.1 Le connecteur GPIO du raspberry Pi 3 ===
 +Les broches GPIO((Les ports **GPIO** (anglais : **G**eneral **P**urpose **I**nput/**O**utput, littéralement Entrée-sortie à **usage général**) sont des ports d'entrées-sorties très utilisés dans le monde des microcontrôleurs, en particulier dans le domaine de l'électronique embarquée.<html><a href="https://fr.wikipedia.org/wiki/General_Purpose_Input/Output" target="_blank">Wikipédia</a></html> )) du Raspberry Pi 3 sont reliées à un connecteur **40 points**. **26 broches GPIO sont accessibles** (GPIO2 à GPIO27). Ce sont des entrées/sorties((Dans un système à base de processeur, de microprocesseur, de microcontrôleur ou d'automate, on appelle entrées-sorties les échanges d'informations entre le processeur et les périphériques qui lui sont associés. De la sorte, le système peut réagir à des modifications de son environnement, voire le contrôler. Elles sont parfois désignées par l'acronyme I/O, issu de l'anglais Input/Output ou encore E/S pour Entrées/Sorties. <html><a href="https://fr.wikipedia.org/wiki/Entr%C3%A9es-sorties" target="_blank">Wikipédia</a></html> )) logiques capables de fournir ou de recevoir des signaux sous la forme de tensions (0 ou 3,3V). Certaines broches permettent de constituer un bus (I2C, SPI, UART). 
 +
 +{{ :raspberrypi:linux:kit_composants_gpio_01.png?nolink&600 |}}
 +
 +====2. Aspect logiciel ====
 +===2.1 Mise à jour du module RPi.GPIO ===
 +Le module <html><a href="https://pypi.python.org/pypi/RPi.GPIO" target="_blank">RPi.GPIO</a></html> facilite l'accès aux GPIO en Python. Il est installé par défaut dans Raspbian. Pour effectuer une mise à jour, consulter ce <html><a href="https://sourceforge.net/p/raspberry-gpio-python/wiki/install/" target="_blank">lien</a></html>.
 +
 +<note>Ce module n'est pas prévu pour des applications temps réel.</note> 
 +
 +===2.2 Numérotation des broches dans le programme ===
 +{{ :raspberrypi:linux:brochep1rpy.png?nolink|}}
 +Dans RPi.GPIO, il existe deux façons de numéroter les broches d'entrée / sortie dans un programme Python.
 +  *  La première consiste à utiliser le système de **numérotation de la carte**. On fait référence aux numéros des broches du connecteur. Ainsi, quelle que soit la révision de la carte du RPi, il ne sera pas nécessaire de recâbler le connecteur ou de changer le code.
 +
 +<code python *.py>
 +GPIO.setmode(GPIO.BOARD)
 +</code>
 +
 +__Exemple 1__ : une LED est connectée à la broche 37 du connecteur
 +<code python *.py>
 +LED = 37
 +GPIO.setmode(GPIO.BOARD) # On précise que 37 est le numéro de la broche du connecteur
 +GPIO.setup(LED,GPIO.OUT) # Cette broche doit se comporter comme une sortie
 +</code>
 +
 +  * Le deuxième système de numérotation utilise les **numéros BCM**. On fait référence aux numéros de canaux sur le Broadcom SOC. Si on change le Soc, il sera peut être nécessaire de modifier la numérotation.
 +
 +<code python *.py>
 +GPIO.setmode(GPIO.BCM)
 +</code>
 +
 +__Exemple 2__ : une LED est connectée à la broche 37 du connecteur mais repéré par la fonctionnalité du SOC
 +
 +<code python *.py>
 +LED = 26
 +GPIO.setmode(GPIO.BCM) # On précise que 26 est le numéro de canal du SOC
 +GPIO.setup(LED,GPIO.OUT) # Cette broche doit se comporter comme une sortie
 +</code>
 +
 +===2.3 Exemples de mise en oeuvre du GPIO ===
 +  * **Affichage de la version de RPi.GPIO**
 +
 +<code python *.py>
 +#!/usr/bin/python3
 +import Rpi.GPIO as GPIO
 +print("vers : " + GPIO.VERSION)
 +print(GPIO.RPI_INFO)
 +</code>
 +
 +  * **Résultat attendu** : vers : x.x.x et des informations sur la carte utilisée
 +
 +  * **Configuration d'une broche du GPIO en sortie**
 +    * **Commande d'une led**
 +
 +<file python blink.py>
 +import RPi.GPIO as GPIO # module de gestion du GPIO
 +import time #module de gestion du temps
 +
 +# Identification de la broche utilisée
 +LED = 37 # Une LED est connectée sur la broche 37
 +GPIO.setmode(GPIO.BOARD)
 +# Autre solution
 +#LED = 26
 +#GPIO.setmode(GPIO.BCM)
 +
 +#Configuration de la broche en sortie
 +GPIO.setup(LED,GPIO.OUT)
 +
 +while True:
 +    GPIO.output(LED,GPIO.HIGH) # Activation de la LED
 +    time.sleep(1) # Attente 1s
 +    GPIO.output(LED,GPIO.LOW) # Désactivation de la LED
 +    time.sleep(1)
 +</file>
 +
 +  * **Résultat attendu** : la LED clignote
 +
 +  * **Configuration d'une broche du GPIO en entrée**
 +    * **Lecture de l'état d'un bouton-poussoir** \\ A faire
 +
 +=== Pour aller plus loin... ===
 +PWM, Interruptions, I2C, SPI : <html><a href="https://deusyss.developpez.com/tutoriels/RaspberryPi/PythonEtLeGpio/" target="_blank">Developper.com</a></html>