![]() |
Les librairies qui prennent en charge le GPIO de l’Orange Pi se développent doucement. Aujourd’hui, je vous propose d’essayer le package node-red-contrib-opi-gpio pour Node-RED développé par gprandst. Le développeur a testé le package sur un Orange Pi PC. Pour cet article, j’ai testé le package avec succès sur un Orange Pi Lite (WiFi, 512Mo). Suivez ce tutoriel pour installer Node-RED sur Orange Pi (Armbian).
Sommaire
Installation du package sous Node-RED
L’installation est Node-RED est assez simple. Fermez tout d’abord NodeRED puis lancez l’installation du package à l’aide de la commande npm. C’est préférable car l’installation nécessite la compilation de sources (WiringPi notamment), ce qui ne fonctionne pas très bien depuis le gestionnaire de palette.
npm install node-red-contrib-opi-gpio
Ensuite, il est nécessaire d’ajouter un groupe gpio. Les étapes suivantes sont tirées de la documentation du package npm (disponible ici). Commencez par vérifier si un groupe gpio existe.
Remplacer l’utilisateur pi par votre nom d’utilisateur
groups pi
Si le groupe n’existe pas, il faut le créer et autoriser l’utilisateur pi à y avoir accès
addgroup gpio usermod -a -G gpio pi
Il faut ensuite ajouter un règles au Kernel
sudo nano /etc/udev/rules.d/99-com.rules
Collez la règle suivante et enregistrez le fichier avec CTRL + X puis Y.
KERNEL=="gpio*", RUN="/bin/sh -c 'chgrp -R gpio /sys/%p /sys/class/gpio && chmod -R g+w /sys/%p /sys/class/gpio'"
Redémarrez l’Orange Pi.
sudo reboot
Utilisation du GPIO de l’Orange Pi depuis Node-RED
Le package ajoute 2 outils dans la palette Orange Pi :
- output pin : permet de piloter les sorties
- input pin : les entrées, logique !
Un petit exemple pour conclure
Pour tester le package, on va brancher un interrupteur sur le GPIO 11 (PA11 dans la nomenclature OPI) qui va déclencher l’allumage d’une Led branchée sur le GPIO12 (PA12) par l’intermédiaire d’une résistance 220Ω. Un nouvel appui sur le bouton éteindra la Led. L’état de la led sera stocké dans une variable de contexte. Pour rappel, voici le repérage des broches de l’Orange Pi (tous modèles sauf Orange Pi Zero).
Source : https://github.com/uraimo/SwiftyGPIO/wiki/GPIO-Pinout
Commencez par ajouter un node input sur le flow. Ouvrez la fenêtre d’édition. Par défaut la case Use GPIO pinout. En décocher cette case, il est possible de spécifier la broche manuellement. On va laisser faire le package cette fois surtout que les broches respectent les noms d’OPI. Choisissez PA11 (Broche 5).
Pour détecter l’appui sur un bouton, gprandst à ajouté une gestion d’interruption bien pratique. Il détecte un appui (ou un autre événement d’ailleurs) sur un front montant (raising), un front descendant (falling), ou les deux (both). Ici, rising (front montant) fera l’affaire.
Garder l’état de la led dans un contexte Node-RED
On va utiliser le contexte de Node-RED pour stocker l’état de la led. A chaque fois qu’un appui sur le bouton est détecté, la fonction est appelée. On récupère l’état précédent avec la fonction context.get(‘led). Ensuite, il suffira d’inverser (status = !status) et enfin le stocker pour la prochaine fois context.set(‘led’,status). Collez cette fonction dans un node function
var status = context.get('led') || false; // Récupère l'état de la Led (false si inexistant) - Get led status (false by default)
status = !status; // Inverse l'état - Reverse status
context.set('led',status); // Enregistre l'état - store new led status
msg.payload = status; // Prépare la sortie du node - prepare node output
return msg;
Node output
Collez maintenant en node Output. Il est possible de spécifier son propre numéro de broche (comme pour input). On peut aussi initialiser la broche dans un état donné (haut – High, bas – Low).
Ici, on choisira la broche PA12 (Pin 3) comme sortie.
Code du flow
Pour aller plus vite, voici le code du flow qu’il vous suffit d’importer
[{"id":"1188e21.b72161e","type":"opi_out","z":"802c6c20.fd84e","name":"Pin 3 - PA12 (Led)","set":false,"level":"1","opi":true,"pin2":"","pin1":"12","pin":"12","x":728.5,"y":310,"wires":[]},{"id":"2e1640da.19eb4","type":"opi_in","z":"802c6c20.fd84e","name":"Pin 5 - PA11 (Switch button)","opi":true,"enableInterrupt":true,"edge":"rising","debounce":"100","pin2":"","pin1":"11","pin":"11","x":262.5,"y":208,"wires":[["f760119e.40a43"]]},{"id":"f760119e.40a43","type":"function","z":"802c6c20.fd84e","name":"New Status","func":"var status = context.get('led') || false;\nstatus = !status;\nmsg.payload = status;\n\ncontext.set('led',status);\n\nreturn msg;","outputs":1,"noerr":0,"x":508.5,"y":265,"wires":[["1188e21.b72161e","db31a090.17315"]]},{"id":"db31a090.17315","type":"debug","z":"802c6c20.fd84e","name":"","active":true,"console":"false","complete":"false","x":720.5,"y":201,"wires":[]},{"id":"2f572255.f0f61e","type":"comment","z":"802c6c20.fd84e","name":"Orange Pi GPIO.OPI input/output","info":"","x":266.5,"y":146,"wires":[]}]
Nous sommes encore loin de pouvoir profiter de toutes les possibilités du GPIO de l’Orange Pi mais c’est déjà un excellent début surtout pour les débutants qui cherchent une solution (encore) plus économique ou plus puissance que le Raspberry Pi.
No posts for this criteria.
|
|
- ESP32, broches GPIO et fonctions associées. I/O, PWM, RTC, I2C, SPI, ADC, DAC
- ESP32-CAM. Broches et équipements ESP-EYE, AI Thinker, TTGO T-Camera, M5Stack Timer Camera…
- ESP32-CAM. Quel modèle choisir ? ESP-EYE, AI Thinker, TTGO T-Camera, M5Stack Timer Camera…
- M5Stack Atomic GPS. Tracker ESP32 TinyGPS++, export GPX sur carte SD, visualisation sur Google Maps ou VSCode
- Home Assistant. Installer le snap sur NAS Synology sur une machine virtuelle Ubuntu
- ESP32-CAM. Souder l’antenne externe pour améliorer la portée et la stabilité du flux vidéo
Avez-vous aimé cet article ?
