Armbian – Accès au GPIO à distance en non ‘root’

Avec Armbian il est nécessaire d’être en ‘root’ pour pouvoir accéder au GPIO. Ici nous allons voir comment résoudre cette difficulté sur un Orange Pi One Plus lorsque l’on souhaite piloter le GPIO à distance par le web. Cela et bien sûr applicable à d’autres cartes sous Armbian.

Programme de test sur pin 26

Nous allons créer un petit oscillateur pendant 10s de la pin 26 du GPIO qui correspond au GPIO 227 en interne. Pour en savoir plus sur l’accès au GPIO de l’Orange Pi One Plus, allez sur cet article: https://f1atb.fr/index.php/fr/2020/06/16/gpio-de-lorange-pi-one-plus/

Ce programme, ‘test_pin26.py’ est écrit en python 3.

#!/usr/bin/python3           address Python 3 environment


import os            # To execute system command
import time         # this lets us have a time delay

numgpio=227                     # OK for Orange Pi One Plus H6 , Pin 26

numgpio=str(numgpio)
print ("Pin 26, numgpio:"+numgpio)


os.system("sudo echo "+numgpio+" > /sys/class/gpio/export")
os.system("sudo echo out > /sys/class/gpio/gpio"+numgpio+"/direction")       


print ("Square signal around 50Hz for 10s")
T0=time.time()+10
while time.time()<T0:
        os.system("echo 0 > /sys/class/gpio/gpio"+numgpio+"/value")
        time.sleep(0.01)
        os.system("echo 1 > /sys/class/gpio/gpio"+numgpio+"/value")
        time.sleep(0.01)


os.system("echo 0 > /sys/class/gpio/gpio"+numgpio+"/value")   # set port/pin value to 0/LOW/False
os.system("sudo echo "+numgpio+" > /sys/class/gpio/unexport") # Clean GPIO
print ("Bye.")

Il est à placer dans le dossier cgi-bin. En étant en root, il est possible de le lancer :
python3 test_pin26.py
et de voir sur un oscilloscope le signal à environ 50Hz

Lancement à distance avec Apache

La première étape consiste à installer un serveur web comme apache. La procédure est simple comme décrite ici pour un Orange Pi Zéro.
https://f1atb.fr/index.php/fr/2020/11/12/apache-sur-orange-pi-zero/

Il faut dans la configuration du site dans Apache implanter l’accès aux pages dynamiques avec un dossier cgi-bin.

Apache tourne sous l’utilisateur et le groupe ‘www-data’. Nous allons donner à cet utilisateur les privilèges du root pour lancer python3 et avoir accès au GPIO sans mot de passe. La clé est l’écriture d’un fichier , par exemple ‘python_web’ donnant les droits.

www-data ALL=(ALL) NOPASSWD: /usr/bin/python3

Ce fichier ‘python_web’ très simple est à placer dans le dossier /etc/sudoers.d/. Il est possible de le modifier si l’on souhaite un accès pour un autre utilisateur que www-data.

Il ne reste plus qu’a écrire un scrip dynamique de lancement ‘launch_test_pin26.sh’ à mettre également dans cgi-bin.

#!/bin/bash

echo "Content-type:text/html"
echo ""
echo "<div style='width:100%;background-color: black;color:white;'>"


x=$(sudo python3 test_pin26.py)


echo "${x//$'\n'/<br>}"
echo "</div>"

Pour limiter l’accès à apache , mettez les fichiers ‘test_pin26.py’ et ‘launch_test_pin26.sh’ avec des droits 744 et l’utilisateur www-data et le groupe www-data.

Appelez votre page web:

http://<ip server>/launch_test_pin26.sh

Au bout de 10s vous voyez affiché les commentaires générés par le programme python de test.
Pin 26, numgpio:227
Square signal around 50Hz for 10s
Bye.

En cas de problème allez faire un tour du côté des messages d’erreur d’Apache qui se trouve ici: /var/log/apache2/error.log

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.