Installare il package pigpiod. Questo package serve per generare il segnale PWM sul pin GPIO22 usato per controllare il circuito di alimentazione dei led di backlight:
sudo apt update
sudo apt install pigpio
Pigpiod è un demone e quindi deve rimanere in esecuzione e accettare connessioni via socket da Node-red o da altri programmi.
Durante l'installazione viene creato un file /lib/systemd/system/pigpiod.service che serve a far partire il demone allo startup.
La versione di default di questo file, per motivi che non ho capito, non va per cui andrebbe modificata con un editor:
sudo nano /lib/systemd/system/pigpiod.service
Il contenuto è questo:
[Unit]
Description=Daemon required to control GPIO pins via pigpio
[Service]
#ExecStart=/usr/bin/pigpiod -l
ExecStart=/usr/bin/pigpiod
ExecStop=/bin/systemctl kill pigpiod
Type=forking
[Install]
WantedBy=multi-user.target
A questo punto va abilitato e lanciato il servizio:
sudo systemctl daemon-reload
sudo systemctl enable pigpiod.service
sudo systemctl start pigpiod.service
Nell'ambiente Node-red va ora installato il nodo che consente di parlare con il demone pigpiod
sudo npm install node-red-node-pi-gpiod
Questo è un flow di esempio che abbassa la luminosità dopo 60 secondi e la riattiva quando viene toccato il touch. La logica è contenuta tutta nel nodo funzione al centro del flow:
Questo è il json:
[{"id":"b06f250b.ce1f38","type":"pi-gpiod out","z":"c22b4e52.09915","name":"","host":"localhost","port":8888,"pin":"22","set":"","level":"0","out":"pwm","sermin":"1000","sermax":"2000","x":640,"y":480,"wires":[]},{"id":"f89b36af.e57208","type":"rpi-mouse","z":"c22b4e52.09915","name":"","butt":"1","x":190,"y":540,"wires":[["89c63d98.87035"]]},{"id":"89c63d98.87035","type":"function","z":"c22b4e52.09915","name":"","func":"var count = context.get('count')||0;\nvar timeout=60;\n\nif (msg.payload===1) {\n count=0;\n context.set('count',count);\n msg.payload=0;\n return msg;\n}\n\nif (msg.payload===\"tick\") {\n if (count<timeout) {\n count=count+1;\n context.set('count',count);\n }\n node.status({fill:\"green\",shape:\"ring\",text:count});\n \n if (count>=timeout) {\n msg.payload=60;\n return msg;\n }\n}\n","outputs":1,"noerr":0,"x":410,"y":540,"wires":[["b06f250b.ce1f38"]]},{"id":"c9d1864b.e172f8","type":"inject","z":"c22b4e52.09915","name":"","topic":"","payload":"tick","payloadType":"str","repeat":"1","crontab":"","once":false,"onceDelay":0.1,"x":210,"y":500,"wires":[["89c63d98.87035"]]},{"id":"95d0b06c.09478","type":"inject","z":"c22b4e52.09915","name":"","topic":"","payload":"0","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":370,"y":380,"wires":[["b06f250b.ce1f38"]]},{"id":"671e8cf6.0f6274","type":"inject","z":"c22b4e52.09915","name":"","topic":"","payload":"60","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":370,"y":420,"wires":[["b06f250b.ce1f38"]]},{"id":"47a01d74.261d54","type":"inject","z":"c22b4e52.09915","name":"","topic":"","payload":"100","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":370,"y":460,"wires":[["b06f250b.ce1f38"]]}]
2018 Ⓒ TanzoLab