Controllo luminosità backlight CM3-Panel in Node-red

In questo articolo viene illustrato come controllare la luminosità della CM3-Panel usando un segnale PWM, abbassarla dopo un certo tempo di inattività sul touch e riattivarla appena si tocca il touch. La gestione viene fatta in Node-red.

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"]]}]

Links