GPIO de l’Orange PI

Les cartes Orange Pi, similaire au fameux Raspberry Pi offrent des caractéristiques intéressantes, vue la diversité des modèles proposées.

Orange Pi PC2 H5
Orange Pi Zero

Pour accĂ©der au GPIO d’un Orange PI, on peut utiliser une des bibliothèques comme OPI.Gpio. Malheureusement elle ne couvre pas tous les modèles de carte Orange PI. 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.

GPIOFunctionPinPinFunctionGPIO
3.3V125V
12PA12 (TWI0_SDA/DI_RX/PA_EINT12)345V
11PA11 (TWI0_SCK/DI_TX/PA_EINT11)56GND
6PA6 (SIM_PWREN/PWM1/PA_EINT6)78PC5 (NAND_RE/SDC2_CLK)69
GND910PC6 (NAND_RB0/SDC2_CMD)70
1PA1 (UART2_RX/JTAG_CK0/PA_EINT1)1112PD14 (RGMII_NULL/MII_TXERR/RMII_NULL)110
0PA0 (UART2_TX/JTAG_MS0/PA_EINT0)1314GND
3PA3 (UART2_CTS/JTAG_DI0/PA_EINT3)1516PC4 (NAND_CE0)68
3.3V1718PC7 (NAND_RB1)71
15PA15 (SPI1_MOSI/UART3_RTS/PA_EINT15)1920GND
16PA16 (SPI1_MISO/UART3_CTS/PA_EINT16)2122PA2 (UART2_RTS/JTAG_DO0/PA_EINT2)2
14PA14 (SPI1_CLK/UART3_RX/PA_EINT14)2324PA13 (SPI1_CS/UART3_TX/PA_EINT13)13
GND2526PA21 (PCM0_DIN/SIM_VPPPP/PA_EINT21)21
19PA19 (PCM0_CLK/TWI1_SDA/PA_EINT19)2728PA18 (PCM0_SYNC/TWI1_SCK/PA_EINT18)18
7PA7 (SIM_CLK/PA_EINT7)2930GND
8PA8 (SIM_DATA/PA_EINT8)3132PG8 (UART1_RTS/PG_EINT8)200
9PA9 (SIM_RST/PA_EINT9)3334GND
10PA10 (SIM_DET/PA_EINT10)3536PG9 (UART1_CTS/PG_EINT9)201
107PD11 (RGMII_NULL/MII_CRS/RMII_NULL)3738PG6 (UART1_TX/PG_EINT6)198
GND3940PG7 (UART1_RX/PG_EINT7)199

Connecteur pour Orange Pi Zero H2

Orange Pi Zero
Orange Pi Zero Pins GPIO ref

Exemple Oscillateur

Pour une pin donnée, il y a 3 références :
– le numĂ©ro de la broche : 1,2,3…
– le nom fonctionnel : PA00,PA01…
– la rĂ©fĂ©rence GPIO : GPIO1, GPIO199….

Avec la mĂ©thode des fichiers vituels Sysfs , il faut connaitre le numĂ©ro de GPIO de la pin que l’on veut activer. Pour cela, chercher sur le web un schĂ©ma ou un tableau de correspondance.

Ci-dessous un programme d’oscillateur en python 3. Il active le GPIO199 qui correspond Ă  la pin 40 d’un Orange Pin PC2 H5 ou la pin 10 d’un Orange Pi Zero H2. 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( test.py) se trouve sur votre bureau:

python3 /home/utilisateur/Desktop/test.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. Passer en root (sudo su) et ouvrir le fichier des taches cron en tapant :

crontab -e

Mettre en bas du fichier une ligne:
@reboot python3 /home/xxx/test.py

/home/xxx correspond au dossier ou se trouve votre fichier test.py

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 ou 10) Ă  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

F1ATB André

Ham Radio - Home automation - Photovoltaic