Archivi categoria: CubieBoard2

Un altro progettone!

Non sono un appassionato di meteorologia, sono semplicemente un “meteocurioso”. Mi piace conoscere la misura dei principali parametri meteorologici e poterne studiare la loro evoluzione nel tempo. Tanti anni fa avevo un quaderno in cui annotavo temperatura massima e minima del giorno. A dire il vero lo faceva mamma… io mi scordavo 2 volte su 3.

Ai tempi della tesi di dottorato avevo rispolverato un paio di componenti molto interessanti per la misura della temperatura ed umidità e pressione ed umidità. Si tratta di SHT21 della Sensirion e del MPL115A della NXP. Due prodotti molto interessanti, piccoli e facili da leggere, soprattutto con una raspberrypi. All’epoca avevo anche realizzato un mini-sito nella raspberry per potere analizzare l’andamento dei parametri meteo e poterlo confrontare con la variazione delle grandezze elettriche che erano oggetto del mio studio.

A distanza di alcuni anni, ho notato in commercio due oggetti che hanno riacceso il “fuoco sacro” della sperimentazione:

  • ESP8266, un chip Wi-Fi a basso costo con un microcontrollore Arduino-compatibile integrato;
  • BME 280, un sensore Bosch capace di rilevare temperatura, umidità e pressione.

Ho deciso quindi di realizzare una stazione meteo, che non pretende di entrare in competizione con prodotti commerciali ma che può soddisfare la mia curiosità meteorologica. Il progetto prevede l’integrazione di numerosi sensori e componenti aggiuntivi:

  • schermo solare, realizzato con i sottovasi ed il tornio;
  • sensore di temperatura umidità e pressione;
  • sensore di direzione del vento;
  • sensore di velocità del vento;
  • sensore di presenza pioggia.

 

I dispositivi sono stati acquistati tutti su Aliexpress, attendendo i canonici 30,40,50 giorni per la consegna. Particolarmente positivo è stato il giudizio nei confronti dei sensori di direzione e velocità del vento: ben costruiti, con ottimi cuscinetti e connessioni stagne. Considerato il prezzo di acquisto il prodotto è davvero interessante.

ESP8266 si occupa di raccogliere tutti i dati, impacchettarli e consegnarli via metodo http post al server per il loro immagazzinamento nel database. Il database è MySQL in esecuzione sulla solita Cubieboard. I dati sono presentati attraverso una interfaccia web “triviale” ed è possibile anche tracciare dei grafici relativi all’andamento delle grandezze nell’arco di 24,48 ore o una settimana. Nello screenshot seguente si vede la tabella riepilogativa dei sensori presenti in cui sono riportate le principali grandezze misurate. Il sensore pioggia è in errore a causa di un malfunzionamento.

Questa immagine mostra i dettagli del sensore. Una tabella riepiloga massimi, minimi e valori medi delle grandezze misurate.

I grafici mostrano l’andamento nel tempo delle grandezze, sono realizzati con la libreria JpGraph.

I problemi da risolvere sono stati tantissimi, molti dovuti alla mia proverbiale incapacità di programmatore. Malgrado le difficoltà, il sistema è attualmente in produzione e funziona in maniera piuttosto stabile. Ho notato una certa imprecisione del sensore di pioggia, che mi era stata segnalata anche da un collega. Non mi sorprende, considerando il prezzo di acquisto del dispositivo. La maggiore difficoltà la ho avuta nel gestire lo stato della connessione di ESP8266: nella prima stesura del codice effettuavo un controllo di connessione solo in fase di “setup” del dispositivo. Con questo approccio errato, in caso di caduta della connessione Wi-Fi, le funzioni che cercano di scrivere su un socket rallentano o bloccano l’esecuzione del codice. L’inserimento di controlli sullo stato della connessione ed eventuale riconnessione, ha reso il funzionamento del sistema molto più stabile.

Ho sviluppato il sistema con l’IDE di Arduino. Non amo particolarmente questo sistema ma lo ritengo comodissimo per questo tipo di applicazioni ludico-ricreative. Sviluppare il progetto con il PIC sarebbe stato un pianto (per me…) integrare una chip Wi-Fi con stack tcp/ip sarebbe stato oneroso e, forse, inutile. Ben vengano queste agevolazioni quindi, soprattutto se sono ben consolidate ed affidabili.

Il codice è a disposizione su richiesta, appena avrò tempo di epurarlo dai dati personali sarà pubblicato sul sito nella sezione download.

 

CubieBoard: Monitoraggio presenza tensione

Nella nuova dimora accade, ogni tanto, che la fornitura di energia elettrica risulti un po’ ballerina. Ci sono stati dei casi di black-out molto prolungato che hanno messo a dura prova i miei UPS, portando le battarie all’esaurimento e creando qualche attimo di panico con il NAS.

Per questo ho deciso di implementare un sistema di monitoraggio della tensione di rete, che fosse in grado di:

  • rilevare l’assenza della tensione di rete;
  • comunicare via mail l’evento;
  • inviare mail periodiche in caso di perdurare del balck-out;
  • spegnere in modo graceful NAS.

La cosa è stata più facile sulla carta che non da vero, come sempre. In effetti ho dovuto lottare con le I/O della Cubieboard (come ho descritto in questo articollo).

CubieBoard. GPIO e che fatica!

Il rilevatore di tensione lo ho realizzato implementando uno schema che ho trovato in rete. Si tratta di utilizzare un piccolo trasformatore di tensione 220V -> 5V e di connetterlo ad un GPIO della Cubieboard attraverso un regolatore di tensione a 3.3V. Il trasformatore sarà collegato ad una presa di energia elettrica non servita da UPS. Al momento del black-out, la tensione in uscita dal trasformatore passa a 0 e lo stato logico del piedino di I/O della Cubieboard è 0. Lo schema è semplice ed efficace, solo che occorre mettere in conto che il trasformatore, consuma (pochissimo ma….).

IMG_20160417_105230

A questo punto ho quindi un sistema hardware che è in grado di creare un evento su un PIN della Cubieboard in caso di Black-Out. Il software è stato scritto in “bash” (strano vero?) . Lo script viene eseguito ogni minuto dal crontab e verifica lo stato del piedino di monitor. In caso sia a livello logico alto non succede nulla, in caso sia a livello 0 inizia una complessa routine per la gestione degli alert e degli eventi. Il funzionamento dello script si basa su alcuni files che vengono creati in /tmp/ e che contengono flag o timestamp per tenere traccia di quello che sta succedendo. Forse non è il modo migliore di programmare, ma questo è ciò che riesco a fare.

Una volta approntato il software è necessario configurare alcuni aspetti del sistema operativo, per fare in modo che le mail vengano inviate utilizzando Gmail. Per questo mi sono avvalso di una guida reperibile a QUESTO indirizzo.

Visto che avevo le mani  sulla tastiera, mi sono anche divertito a configurare l’applicazione Telegram sulla piattaforma Cubieboard. In effetti lo step due dello sviluppo del sistema sarà quello di abilitare anche il controllo bidirezionale del sistema via Telegram (per adesso è solo una idea, il tempo per lo sviluppo del codice e delle idee è sempre pochissimo).

Per quanto riguarda la programmazione in bash, il web è pieno di tutorial base o avanzati, basta sapere cercare un po’ su Google.

Per lo spegnimento del QNAP l’unica strada percorribile è quella di effettuare login sul sistema utilizzando SSH e dare il comando “halt”. Il comando poweroff non è altrettanto efficace e rischia di lasciare alcune parti del sistema attive. Per effettuare il login con il protocollo ssh sul NAS occorre utilizzare i certificati, in modo che non siano richieste le credenziali di autenticazione. Una guida alla configurazione si trova QUI.

Il codice è scaricabile dalla sezione DOWNLOAD del sito, nella sezione “Software”.

 

CubieBoard. GPIO e che fatica!

Per realizzare un progettino di cui parlerò tra qualche tempo, mi sono imbattuto nella necessità di lavorare con il GPIO della Cubieboard2. Alcune considerazioni:

  • la documentazione è pessima, questo riguarda tutto il progetto. Quindi, nessuna nuova!
  • Le GPIO sono a passo 2mm davvero scomode.

La mia CB monta un sistema operativo Debian 8.3 MainLine, come descritto QUI. Pertanto

The Allwinner-specific script.bin isn’t needed anymore.

L’accesso alla GPIO si effettua direttametne da SYSFS, solo che occorre “pescare” il PIN giusto. Per fare questo innanzitutto si individua il PIN FISICO sul quale vogliamo operare: io ho scelto il pin 17 del connettore U15 (ponendo la scheda con la alimentazione in basso, è il connettore sulla destra). Il PIN17 si chiama CSI1-D6. Guardando su questo schematico (è per la CB con A10 ma non cambia molto a quanto pare), si scopre che questo PIN fa capo al segnale PG10 del System On Chip. Pertanto si può applicare la formuletta trovata qui, per capire come referenziare correttamente il PIN: G-> 7a lettera dell’alfabeto

(numero_lettera_alfabeto – 1) * 32+(numero_pin) —> (7-1)*32+10=202

Per abilitare il PIN occorre digitare:

/bin/echo 202 > /sys/class/gpio/export
/bin/echo in > /sys/class/gpio/gpio202/direction

In qeusto modo, con il comando cat si può ricavare il valore del PIN:

root@cubieboard:~# cat /sys/class/gpio/gpio202/value
1
root@cubieboard:~#

Semplice vero? No. Ho impiegato DUE ore a capire questa cosa.

Maledetti!