Arduino: connessione a MySQL su Raspberry Pi

Ecco il mio Arduberry:

Arduberry

Un Arduino Leonardo con sensore di temperatura e di luce, connesso direttamente via porta USB a un Raspberry Pi su cui gira un server LAMP. I dati del sensore vengono scritti ogni dieci minuti su un database MySql sul Raspberry.

Il vantaggi di questa soluzione rispetto a quella precedente sono che a) non si appoggia a nessun servizio esterno e quindi ne ho il pieno controllo, e b) che mi sono divertito un casino a smanettare tra java, python, sudo nano e crontab. Ho tratto grande giovamento dai vari tutorial in circolazione, in particolare Connect Raspberry Pi and Arduino with Serial USB CableTutorial: store Arduino data with RaspBerry PI to MySql che ringrazio di cuore: ragazzi, non ce l’avrei mai fatta senza di voi.

Prossimo passo: trovare un alimentatore separato per l’Arduino, che la porta USB del Raspberry alimenta ma appena appena. Potrei provare a utilizzare il server Apache del Raspberry per la visualizzazione dei dati. Magari un’altra volta.

Ecco la non semplicissima ricetta, al netto degli innumerevoli prova ed errore:

1)

/*
  Termometro 
  con smoothing dei valori del sensore
  (media di 10 letture)

  vedi
  http://www.arduino.cc/en/Tutorial/Smoothing
  
*/


const int numReadings = 10;     // numero di letture per la media
int readings[numReadings];      // le letture dal sensore analogico
int index = 0;                  // 'indice della lettura corrente
int total = 0;                  // il totale corrente
int average = 0;                // la media
float temp;                       // la temperatura in C°
int light;
int inputPin = A0;              //la connessione al sensore di temperatura
int lightPin = A1;
int x;
int y;
unsigned long temptot;



void setup()
{
  Serial.begin(9600);
  // metto a 0 le letture: 
  for (int thisReading = 0; thisReading < numReadings; thisReading++)
    readings[thisReading] = 0;          
}

void loop() {
  // tolgo l'ultima lettura:
  total= total - readings[index];         
  // leggo più volte dal sensore
  // e faccio la media per stabilità: 
  temptot = 0;
  for(x = 0; x < 64; x++) {
    temptot += analogRead(inputPin);
  }
  y = temptot >> 6;
  readings[index] = y;
 
  //readings[index] = analogRead(inputPin); 
  // aggiungo la lettura al totale:
  total= total + readings[index];       
  // avanzo alla posizione seguente nell'array:  
  index = index + 1;                    

  // se siamo alla fine dell'array...
  if (index >= numReadings) {              
    // ...ricomincio da capo: 
    index = 0;                           
  }
  // calcolo la media:
  average = total / numReadings;
  
  // converto voltaggio sensore in °C
  temp = ( 5.0 * average * 100.0) / 1024.0;  
  // leggo l'output per debug:
  // Serial.println(temp); 
  light = analogRead(lightPin);
  

  // scrivo sulla porta seriale:
  Serial.print(temp);
  //Serial.print(average);
  Serial.print(" ");
  Serial.print(light);
  Serial.println();

  delay(2000);        // ritardo tra le letture per stabilità 
  
}

2)

Codice in python (il file è questo) che legge la USB del Raspberry , preleva i valori dei sensori e li scrive nel database MySQL:

arduinotomysql1

 

3)

La riga aggiunta in Raspberry con il comando crontab -e che esegue la lettura della porta seriale ogni dieci minuti (l’ultima parte serve a evitare le mail di alert):

*/10 * * * * /usr/bin/arduinotomysql.py >/dev/null 2>&1

 4)

Enjoy!

Da Spark a Google Spreadsheets: una storia d’amore con finale tragico

Temp/light sensor

Una delle cose interessanti dello Spark (il simil-Arduino con WiFi integrato) è che pubblica automaticamente nel cloud il suo stato.

Una delle cose interessanti di Google Spreadsheets è che è programmabile, e gli puoi chiedere di prendere i dati da una url:
Gdocscript

Metti insieme le due cose, e questo è il risultato:

gdocsresult

Ero molto contento della scoperta, che mi apriva nuovi e mirabolanti orizzonti. Poi sono andato ad automatizzare il tutto, creando un trigger che mi eseguisse automaticamente lo script ogni 15 minuti:

Gdocstrigger

E qui il bel sogno è svanito. Il trigger di Google Drive non funziona, oppure funziona quando vuole lui. Una veloce ricerca mi ha confermato che è un problema comune a tutti quelli che ci hanno provato.

Morale: bisogna cercare altre strade. Per esempio, alimentare direttamente un database MySQL tramite Temboo.

 

LIFX la lampadina col WiFi

Questa lampadina l’avevo trovata su kickstarter a metà dell’anno scorso e mi era piaciuta subito. E’ una lampadina LED che si connette alla tua rete WiFi e che puoi comandare tramite app dallo smartphone.

Cosa distingue questo progetto dalle tante lampadine smart in commercio?

  • è open source
  • non necessita di altro hardware proprietario
  • pubblicherà (presto, hanno promesso) le API aperte
  • le lampadine potranno (presto, hanno promesso) essere gestite anche via web

Per adesso l’applicazione premette solo di regolare l’intensità, la temperatura e il colore della luce, che francamente non è molto. Diventerà interessante quando potrò associare l’accensione graduale alla sveglia o a un sensore a infrarossi, o quando potrò sincronizzare il colore con la musica, etc. etc. Tu che ci faresti?

La configurazione iniziale richiede di connettere una prima volta il telefono alla lampadina, in modo da connettere la lampadina alla rete WiFi indicando access point e password.

L’interfaccia Android (come quella per iPhone) al momento è molto semplice. Questa è quella per cambiare colore:

LIFXcolor

E questa è per il bianco:

LIFXwhite

Giudizio: promettente.

Fileserver di casa con Raspberry Pi: funziona!

Avevo connesso un disco esterno da 1TB (con alimentazione esterna) alla porta USB del router Netgear DGN2200v3 per usarlo come fileserver, ma sono rimasto deluso dalle prestazioni lentissime.

Image courtesy of Wikipedia
Image courtesy of Wikipedia

 

Ho pensato quindi di riprovare con il Raspberry Pi e devo dire che funziona assai meglio. Segnalo in proposito due guide molto dettagliate e ben fatte:

  • quella di Dario Caputo sulla installazione e configurazione del server Samba
  • quella di Massimiliano Maniscalco sulla installazione e configurazione di BitTorrent Transmission

Il mio disco conteneva già dei dati (che non volevo perdere) ed era formattato NTFS ma con errori, per cui il Raspberry Pi me lo montava in sola lettura. Dopo aver eseguito un chkdsk da Windows sono riuscito a rimontarlo correttamente.

Adesso mi tocca comprare un altro Raspberry.

How to wiretap the Cloud

Prima parte dell’ottimo  intervento di Caspar Bowden alla ORGCon2013 Conference (continua nella seconda, terza e quarta parte). Le conclusioni per noi non-americani non sono incoraggianti:

  • EU personal data is naked to FISAA, contrary to much Cloudwash White Paper propaganda
  • PATRIOT is bad, FISAA much worse for Cloud
  • Astonishingly, EU Commission DPAs, MS, MEPs, Didn’t know about FISAA1881a until 2012
  • No practical technical defences in sight