GPIO de l’Orange PI PC2 H5
L’Orange PI PC2 H5 est une des nombreuses carte Orange Pi offrant des caractéristiques intéressantes:
- processeur ARM H5 4 coeurs 64 bits
- ethernet 1GB
- 3 USB 2
- HDMI
- Jack Audio
- Interface Caméra
- Microphone
- Infra Rouge
- OS: ARMBIAN . Voir l’article ici pour l’installation
- prix <20€ chez Aliexpress
Pour accéder au GPIO d’un Orange PI, on peut utiliser une des bibliothèque comme OPI.Gpio. Malheureusement elle ne couvre pas tous les modèles de carte Orange PI. Dans le cas de l’Orange PI PC2 H5, elle ne fonctionne pas. Une solution alternative est le système de fichiers vituels Sysfs qui permet par des commandes système d’activer les pins du GPIO.
Connecteur carte Orange Py PC2 H5
La carte PC2 H5 dispose d’un connecteur 40 pins suivant le schéma ci dessous.
Pour attaquer une des pins en entrée ou en sortie, il faut trouver la référence du GPIO correspondant. Le tableau ci après est valable pour l’Orange Pi PC2 H5. Ainsi si on veut utiliser la pin physique 40, elle correspond au GPIO 199.
GPIO | Function | Pin | Pin | Function | GPIO |
3.3V | 1 | 2 | 5V | ||
12 | PA12 (TWI0_SDA/DI_RX/PA_EINT12) | 3 | 4 | 5V | |
11 | PA11 (TWI0_SCK/DI_TX/PA_EINT11) | 5 | 6 | GND | |
6 | PA6 (SIM_PWREN/PWM1/PA_EINT6) | 7 | 8 | PC5 (NAND_RE/SDC2_CLK) | 69 |
GND | 9 | 10 | PC6 (NAND_RB0/SDC2_CMD) | 70 | |
1 | PA1 (UART2_RX/JTAG_CK0/PA_EINT1) | 11 | 12 | PD14 (RGMII_NULL/MII_TXERR/RMII_NULL) | 110 |
0 | PA0 (UART2_TX/JTAG_MS0/PA_EINT0) | 13 | 14 | GND | |
3 | PA3 (UART2_CTS/JTAG_DI0/PA_EINT3) | 15 | 16 | PC4 (NAND_CE0) | 68 |
3.3V | 17 | 18 | PC7 (NAND_RB1) | 71 | |
15 | PA15 (SPI1_MOSI/UART3_RTS/PA_EINT15) | 19 | 20 | GND | |
16 | PA16 (SPI1_MISO/UART3_CTS/PA_EINT16) | 21 | 22 | PA2 (UART2_RTS/JTAG_DO0/PA_EINT2) | 2 |
14 | PA14 (SPI1_CLK/UART3_RX/PA_EINT14) | 23 | 24 | PA13 (SPI1_CS/UART3_TX/PA_EINT13) | 13 |
GND | 25 | 26 | PA21 (PCM0_DIN/SIM_VPPPP/PA_EINT21) | 21 | |
19 | PA19 (PCM0_CLK/TWI1_SDA/PA_EINT19) | 27 | 28 | PA18 (PCM0_SYNC/TWI1_SCK/PA_EINT18) | 18 |
7 | PA7 (SIM_CLK/PA_EINT7) | 29 | 30 | GND | |
8 | PA8 (SIM_DATA/PA_EINT8) | 31 | 32 | PG8 (UART1_RTS/PG_EINT8) | 200 |
9 | PA9 (SIM_RST/PA_EINT9) | 33 | 34 | GND | |
10 | PA10 (SIM_DET/PA_EINT10) | 35 | 36 | PG9 (UART1_CTS/PG_EINT9) | 201 |
107 | PD11 (RGMII_NULL/MII_CRS/RMII_NULL) | 37 | 38 | PG6 (UART1_TX/PG_EINT6) | 198 |
GND | 39 | 40 | PG7 (UART1_RX/PG_EINT7) | 199 |
Exemple Oscillateur sur pin 40
Ci dessous un programme en python 3. Attention, contrainte importante. Il faut être en root pour accéder au GPIO.
#!/usr/bin/python3 Python 3 environment #-- coding: utf-8 -- import os # To execute system command from time import sleep # this lets us have a time delay numgpio=199 numgpio=str(numgpio) print ("numgpio:"+numgpio) os.system("echo "+numgpio+" > /sys/class/gpio/export") os.system("echo out > /sys/class/gpio/gpio"+numgpio+"/direction") try: print ("Square signal around 50Hz . Press CTRL+C to exit") while True: os.system("echo 0 > /sys/class/gpio/gpio"+numgpio+"/value") sleep(0.01) os.system("echo 1 > /sys/class/gpio/gpio"+numgpio+"/value") sleep(0.01) except KeyboardInterrupt: # set port/pin value to 0/LOW/False os.system("echo 0 > /sys/class/gpio/gpio"+numgpio+"/value") # Clean GPIO os.system("echo "+numgpio+" > /sys/class/gpio/unexport") print ("Bye from F1ATB.")
pour le lancer, si le programme se trouve sur votre bureau:
python3 /home/utilisateur/Desktop/Nom_du_programme.py
On peut rentrer les commandes à la main depuis une fenêtre de terminal.
La commande …export active le GPIO 199 qui correspond à la pin 40.
La commande direction, ici out pour être en sortie.
Les commandes value alternativement à 0 ou 1 pour faire un oscillateur.
Puis en cas de Ctrl-C, on termine proprement en libérant le GPIO 199.
Pour s’affranchir du problème du root, une solution peut être de lancer le programme à la mise en route de l’Orange PI qui dans ce cas est en root avant de passer en mode utilisateur. Il suffit de modifier le fichier /etc/rc.local
(sudo nano /etc/rc.local) . Mettre la commande de lancement avec le chemin en absolu (python . /home/……py) avant l’exit 0 du fichier rc.local.
Resumé des commandes Sysfs
Sur Armbian , vous voyez le matériel GPIO exposé dans le système de fichiers sous /sys class/ gpio.
$ ls /sys/class/gpio export gpio199 gpiochip0 gpiochip352 unexport
On ytrouve les gpio actuellement utilisés et les contrôleurs GPIO noté « gpiochip ».
Les étapes de base pour utiliser une broche GPIO (ici la 199 ou broche 40) à partir de l’interface sysfs sont les suivantes:
Activation Gpio199 :
$ echo 199> /sys/class/gpio/export
Broche en entrée:
$ echo in> /sys/class gpio/gpio199 direction
Broche en sortie:
$ echo out> /sys /class/gpio/gpio199/direction
Relecture du fichier pour vérifier l’état actuel:
$ cat /sys/class/gpio/gpio199/direction
Etat en sortie:
$ echo 0> /sys/class/gpio/gpio199/value
ou
$ echo 1> /sys/class/gpio/gpio199/value
Lecture valeur en entrée:
$ cat /sys/class/gpio/gpio199/value
Libération Gpio:
Si vous avez fini d’utiliser la broche GPIO, écrivez simplement le nom de la broche dans le fichier d’export.
$ echo 199> /sys/class/gpio/unexport
L’entrée pour gpio199 n’apparaîtra plus dans sysfs:
$ ls/sys/class/gpio
Accès avec Python
Les commandes « shell » peuvent être reprise dans une application codée en python.
Pour passer une commande comme l’activation d’une pin GPIO:
os.system(« echo 199> /sys/class/gpio/export »)
Pour lire un état d’une pin gpio, on utilisera la lecture de fichier:
fichier=open("/sys/class/gpio/gpio199/value","r")
r=fichier.read()
fichier.close()
Attention pour activer une pin en sortie attaquant un relais qui passe à « on » avec un zéro en entrée. Ce dernier sera collé quelque ms entre le passage de la pin en sortie « out » et sa mise à 1. Pour éviter ce désagrément passer au système les 2 commandes « out » et « 1 » en une seule instruction.
os.system("echo out > /sys/class/gpio/gpio199/direction ; echo 1 > /sys/class/gpio/gpio199/value")
Remarques
- On peut lire en entrée une broche configurée en sortie pour connaitre son état.
- On ne peut tirer vers le haut ou le bas (pullup, puldown) une entrée.
- Cette solution très générale est applicable sur tous les Orange Pi
Librairie alternative
En cherchant sur internet, j’ai trouvé une solution alternative issue de la biblothèque pyA20 adaptée au proceseur H5. Elle couvre en partie le besoin car toutes les broches ne sont pas accessibles. Il en manque une dizaine. Elle se trouve ici: https://github.com/herzig/orangepi_PC_gpio_pyH5
Pour voir les broches disponibles, faites tourner le programme suivant:
from pyA20.gpio import gpio from pyA20.gpio import port print( dir(port))
Commentaires récents