Contrôle des GPIOs avec Python

Matériel utilisé dans le cours

Tout se fait depuis la Raspberry Pi en SSH.

PS : Pour trouver votre IP, vous avez whatsmyip, démerdez-vous !

Pour les montages

On va utiliser des breadboard et des câbles Dupont, donc pas besoin de souder.

On travaillera en groupe de 5.

Hésitez pas à nous appeler si ça marche pas !

IMPORTANT !

Un montage, ça se fait raspberry pi débranchée !

Vous avez 5 minutes pour :

Faire un groupe

de 5

Trouver l'IP de

votre pi & installer Python 3.5

Venir chercher

les composants

Présentation des ports GPIO

Un port GPIO c'est quoi ?

Port GPIO = un port physique sous forme de contact métallique qui permet de transmettre un signal électrique.

Un port GPIO transmet un signal relativement binaire (pas de courant ou courant). Il travail en 3.3V et environ 20mA.

C'est un moyen simple de communiquer entre équipements physiques. Très utilisé par les micro-contrôleurs.

Les différents types de protocoles/ports.

Power + : Alimentation électrique continue

GND : Ground = Retour à la terre

I2C : Protocole série synchrone

SPI : Autre protocole série synchrone

UART : Protocole asynchrone + conversion communication série vers parallèle.

GPIO : Port général qui peut éventuellement être transformé en I2C ou SPI.

Utiliser Python pour contrôler les GPIO

La bibliothèque RPi.GPIO

Pour utiliser les ports GPIO de la Raspberry Pi avec Python on utilise la bibliothèque RPi.GPIO.

Vous allez donc devoir installer cette librairie à l'aide de la commande ci-dessous.

sudo pip3 install RPi.GPIO

Comment sont numérotés les broches GPIO

Sur la Pi il existe deux façon de numéroter les GPIO.

 

L'ordre logique, que tout le monde devrait utiliser (BOARD).

 

Et l'ordre tout pourri qu'on a introduit pour casser les co****es (BCM)...

BOARD

Pour "carte", correspond à l'ordre physique des pins métalliques, en partant coté carte SD de gauche à droite.

Pour "Broadcom SoC Channel" (même l'acronyme est pas bon), correspond à la numérotation selon le SoC.

Simple à comprendre, à tester, à visualiser.

Reste valable sur TOUS les modèles de Pi.

On utilisera QUE celui-ci.

BCM

Pas de logique, impossible à comprendre et visualiser.

Pas compatible selon les modèles.

Ne recoupe pas tous les numéros.

Le premier qui l'utilise il prend un 0.

Choisir le mode de numérotation

Au début d'un programme chargé d'utiliser les GPIOs, vous devrez donc préciser à RPi.GPIO le type de numérotation que vous souhaitez employer.

Pour cela, on utilisera la fonction setmode() de la lib GPIO.

GPIO.setmode(GPIO.BOARD)

Allumer une LED avec Python

Brancher une LED

Pour faire clignoter une LED en python il faut créer le circuit électronique permettant de la relier à la Raspberry Pi.

Il faut donc comprendre comment fonctionne l'électricité, les LED, et comment appliquer le tout à la Raspberry Pi.

Comment brancher une LED

Quand vous branchez une LED, vous devez TOUJOURS avoir une résistance.

Pourquoi ?  Parce-que les LED ont une tension de seuil. En gros, dès qu'il y a un peu de trop de courant, elles crâment !

Où brancher la résistance ?

N'importe où dans le circuit. Avant, après, c'est pareil, la résistance fait baisser l'intensité de TOUT le circuit.

Quelle résistance choisir ?

Ça se calcule ! Pour savoir quelle résistance choisir, il faut connaître la tension de seuil supportée par la LED et son intensité max ainsi que la tension fournie par l'alimentation.

La formule est alors la suivante :

Rmin = (Ualim - Uled) / Imax

Notre circuit

Sera composé de :

Une Raspberry Pi

Une LED

Une résistance

Quelle sera la taille de la résistance ?

La Pi fourni 3.3V en 20mA. La LED fonctionne aussi en 20mA et 1.5 à 1.9V.

La résistance devra au moins faire :

(3.3 - 1.5)/(20/1000) = 90 ohms -> 100 ohms.

On peut prendre plus, genre 300 ohms, comme ça on est large.

Quelle sera la forme de notre circuit ?

On branche l'anode avec un fil rouge à un GPIO (le pin 7), puis on relie la cathode à la résistance et la résistance à un Ground (le pin 6), avec un fil noir.

Pour tout ça, on passe par une breadboard.

(Schéma fait avec Fritzing.)

Notre code

Notre code va faire clignoter la LED.

Concrètement, cela signifie envoyer du courant sur le pin n°7, puis le couper, puis le rallumer, etc.

#!/usr/bin/env python3.5
#-*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)

LED = 7 

def turn_high (gpio) :
    GPIO.setup(gpio, GPIO.OUT)
    GPIO.output(gpio, GPIO.HIGH)

def turn_low (gpio) :
    GPIO.setup(gpio, GPIO.OUT)
    GPIO.output(gpio, GPIO.LOW)


while True :
    turn_high(LED)
    time.sleep(2)
    turn_low(LED)
    time.sleep(2)

On stock le numéro du pin sous un nom de variable propre

On définie une fonction qui va allumer une LED.

On définie l'état du pin GPIO comme en mode sortie.

On envoie le courant sur le pin.

On définie une fonction relativement équivalente qui va éteindre la LED.

On allume, on attend 2s, on éteind, on attend 2s, on recommence.

Lire une puce RFID avec Python

Le RFID c'est quoi ?

Le Radio Frequency IDentification est un moyen de récupérer des infos sans contact généralement pour identifier un objet/individu.

Le badge RFID contient une antenne et une puce, tandis que le lecteur contient le récepteur et fourni l'alimentation électrique.

L'échange de données et d'énergie se fait sans fil par radio.

Le matériel

Pour lire un badge RFID nous allons avoir besoin d'un lecteur RFID.

Nous allons utiliser une carte RC522. Elle ne coûte presque rien et est très utilisée, donc bon support logiciel.

Le branchement

la RC522 utilise le protocole SPI, nous allons donc devoir la brancher en partie sur des GPIO SPI.

Par ailleurs, la bibliothèque que nous allons utilisée nous force à utiliser certains GPIO plutôt que d'autres, etc.

Nous n'avons donc pas tellement le choix au niveau des branchements.

Activer SPI

Comme la carte RFID utilise le protocole SPI vous allez devoir l'activer sur la Raspberry Pi.

À vous de vous débrouiller avec raspi-config !

Vous avez littéralement une minute.

La bibliothèque

Contrairement au contrôle classique des GPIO, nous allons utiliser une bibliothèque spécifique pour la RC522.

Il s'agit de la bibliothèque pi-rc522. À vous de l'installer.

Vous avez littéralement une minute.

Le code source

Notre code va faire une boucle qui attendra qu'on scann un tag RFID et qui l'affichera.

#!/usr/bin/env python3.5
# -*- coding: utf-8 -*-
from pirc522 import RFID
import time


rc522 = RFID()

while True :
    rc522.wait_for_tag()
    (error, tag_type) = rc522.request()

    if not error :
        (error, uid) = rc522.anticoll()

        if not error :
            print('UID : {}'.format(uid))
            time.sleep(1)

On instancie la lib pour lire la carte RFID.

On fait une boucle infinie.

On attend qu'une puce RFID passe a proximité.

Une fois qu'une puce RFID déclenche, on récupère les infos.

Si on a pas d'erreur, on nettoie les possibles collisions (plusieurs tag RFID en même temps) et on récupère les infos du tag.

Si on a bien nettoyer, on affiche le tag RFID, on attend 1 seconde et on recommence.

Questions ?

Contrôle des GPIOs avec Python

By plebweb

Contrôle des GPIOs avec Python

  • 847