In questa breve guida, prendendo spunto dalla documentazione di Johnny-five e Node-red, configuriamo un Raspberry pi per collegarlo all’internet delle coseInternet of Things!

Cos’è Node-Red?

Node-RED è un tool open-source sviluppato da IBM, nato per collegare insieme dispositivi hardware, API e servizi web, in una maniera nuova e interessante.

node-red-title-flow

Node-RED fornisce un editor di flusso sul browser che rende semplice l’unione di flussi provenienti dai nodi più disparati. Questi flussi possono essere deployati a run-time con un semplice click.
L’editor permette anche la scrittura al volo di funzoni javascript intermedie. L’engine di Node-RED è costruito interamente su Node.js. Questo lo rende ideale per funzionare ai “bordi della rete”, su dispositivi come il Raspberry Pi o in Cloud.
I Flussi creati in Node-RED sono salvati usando il formato JSON, che rende facile l’import e l’export e dunque facilita anche la condivisione dei flussi con il resto del mondo.

Qui una breve introduzione:

Cos’è Johnny-five?

Johnny-five è una piattaforma per la robotica e l’IoT attraverso Javascript. Rilasciata nel 2012 da Bocoup, Johnny-five è ormai open-source e centinaia di contributori l’han resa una piattafroam robusta, estensibile e altamente flessibile, con il supporto ad un ampio ecosistema di dispositivi.

johnny-five

Installare Raspbian

Per proseguire con la guida, diamo per scontato che abbiate già un raspberry pi operativo, correttamente configurato con una versione di Raspbian (superiore alla release 2015-21-11 possibilmente) e connesso a internet.

Node-Red

Ci sono due modi per iniziare a usare Node-RED su Raspberry Pi.
1) Usare la versione di Node-Red preinstallata su Raspbian Jessie, da novembre 2015.
2) Effettuare un’installazione manuale di NodeRed da npm.

Nel primo caso, viene usata la versione di node.js pre-installata che è v0.10.29. Se si opta per l’installazione manuale allora si consiglia una versione di Node.js dalla 4 in su, v4.x.
Dalla versione 0.14.x di Node-RED è presente uno script che effettua in automatico un upgrade all’ultima versione LTS di Node.js e di Node-RED.
Se si effettua l’upgrade manuale di Node.js allora sarà necessario anche ricompilare tutti i nodi installati che abbiano dipendenze binarie:

cd ~/.node-red
npm rebuild

Installazione manuale

Prima di procedere con l’installazione manuale bisogna disinstallare le versioni attualmente presenti:

node-red-stop
sudo apt-get remove nodered
sudo apt-get remove nodejs nodejs-legacy
sudo apt-get remove npm   # if you installed npm

Questo rimuove tutti i pacchetti installati ma mantiene il workspace, di default in ~/.node-red. Si può a questo punto procedere con l’installazione da zero.

Installare Node.js

Siccome il RPi B+ e i RPi 2/3 utilizzano un processore differente (Arm v6 e Arm v7), il metodo per l’installazione di Node è leggermente differente:

Raspberry Pi 2 e Raspberry Pi 3

Per installare Node.js su Pi 2 e Pi 3 – e altre board basate su Arm7, eseguite questi comandi:

curl -sL https://deb.nodesource.com/setup_4.x | sudo bash -
sudo apt-get install -y build-essential python-rpi.gpio nodejs

Questo installerà anche tutte le dipendenze necessarie.

Raspberry Pi B+

Il modo più semplice per installare Node.js e altre dipendenze sulla prima versione di raspberry, Pi Zero, Pi A+/B+ è:

wget http://node-arm.herokuapp.com/node_latest_armhf.deb
sudo dpkg -i node_latest_armhf.deb
sudo apt-get install build-essential python-rpi.gpio
hash -r

Installare Node-RED

Installiamo l’ultima versione stabile di Node-RED usando il node’s package manager, npm:

sudo npm cache clean
sudo npm install -g --unsafe-perm  node-red

Nota: Durante l’installazione potrebbero esser riportati degli errori da parte di “node-gyp”. Questi solitamente sono errori non-fatali e si riferiscono alle dipendenze opzionali che di norma richiedono un compilatore per esser compilati. Node-RED funziona anche senza queste dipendenze opzionali.

Se ci sono errori npm (non warning nè errori relativi a gyp) durante l’installazione, provate a lanciare sudo npm cache clean e rilanciate il comando d’install. NB: npm dovrebbe essere almeno alla versione 2.x. Lanciate npm -v per accertarvene.

Nota: Il motivo che spinge all’uso dell’opzione –unsafe-perm è legato al fatto che node-gyp cerca di ricompilare le librerie native come utente “nobody” e dunque spesso fallisce nell’accesso di determinate directory. Con questo flag si concede a node-gyp di girare come root.

Accedere ai GPIO

Se pianificate di accedere ai GPIO del Raspberry da Node-RED, dovreste verificare quale versione della libreria Python RPi.GPIO è installata.
Node-RED include uno script specifico per RPi, nrgpio per interagire con i pin GPIO hardware.
Se installato come modulo npm globale, questo script dovrebbe trovarsi in:

/usr/lib/node_modules/node-red/nodes/core/hardware/nrgpio ver
oppure
/usr/local/lib/node_modules/node-red/nodes/core/hardware/nrgpio ver

Dovreste avere almeno la versione 0.5.11 per il Pi2 o la 0.5.8 per versioni più vecchie di raspberry.
Se non lo avete affatto installato, il comando per farlo è questo:

sudo apt-get update && sudo apt-get install python-rpi.gpio

Accedere alla porta seriale

Se volete usare il nodo per l’accesso alla porta seriale, con Node.js v0.10.x o v0.12.x e avete manualmente installato Node-RED su Raspbian Wheezy, allora dovrete installare manualmente una versione specifica del nodo serial port:

sudo npm i -g --unsafe-perm [email protected]

Avviare Node-RED

A causa dei limiti di memoria del Raspberry Pi, è necessario avviare Node-RED con il comando node-red-pi. Questo permette l’aggiunta di un argomento che indicherà a Node.js di liberare memoria inutilizzata quando raggiunta quella soglia.

node-red-pi --max-old-space-size=128

Se decidete di avviare Node-RED usando il comando node direttamente, questa opzione deve apparire fra “node” e “red.js”:

node --max-old-space-size=128 red.js

Questa opzione limita lo spazio utilizzabile a 128MB prima di ripulire la memoria. Se non state eseguendo nient’altro sul vostro raspberry, allora potete anche permettervi di aumentare questo limite a 256MB o più. Il comando htop o free -h vi fornirà qualche delucidazione in merito alla memoria utilizzata.

Nota: la versione pre-installata di Node-RED su Raspbian usa il comando node-red-start con 128MB di default. Se volete cambiare questo valore, il file da modificare si trova in: /lib/systemd/system/nodered.service

Avviare Node-RED al boot

Il modo migliore per avviare Node-RED all’avvio di sistema è di usare le funzionalità di systemd.

sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/nodered.service -O /lib/systemd/system/nodered.service
sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-start -O /usr/bin/node-red-start
sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-stop -O /usr/bin/node-red-stop
sudo chmod +x /usr/bin/node-red-st*
sudo systemctl daemon-reload

Questi comandi (eseguiti come root), scaricano i 3 file richiesti nelle locazioni esatte, rendono gli script eseguibili e riavviano il demone systemd.
Node-RED può essere eseguito e stoppato usando i comandi node-red-start e node-red-stop. Di default gira sulla porta 1880.

Per abilitare l’esecuzione di node-red al boot di sistema o dopo eventuali crash:

sudo systemctl enable nodered.service

Per disabilitarlo:

sudo systemctl disable nodered.service

Systemd usa come file di log: /var/log/system.log. Per filtrare i lod relativi a node-red si può usare:

sudo journalctl -f -u nodered -o cat

Aggiungere Johnny-five a Node-RED

Avremo bisogno di aggiungere dei pacchetti su node-red per poter usare johnny-five.

sudo su
cd .node-red
npm i node-red-contrib-gpio

Dopo un istante, a download e installazione completata, avremo a disposizione l’accesso ai GPIO e Johnny-five.
A questo punto possiamo collegare un Arduino alla porta USB e iniziare.
Possiamo anche aggiungere raspi-io così da usare direttamente i GPIO del RPI.

npm install raspi-io  # installiamo la nuova dipendenza in .node-red
reboot  # riavviamo il sistema
node-red-start  # eseguiamo nuovamente node-red se non abbiamo già impostato una rule per l'esecuzione all'avvio.

Facciamo lampeggiare un LED

Con le dipendenze correttamente installate e node-red in esecuzione, possiamo andare a questo indirizzo nel browser: http://INDIRIZZO-IP-RASPBERRY:1880

Trasciniamo un nodo johnny-five nel workspace di node-red e facciamo doppio click su di esso. Dopodichè tasto edit per configurare un nuovo nodebot, selezionamo come tipologia di nodebot “Raspberry Pi” e schiacciamo Add:

add_pi_nodebot

Dopodichè nel blocco di codice onReady possiamo scrivere qualcosa del tipo:

var led = new five.Led('GPIO4');
 
led.blink(500);

Schiacciamo il tasto Deploy in alto a destra e se abbiamo un LED connesso al GPIO4, dovrebbe iniziare a lampeggiare!

Le potenzialità di questo workflow engine chiaramente vanno ben al di là di questo semplice esempio. Node-RED integra di base dei nodi per l’utilizzo di protocolli quali websocket, MQTT etc. E’ un pezzo fondamentale per qualunque applicazione di Internet of Things.
Possiamo connettere l’output di un nodo di johnny-five a qualunque altro tipo di nodo.

j5_tweet

Dunque collegare un bottone fisico sulla nostra board, schiacciarlo e veder pubblicato il mex su twitter.