Ubuntu 15.10 per Raspberry Pi2

ubuntu

Avevo già provato tempo fa la Ubuntu 15.04 per il Raspberry Pi2, ricavandone un’impressione tutto sommato positiva. Ora il sito https://ubuntu-mate.org/raspberry-pi/ si ripresenta con la versione più recente, dotata tra l’altro del kernel più aggiornato disponibile (4.1.10) e ho voluto dare un’occhiata anche a questa. C’è da dire che se si ha intenzione di utilizzare l’RPi2 come un piccolo desktop computer mi pare proprio che non ci sia di meglio in circolazione; la Raspbian è decisamente più scarna, anche se comunque sempre preferibile se si ha intenzione di utilizzare massivamente l’RPi2 con sensori, bus SPI, I2C e quant’altro.

L’esperienza d’uso con questa Ubuntu 15.10 è quasi paragonabile a quella di un desktop Pc non troppo carrozzato, a patto di munire il Raspberry di una microSD di ottima qualità (di quelle che promettono 20-30 MB/s per intenderci) e di collegarlo alla rete casalinga tramite il cavo ethernet. Specialmente quest’ultima accortezza renderà un po’ più decente la navigazione web, dal momento che la maggior parte dei micro-dongle wifi in commercio hanno delle velocità di accesso a dir poco indecorose. Ho ottenuto un certo incremento di velocità con una vecchia chiavetta Peak non proprio micro, ma il cavo è il cavo. 🙂

La distro dispone come browser di Firefox, ma se vogliamo aprire tutto ciò che ha a che fare con Flash Player è meglio installare Chromium con il suo plugin Flash. La procedura, molto semplice, è descritta QUI.

Non manca il classico client di posta Thunderbird (già installato) e la possibilità di usare LibreOffice 5 per le normali attività di Office. Per chi ha accesso ad un cloud OwnCloud la buona notizia è che la versione del client scaricabile dal repository ufficiale è la 1.8.1, perfettamente funzionante anche con le più recenti versioni del server. Qui la Raspbian ad esempio con la sua vecchia 1.7.0 fallisce miseramente poiché non è capace di effettuare il login ai Cloud e l’installazione manuale dai vari siti di “port” è quello che si potrebbe definire un bagno di sangue.

Per chi usa come messenger Telegram consiglio di utilizzare la controparte Web. Esiste una versione esterna compilabile ma funziona da terminale e francamente mi sembra troppo “primitiva” per essere usata comodamente. Poi c’è anche una versione targata 2:1.0.5 della IDE di Arduino nel repository ufficiale, non proprio l’ultimo grido ma funziona.

Non manca VLC per vedere i video, ma la mancanza di una accelerazione hardware decente fa sì che vedere un video, specialmente se realizzato in HQ sia piuttosto un’impresa. Praticamente quando si ha a che fare con contenuti di tipo multimediale, sia direttamente che tramite browser escono fuori tutti i limiti del Raspberry. E’ possibile anche utilizzare un altro programma che si chiama OMXPlayer, ma per usufruire dell’accelerazione video è necessario acquistare una licenza al Raspberry Pi Store.

Insomma per chi ha intenzione di usare il Raspberry Pi2 come piccolo desktop didattico per imparare ad usare Linux, per imparare a programmare e per semplici esigenze di navigazione e videoscrittura va tutto bene, ma se si pretende di aver a che fare con contenuti multimediali in generale non si avranno in cambio che attese frustranti, video a scatti e in qualche caso anche blocchi di sistema. Di più l’hardware di cui è dotato l’RPi2 non può dare e bisogna rivolgersi a schede decisamente più performanti che comunque ci sono in commercio, ma non sicuramente a questi prezzi.

 

Manutenzione sito

Oggi, intorno alla mezzanotte (CET) il sito sarà irraggiungibile per circa una mezz’ora. Sostituirò l’attuale disco a piatto rotante con un SSD nuovo di zecca. Dovrebbe esserci un certo aumento di prestazioni, staremo a vedere 🙂

Today, at around midnight (CET) this site will be unreachable for 30m due to maintenance. The old HDD will be replaced with a brand new SSD unit 🙂

mantainer

 

AGGIORNAMENTO

Fatto. I backup hanno impiegato un po’ più tempo del previsto ma è andato tutto bene.

Ora i tempi di accesso in lettura e scrittura si aggirano sui 120MB/s. Certo, siamo lontani dai potenziali 500MB/s che un SSD Sata3 è in grado di dare, ma questo è il massimo che si riesce ad ottenere dalla porta Sata del Banana Pro. D’altronde siamo sempre 3-4 ordini di grandezza sotto i tempi di accesso di una microSD e bisogna in qualche modo accontentarsi. Tra l’altro il precedente disco da 2.5″ a piatto rotante assorbiva circa 700mA, il che considerato che era alimentato a 5V equivale al consumo di un Raspberry Pi2 a pieno regime. Questo SSD si mantiene intorno ai 2W a pieno regime, la metà del disco precedente. 🙂

 

Regolazione via Internet del modulo RTC DS3231

IMG_0040

Eccoci qui a parlare di nuovo di questo piccolo modulo RTC. Ho scoperto con soddisfazione che tutti e 5 quelli che mi sono arrivati sono perfettamente funzionanti e l’unica accortezza che ho avuto è stata di comprare comunque 5 batterie CR2032 nuove pronte per la sostituzione di quelle originali. Non conoscendo il tempo di stoccaggio di queste piccole schede e la qualità delle batterie cinesi in dotazione  (non mi aspetto granché) immagino non avranno una vita molto lunga.

Descrivendo in breve il DS3231 posso dire che si basa sul bus I2C, funziona anche a 5V e richiede 4 cavi di connessione, rispettivamente +Vcc, Massa e i due pin segnale SDA ed SCL che vanno collegati in genere ai pin analogici A4 e A5, o comunque a quelli assegnati al dialogo I2C. Infatti nel caso di un Arduino Mega i pin SDA ed SCL saranno in questo caso 20 e 21, E’ dotato di un oscillatore interno controllato in temperatura quindi si presenta ben più preciso nel tempo del DS1307. Si parla di uno scarto di 1 secondo a settimana, vedremo se è vero.

Ci sono diverse librerie esterne disponibili per pilotarlo, alcune dotate di una interessante gestione degli allarmi, come ad esempio questa, ma io per l’uso che intendo farne per ora mi sto servendo di funzioni che incorporo nei miei sketch che si limitano alla lettura della data ed eventualmente alla regolazione dell’orologio.

E dal momento che prima di utilizzare questo modulo va comunque (come tutti gli orologi) impostato ad un orario quanto più possibile accurato mi è sembrato doveroso cercare di farlo da un server NTP, ovvero quei server che forniscono sulle Reti in generale (pubbliche o private) l’ora esatta. In questo modo la precisione iniziale della regolazione è garantita, anche se ovviamente è necessario disporre di un Arduino dotato (in questo caso) di shield Ethernet con accesso ad Internet o quanto meno ad una LAN dotata di NTP Servers. Anche un modulo WI-FI va bene naturalmente, ma lo sketch va modificato con il codice di gestione richiesto dallo shield.

Ho adattato per questo parte del codice relativo alla libreria Ethernet per il colloquio NTP, le routine di gestione in lettura/scrittura del DS3231, e ne ho tirato fuori uno sketch che automaticamente imposta l’ora esatta sul nostro modulo RTC. Le uniche impostazioni manuali che vanno inserite nello sketch riguardano la nostra TIMEZONE, ovvero il fuso orario rispetto Greenwich e il giorno della settimana, codificato come numero, relativo a quando lanciamo lo sketch. Quest’ultimo valore sarebbe tra l’altro calcolabile da un’apposita funzione specializzata nell’uso dei calendari, ma dal momento che si tratta di uno sketch di uso non frequente per il momento ho lasciato l’impostazione manuale. Quindi prima di impostare l’RTC ricordarsi di valorizzare le costanti timezone e dayOfWeek.

Infine a titolo di esempio ho impostato come server NTP quello europeo di Apple, ma cercando su Internet non sarà difficile trovarne tanti altri (purché funzionanti, sarà lo sketch a segnalarlo) oppure, qualora ci si trovi in una Rete Aziendale, farsi dare l’indirizzo IP da un Lan Manager. Ho inserito nel codice anche la visualizzazione dell’orario registrato nell’RTC prima del settaggio, in modo tale da rendersi anche conto dell’errore accumulato nel tempo.

 

Sono arrivati i DS3231, modulo RTC per Arduino

IMG_0036

Sono arrivati finalmente, ne avevo ordinati 5 pagandoli complessivamente 9 euro e spero siano tutti perfettamente funzionanti. Ops, quello in figura ha un piedino leggermente piegato, ma niente a cui non si possa rimediare. Ho scelto questo modello perché a differenza del DS1307, questo ha un oscillatore interno esente da effetti indesiderati come il variare della temperatura esterna, e quindi dovrebbe essere notevolmente più preciso del fratello minore. Ora potrò dotare il modulo trasmittente della Stazione Meteo di un orologio interno in modo tale da inviare anche l’ora esatta delle letture tanto per dirne una.

Ho dato già un’occhiata allo sketch necessario per inserire data e ora e per leggerla e mi sembra molto semplice da gestire. Ho già in mente di modificarlo per programmare l’RTC da Internet (serve uno shield Ethernet naturalmente) tramite un server NTP in modo tale da avere un orario più preciso possibile. Quando avrò fatto ne parlerò più estesamente.

Nota positiva: la batteria era già presente nel modulo (una CR 2032) anche se ho il sospetto che non sia di qualità eccelsa e vada sostituita dopo non molto tempo. Ma va bene così. 🙂

IMG_0037

Da informazioni che ho reperito su Internet la perdita di precisione di questo RTC dovrebbe aggirarsi intorno a 1s a settimana, ovvero circa 1m all’anno.

 

Stazione Meteo – Software Upgrade v. 2.0

Ho provveduto ad effettuare due modifiche al software di gestione della Meteo Station. La prima comporta la lettura del voltaggio di lavoro (in teoria 5.0V) delle schede Arduino rispettivamente nella Stazione Trasmittente e nella Stazione Ricevente. Questo perché nel caso una od entrambe fossero alimentate da una batteria esterna si possa tenere sotto controllo la tensione di alimentazione, e alla eccessiva discesa di questo valore prevedere la ricarica e/o il cambio della batteria. Tali misure vengono riportate sulla tabella dati_meteo del database MySql per cui oltre al codice è cambiata la struttura di questa tabella.

La seconda modifica è senz’altro più importante. Avendo trovato una buona libreria per fare questo ho fatto in modo che sia la stessa Stazione Ricevente a scrivere i dati direttamente sul Database, rendendo in questo modo inutile la trasmissione UDP sul network e quindi il codice relativo al Server UDP da inserire nel data logger.

Cliccare QUI per scaricare la libreria di accesso a MySql per Arduino.

Consiglio caldamente di scaricare anche il file PDF contenente la documentazione della libreria, che offre una completa panoramica di come si usa e di tutti i comandi implementati. Ovviamente è richiesto uno shield Ethernet, o uno dei tanti shield o moduli wi-fi disponibili per Arduino. L’unica accortezza è che consuma molta memoria sia in termini di codice che di variabili, per cui in caso di sketch piuttosto complessi è necessario ricorrere ad un Arduino Mega o una di quelle schede che comunque hanno spazi dedicati alla programmazione superiori a quelli di una normale scheda Arduino Uno o Nano.

Nel caso del mio sketch siamo ancora nei limiti di gestione di un Arduino Uno, ad ogni modo ho inserito nel codice una funzione che in fase di debug sull’interfaccia seriale indica la memoria rimasta per le variabili. Bisogna cercare di evitare l’Out Of Memory del codice che porterebbe al blocco dello sketch o al reset continuo del codice.

Scaricata la libreria in formato .ZIP va inserita nella IDE di Arduino con la procedura solita. Io ho dovuto comunque spostare i file .cpp e .h nel path principale della libreria e rifare lo ZIP prima di inserirlo nella IDE, altrimenti le #include non funzionavano.

Attenzione poi al giusto dimensionamento dell’array char query[]. In caso di query piuttosto lunghe il valore consigliato negli esempi (128) porta l’esecuzione della query al blocco del codice. Ho dovuto infatti estenderne l’allocazione a 256 bytes per far funzionare lo sketch, tenendo sempre sotto controllo la memoria rimanente che si aggira circa sui 650 bytes durante il runtime.

Scompare quindi il codice Python relativo al Server UDP da far girare sul Server MySql e rimangono gli sketch relativi a Trasmettitore e Ricevitore che riporto qui sotto. Va notato che ora il timestamp di scrittura delle letture è dato dal database stesso, essendo il campo timestamp_cet dotato del default value CURRENT TIMESTAMP(6). Questo per ora è sufficiente ma sono in attesa che mi arrivino dei moduli DS3231 AT24C32 IIC, piccole schede contenenti un RTC, ovvero un orologio alimentato a batteria che finalmente potrò utilizzare per marcare le letture dei sensori con il loro tempo effettivo di prelievo.

 

TABELLA DATI_METEO MODIFICATA

SKETCH DELLA STAZIONE TRASMITTENTE

SKETCH DELLA STAZIONE RICEVENTE