lunedì 16 novembre 2015

Blynk : controllo remoto in 5 minuti

Dopo aver provato (ed apprezzato) il cloud di Photon mi sono chiesto se non esisteva qualcosa di simile anche per Arduino. Su indicazione di un amico sono ricaduto su Blynk, un sistema che non permette di programmare i dispositivi ma pubblica in interagisce in modo molto semplice con una grande quantita' di microcontrollori e non (Arduino, Raspberry, Photon,ESP8266 ed altri) pubblicando i dati direttamente su una applicazione mobile completamente configurabile

La prima prova e' stata effettuata con una Arduino Uno con Ethernet Shield originale Arduino collegata via cavo Ethernet per l'accensione da remoto (da applicazione Android) di un led e la lettura, sempre da remoto del valore di un canale analogico variato mediante un potenziometro



Letteralmente in 5 minuti e' stato possibile, aggiungendo due widget su Android e caricando uno sketch generico su Arduino (quello di esempio controlla in modo automatico tutti input/output analogici e digitali di Arduino) conseguire lo scopo come da video

Vediamo se e' possibile controllare la Photon e l'accelerometro visto in precedenza da Blynk

Per prima cosa sulla applicazione Android si deve creare un nuovo progetto indicando l'hardware (Particle Photon ed annotandosi l'Auth Token od inviandoselo per mail)


In seguito si progetta l'interfaccia.Invece di usare dei Gauge (come nel caso precedente via Web) ho impiegato il Graph che mantiene anche un minimo di storico della misure, un grafico per ogni asse dell'accelerometro


A questo punto si configura ogni grafico. Visto che voglio mostrare dei dati elaborati e non il valore di una porta, e' stato impostato un Virtual Pin con un range tra -3 e + 3 (g) e refresh ogni secondo (non passando via Web il refresh puo' anche essere piu' veloce)



Fatto cio' si passa alla programmazione della Photon che si discosta poco dall'esempio base se non per l'uso di 3 Virtual Pin che sono assocciati all'interfaccia utente. Nello sketch si deve copiare l'access token

----------------------------------------------------------------
#include "blynk/BlynkSimpleParticle.h"

char auth[] = "TOKEN";
int analogPin0 = A0;
int analogPin1 = A1;
int analogPin2 = A2;
double volts_x = 0.0;
double volts_y = 0.0;
double volts_z = 0.0;


void setup()
{
    Serial.begin(9600);
    delay(5000); 
    Blynk.begin(auth);
}

void loop()
{
    Blynk.run();
    volts_x = analogRead(analogPin0);
    volts_y = analogRead(analogPin1);
    volts_z = analogRead(analogPin2);
    volts_x = volts_x*3.3/4096.0;
    volts_y = volts_y*3.3/4096.0;
    volts_z = volts_z*3.3/4096.0;
    volts_x = (volts_x-1.64)/0.33;
    volts_y = (volts_y-1.64)/0.33;
    volts_z = (volts_z-1.64)/0.33;
    Blynk.virtualWrite(0,volts_x);
    Blynk.virtualWrite(1,volts_y);
    Blynk.virtualWrite(2,volts_z);
}
----------------------------------------------------------------

Premendo il pulsante Play in alto a destra si manda in esecuzione l'acquisizione dei dati (il tasto diventa un rettangolo a simboleggiare un comando di stop)



Il progetto puo' essere inviato anche ad altri colleghi con la funzione di share

La cosa interessante e' che non e' necessario legarsi mani e piedi ad un sistema di cui non si ha il controllo (per esempio se metto su una struttura complessa e domani blynk chiude o cambia politica cosa succede??) perche' e' possibile creare il proprio server mediante una applicazione java che puo' essere installata sulla propria macchina