Python, exemples accédant au port GPIO

Liens vers d'autres pages de ce site Web   En construction ... à venir, si j'ai le temps, l'énergie, ...

° Raspberry pi, un mini micro ordinateur
° Raspbian, le système d'exploitation par défaut du Raspberry pi
° RISC OS, un système d'exploitation non préemptif, rapide
° Ubuntu Mate, une alternative, pour rester proche de Ubuntu
° Python, exemples accédant au port GPIO
° Langage C, exemples accédant au port GPIO

Table des matières   Liens internes à cette page

° Des informations sur le port GPIO du Raspberry pi
° gpio01_allume_led.py   fait clignoter une LED
° gpio02_allume_3_led.py   fait clignoter 3 LEDs
°
° gpio06_lecture_phto_resistance_par_condensateur.py   Lecture d'une photo-résistance en utilisant un condensateur
°

Des informations sur le port GPIO du Raspberry pi   Top

°) Tutoriel Raspberry Pi 3 : 4 - Pilotage du GPIO avec Python




GPIOzero, une librairie en Python pour accéder aux ports GPIO, en anglais.
Par défaut elle est installée dans la distribution Rasbian.
RPi.GPIO, une autre librairie Python pour piloter le GPIO.
Cette librairie est de plus bas niveau, je l'ai préféré pour commencer, car on contrôle mieux ce que l'on fait.

Documentation sur la librairie RPi.GPIO.


gpio01_allume_led.py   fait clignoter une LED   TOP
# gpio01_allume_led.py
# Fait clignoter une led.
# Celle qui se trouve sur le port GPIO 13

#On import les modules nécessaires
from RPi import GPIO
import time

#On désactives les ‘warnings’ et on lui précise que l’on travaille avec les numéros des gpio et non le numéro des pins
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

#ON précise que le gpio 13 est en mode ‘sortie’, elle sert ici à envoyer du courant
GPIO.setup(13, GPIO.OUT)

#Le code même du programme, LOW correspond à ‘éteindre’ et HIGH à ‘allumer’
GPIO.output(13, GPIO.LOW)

print("Start")
nn=0
while (nn < 5):
    nn = nn + 1 
    GPIO.output(13, GPIO.HIGH)
    time.sleep(0.5)
    GPIO.output(13, GPIO.LOW)
    time.sleep(0.5)

print("Stop")
    
"""
c.f. https://ouiaremakers.com/posts/tutoriel-diy-gestion-des-gpio-du-raspberry-pi-avec-python3-x
Ce programme fonctionne avec Python 3.
1) Depuis un terminal, à installer :
i) évidemment, python 3, qui est probablement déjà installé.
sudo apt-get update
sudo apt-get install python3
ii) la librairie GPIO, qui permet d'accéder aux ports GPIO
sudo apt-get install RPi.GPIO

2) lancer Python 3 (IDLE) depuis le menu Raspbian
3) copier le programme ci-dessus.
4) brancher les pins correctements
5) exécuter le programme.

Normalement, la LED connectée à votre port GPIO devrait clignéter.

Ceci est une liste exhaustive, prenez le temps de la lire nous l’utiliserons dans l’étape 3 ;

Pour préciser que l’on travaille avec les numéros des gpio :
_GPIO.setmode(GPIO.BCM)

Pour préciser que l’on travaille avec les numéros des pins :
_GPIO.setmode(GPIO.BOARD)

Pour définir le mode ‘sortie’ du gpio :
_GPIO.setup(“numéro du gpio”, GPIO.OUT)
ou le mode ‘entrée’:
_GPIO.setup(“numéro du gpio”,GPIO.IN)

Pour l’état 0 :
_GPIO.output(“numéro du gpio”,GPIO.LOW)

Pour l’état 1 :
_GPIO.output(“numéro du gpio”,GPIO.HIGH)
"""

gpio01_allume_led.py blink
gpio01_allume_led.py
Le fil rouge est connecté au 3,3V de la carte Raspberry pi.
Surtout ne PAS connecter au 5,0 V, cela peut endommager le Raspberry pi, suivant les connexions à venir.
Dans cet exemple, cette connexion du fil (rouge) au 3,3 V n'est pas utilisé.
Le fil noir est connecté au GND (ground) de la carte Raspberry pi, qui représente le 0 V.
La résistance est de 220 Ohms. Code couleurs : rouge ; rouge ; brun.


gpio02_allume_3_led.py   fait clignoter 3 LEDs   TOP
# gpio02_allume_3_led.py
# Allume 3 leds alternativement,
# en effectuant un comptage binaire.

#On import les modules nécessaires
from RPi import GPIO
import time

#On désactives les ‘warnings’ et on lui précise que l’on travaille avec les numéros des gpio et non le numéro des pins
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

# pin utilisés
pinA = 26
pinB = 19
pinC = 13

#ON précise que le gpio  pinA  pinB  pinC  sont en mode ‘sortie’.
GPIO.setup(pinA, GPIO.OUT)
GPIO.setup(pinB, GPIO.OUT)
GPIO.setup(pinC, GPIO.OUT)

#Le code même du programme, LOW correspond à ‘éteindre’ et HIGH à ‘allumer’
GPIO.output(pinA, GPIO.LOW)
GPIO.output(pinB, GPIO.LOW)
GPIO.output(pinC, GPIO.LOW)
nA = 0
nB = 0
nC = 0

print("Start")
nn=0
while (nn < 10):
    time.sleep(0.5)
    nn = nn + 1
    nA = 1 - nA
    GPIO.output(pinA, nA)
    if (nA == 0):
        nB = 1 - nB
        GPIO.output(pinB, nB)
        if (nB == 0):
           nC = 1 - nC
           GPIO.output(pinC, nC)

GPIO.output(pinA, GPIO.LOW)
GPIO.output(pinB, GPIO.LOW)
GPIO.output(pinC, GPIO.LOW)
print("Stop")
    
"""
Ceci est une liste exhaustive, prenez le temps de la lire nous l’utiliserons dans l’étape 3 ;

Pour préciser que l’on travaille avec les numéros des gpio :
_GPIO.setmode(GPIO.BCM)

Pour préciser que l’on travaille avec les numéros des pins :
_GPIO.setmode(GPIO.BOARD)

Pour définir le mode ‘sortie’ du gpio :
_GPIO.setup(“numéro du gpio”, GPIO.OUT)
ou le mode ‘entrée’:
_GPIO.setup(“numéro du gpio”,GPIO.IN)

Pour l’état 0 :
_GPIO.output(“numéro du gpio”,GPIO.LOW)

Pour l’état 1 :
_GPIO.output(“numéro du gpio”,GPIO.HIGH)
"""

gpio02_allume_3_led.py blink
gpio02_allume_3_led.py
Montage similaire au précédent : gpio01_allume_led.py, avec deux LEDs de plus.


gpio03.py   ...   TOP


gpio06_input blink
gpio03.py
Le fil rouge est connecté au 3,3V de la carte Raspberry pi.
Surtout ne PAS connecter au 5,0 V, cela peut endommager le Raspberry pi, suivant les connexions à venir.
Dans cet exemple, cette connexion du fil (rouge) au 3,3 V est utilisé.
Le fil noir est connecté au GND (ground) de la carte Raspberry pi, qui représente le 0 V.
Il y a une résistance est de 220 Ohms. Code couleurs : rouge ; rouge ; brun.
Il y a une résistance est de 10'000 Ohms. Code couleurs : brun ; noir ; orange.


gpio06_lecture_phto_resistance_par_condensateur.py   Lecture d'une photo-résistance en utilisant un condensateur   TOP
# gpio06_lecture_phto_resistance_par_condensateur.py
# Test la résistance d'un port GPIO lorsqu'il est en INPUT
# Il semble qu'elle soit assez grande.  > 1 Méga-ohms
#
# Le condensateur est de 33 nF, la résistance infinie, RC = infini
# La mesure du temps de décharge est de 2,48 [s] à 3% près, donc énorme ! C'est bien !
#
# Le condensateur est de 33 nF, la résistance de 3,3 k-ohms, RC = 0,109 [ms]
# La mesure du temps de décharge est de 0,112 [ms] à 3% près
#
# Le condensateur est de 33 nF, la résistance de 10 k-ohms, RC = 0,33 [ms]
# La mesure du temps de décharge est de 0,336 [ms] à 3% près
#
# Le condensateur est de 33 nF, la résistance de 33 k-ohms, RC = 1,09 [ms]
# La mesure du temps de décharge est de 1,15 [ms] à 3% près
#
# Le condensateur est de 4,7 nF, la résistance infinie, RC = infini
# La mesure du temps de décharge est de 2,56 [s] à 3% près, donc énorme ! C'est bien !
#
# Le condensateur est de 4,7 nF, la résistance de 10 k-ohms, RC = 0,047 [ms]
# La mesure du temps de décharge est de 0,040 [ms] à 10% près
#
# Avec le condensateur de 4,7 nF et une photo résistance, les variations de temps
# de décharge du condensateur vont de 0,3 [ms] à 0,016 [ms]
# On peut donc nettement mesurer une valeur à 10% près de la photorésistance
# Le temps de mesure est inférieur à 0,3 [ms],
# si on ne tient pas compte du temps de charge du condensateur.
# Avec un temps de charge de 0.01 [ms], on peut mesurer plus de 100 états différents
# de la photorésistance.
# Donc, un temps de mesure entre 0.02 et 0.3 [ms] peut être assuré.
#
# 0,02 [ms] est une limite inférieur au temps de mesure,
# limitation due à la vitesse de Python.

#On import les modules nécessaires
from RPi import GPIO
import time

#On désactives les ‘warnings’ et on lui précise que l’on travaille avec les numéros des gpio et non le numéro des pins
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

#ON précise que le gpio 13 est en mode ‘sortie’, elle sert ici à envoyer du courant
# GPIO.setup(13, GPIO.OUT)
GPIO.setup(21, GPIO.IN) # PORT 21 en INPUT

print("Start")
kk=0
while (kk < 100):
    kk = kk + 1 
    GPIO.setup(21, GPIO.OUT)
    GPIO.output(21, GPIO.HIGH) # sortie à l'état +3,3V  Charge le condensateur
#    time.sleep(0.00001)  # le condensateur est très rapidement chargé.
    time.sleep(0.00001) 

    nn = 0
    GPIO.setup(21, GPIO.IN) # met le port en haute impédance
    timeStart = time.time() # Temps en seconds au départ
    while (GPIO.input(21) == 1) & (nn <400):  # nn assure un temps de mesure pas trop long.
        # Attente que le condensateur se décharge
        nn = nn + 1 

    timeNow = time.time() # Temps actuel, pour mesurer le temps de décharge du condensateur
    print("nn=", nn, "  d-time=", 1000*(timeNow-timeStart))

print("Stop")
    
"""
c.f. https://ouiaremakers.com/posts/tutoriel-diy-gestion-des-gpio-du-raspberry-pi-avec-python3-x
Ce programme fonctionne avec Python 3.
1) Depuis un terminal, à installer :
i) évidemment, python 3, qui est probablement déjà installé.
sudo apt-get update
sudo apt-get install python3
ii) la librairie GPIO, qui permet d'accéder aux ports GPIO
sudo apt-get install RPi.GPIO

2) lancer Python 3 (IDLE) depuis le menu Raspbian
3) copier le programme ci-dessus.
4) brancher les pins correctements
5) exécuter le programme.

Normalement, la LED connectée à votre port GPIO devrait clignéter.



Ceci est une liste exhaustive, prenez le temps de la lire nous l’utiliserons dans l’étape 3 ;

Pour préciser que l’on travaille avec les numéros des gpio :
_GPIO.setmode(GPIO.BCM)

Pour préciser que l’on travaille avec les numéros des pins :
_GPIO.setmode(GPIO.BOARD)

Pour définir le mode ‘sortie’ du gpio :
_GPIO.setup(“numéro du gpio”, GPIO.OUT)
ou le mode ‘entrée’:
_GPIO.setup(“numéro du gpio”,GPIO.IN)

Pour l’état 0 :
_GPIO.output(“numéro du gpio”,GPIO.LOW)

Pour l’état 1 :
_GPIO.output(“numéro du gpio”,GPIO.HIGH)
"""

gpio06_lecture_phto_resistance_par_condensateur.py blink
gpio06_lecture_phto_resistance_par_condensateur.py
Le fil noir est connecté au GND (ground) de la carte Raspberry pi, qui représente le 0 V.
Il y a une résistance est de 10'000 Ohms. Code couleurs : brun ; noir ; orange.


gpio08.py   ...   TOP





Plan du Site : Home   arrow   Raspberry pi   arrow   pythongpio.html ( = http://www.juggling.ch/gisin/raspberrypi/pythongpio.html )


Page mise à jour le 20 février 2018 par Bernard Gisin     ( Envoyer un e-mail )
Hébergement par : www.infomaniak.ch