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
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.