Configuration du GPIO : Piloter les relais (Chap. 5)


ATTENTION : Si vous ne connaissez pas le Raspberry PI : Voir le chapitre 8 pour la présentation du GPIO et ainsi le choix des PORTs que vous allez utiliser pour piloter vos transceiver.

La configuration du GPIO étant un nécessaire préalable à l’utilisation de celui-ci et de SVXlink, j’ai indiqué ici comment déclarer les PORTs qui seront utilisés plutôt que de le mélanger avec la présentation du GPIO et son coté électronique.


5.1 Présentation du contexte GPIO :

Le Raspberry PI possède un connecteur GPIO permettant des interactions avec le monde extérieur. Un PORT GPIO peut être configuré tel :

  • Sortant : Pour commander quelque chose, un relais pour nous
  • Entrant : Pour lire un état, un capteur, pour nous l’état du Squelch

Il est nécessaire de réalisation une configuration d’initialisation avant de pouvoir utiliser ces PORTs. Pas de panique ! C’est simplissime !

Nous allons réaliser cette configuration dans le fichier :

/etc/rc.local

Ce fichier est exécuté automatiquement à la fin du BOOT (démarrage) du Raspberry. Ainsi, nous sommes certains que la configuration d’initialisation est réalisée.

Pour la suite, je postule que vous allez utiliser 2 PORTs (2 TX), donc je vais initialiser le PORT 4 et le PORT 17, respectivement la PIN 7 et 11 du connecteur.

5.2 Principe de l’initialisation en port sortant d’un PORT GPIO :

La Séquence d’initialisation d’un PORT GPIO est la suivante (exemple pour le PORT 4) :


echo « 4 » > /sys/class/gpio/export &
sleep 2
echo out > /sys/class/gpio/gpio4/direction


La pause (sleep) de 2 secondes est une sécurité pour être certain que le PORT est acquis par le system avant de lui donner son paramètre de direction : OUT = Sortant

5.3 Insertion dans le fichier « rc.local » :

Il suffit d’éditer le fichier pour y ajouter les séquences, autant que de PORTs à activer. Dans notre exemple, nous allons initialiser 2 PORTs : Le GPIO 4 et le GPIO 17.

Le fichier « rc.local » est dans le répartoire « /etc » : pour y accéder, vous pouvez utiliser la commande « nano » comme nous l’avons fait pour paramétrer les adresses réseaux (Chapitre 3.2.2).

5.3.1 Le fichier « rc.local » avec l’initialisation GPIO des PORTs 4 et 17 :

La partie surlignée en GRAS correspond aux ajouts pour l’initialisation.

Oui, j’ai mis des commentaires (les lignes commençant par « # », c’est quand même plus facile à relire quand on y revient plus tard….)


#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will « exit 0 » on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ « $_IP » ]; then
printf « My IP address is %s\n » « $_IP »
fi

# configuration des broches GPIO 4 = ptt1 17 = ptt2
# GPIO 04 = PTT TX1 – UHF Relais
# GPIO 17 = PTT TX2 – VHF Link

#
# Preconf Port 04 : Out
#
echo « 4 » > /sys/class/gpio/export &
sleep 2
echo out > /sys/class/gpio/gpio4/direction

#
# Preconf Port 17 : Out
#
echo « 17 » > /sys/class/gpio/export &
sleep 2
echo out > /sys/class/gpio/gpio17/direction
exit 0


ATTENTION, remarquez que les ajouts se font AVANT la commande « exit 0 » de fin !!

5.3.2 Le fichier « rc.local » avec l’initialisation GPIO des PORTs 4 et 17 : Cas particulier si la commande soit être inversée.

A quoi correspond ce cas particulier ? Et bien j’ai trouvé des petites cartes relais sur Amazon, à moins de 3 € pour une carte complète avec 2 relais, les opto-coupleurs et le bornier !

Seul chose, lorsque que le PORT GPIO est à « 0 », le relais est ON et quand le GPIO est à « 1 », le relais est OFF …

Bref, l’inverse de ce que l’on cherche…

Une fois de plus, pas de panique, Linux et Raspberry ont tout prévus ! Il est possible de paramétrer l’initialisation du PORT de façon à ce qu’il fonctionne à l’inverse :

On dit que le port est Actif Bas (active_low), c’est-à-dire que, au repos, le port est à « 1 » et quand on l’active, il passe à « 0 ».

Cette fonctionnalité va nous permettre d’utiliser la carte suivante :

5V RELAIS MODULE 2 CANAUX POUR ARDUINO PIC ARM AVR DSP

Au moment où j’écris ces lignes : le prix est de 2,49 € … sans commentaire

carte_relais1carte_relais2

La carte fonctionne en 5V, donc l’alimentation du fourni par le GPIO est suffisante : 4 fils à relier et hop, c’est bon, nous avons notre interface de commutation pour les 2 TX !

Donc, pour ceux qui utiliseront ce type de cartes ou tout autre qui nécessite une inversion pour la commutation, il faut positionner l’initialisation « active_low » à 1, afin qu’il le prenne en compte.

La commande est la suivant toujours pour le PORT 4 d’exemple) :


sudo echo 1 > /sys/class/gpio/gpio4/active_low


Et nous positionnerons ensuite le PORT à 0 (repos) pour que le paramètre soit pris en compte, et par :


echo 0 > /sys/class/gpio/gpio4/value


Ce qui nous donne le fichier « rc.local » suivant :


#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will « exit 0 » on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ « $_IP » ]; then
printf « My IP address is %s\n » « $_IP »
fi

# configuration des broches GPIO 4 = ptt1 17 = ptt2
# GPIO 04 = PTT TX1 – UHF Relais
# GPIO 17 = PTT TX2 – UHF Relais

#
# Preconf Port 04 : Out
#
echo « 4 » > /sys/class/gpio/export &
sleep 2
echo out > /sys/class/gpio/gpio4/direction

#
# Preconf Port 17 : Out
#
echo « 17 » > /sys/class/gpio/export &
sleep 2
echo out > /sys/class/gpio/gpio17/direction

#
# Init a 1 pour repos
#
echo 1 > /sys/class/gpio/gpio4/active_low
echo 1 > /sys/class/gpio/gpio17/active_low
sleep 2

#
# Position inverse : active_low => mettre a 0
echo 0 > /sys/class/gpio/gpio4/value
echo 0 > /sys/class/gpio/gpio17/value

exit 0


En GRAS: L’initialisation « classique » des PORTs GPIO

En ITALIQUE: L’initialisation « Inverse » (Active Low) de ces PORTs

NB : vous pouvez utiliser n’importe quand et directement la commande « echo 0 > /sys/class/gpio/gpio4/value » pour tester un port : 0 pour OFF, 1 pour ON.