giovedì 15 dicembre 2016

ThingSpeak con Particle Electron

Per pubblicare i dati di Particle Electron puo' essere utile il servizio Thingspeak

E' possibile registrarsi con un profilo gratuito per le prove.

Esempio di pubblicazione dati ThingSpeak

Per prima cosa si deve registrare il proprio canale a cui sara' associata una API Key per la scrittura dei dati





in seguito si devono impostare le variabili da visualizzare nei grafici




per utilizzare ThingSpeak nel firmware si deve modificare il programma (vedi righe evidenziate in giallo)  importando la libreria, impostando poi il proprio numero di canale e la WriteAPIKey, inizializzare il client e poi pubblicare i valori (le variabili non hanno un nome ma sono indicate con un numero progressivo nello stesso ordine con cui sono state configurate nella schermata web)

------------------------------------
#include "cellular_hal.h"
#include "ThingSpeak/ThingSpeak.h"

STARTUP(cellular_credentials_set("ibox.tim.it", "", "", NULL));

int status;
int counter = 0;
double batteria = 0.0;
int sleepInterval = 10; //Specify minutes between each reading sent

int analogPin0 = A0;
double mm = 0.0;

/* Thingspeak */
TCPClient client;
unsigned long myChannelNumber = 203125;
const char * myWriteAPIKey = "4MHFO3D4XXXXXXXX";

void fuel()
{
    FuelGauge fuel;
    batteria = static_cast<double>(fuel.getSoC());
    mm = analogRead(analogPin0);
}

void connect_status()
{
        RGB.control(false);
        Cellular.on();
        Cellular.connect();
        delay(10000);
        Particle.connect();
        //waitUntil(Particle.connected);
        delay(20000);
        Particle.connect();
        while(status < 3)//send one reading
        {
            if(Cellular.ready() && Particle.connected() == true)
                {
                    delay(10000);
                    fuel();
                    ThingSpeak.setField(1, (float)batteria);
                    ThingSpeak.setField(2, (float)mm);

                    ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);

                    if(Particle.publish("batteria", "batteria") == true)
                    {
                        delay(10000);
                        status++;
                    }
                    else if(Particle.publish("batteria", "batteria") == false)
                    { 
                        Cellular.on();
                        Cellular.connect();
                        delay(20000);
                        Particle.connect();
                        status=status -1;
                        delay(20000);
                    }
                }
            else
            {
                Cellular.on();
                Cellular.connect();
                delay(10000);
                Particle.connect();
                status=0;
                delay(10000);
            }
        }
        
}

void setup() {
    Time.zone(+1);
    RGB.control(false);
    Particle.variable("batteria", &batteria, DOUBLE);
    ThingSpeak.begin(client);

}


void loop() {
RGB.control(false);


if(counter == 0)
{
    delay(5000);
    fuel();
    Particle.publish("batteria", "batteria");
    delay(5000);
    counter =1;
  
}

System.sleep(D0, RISING, sleepInterval * 60); //Puts device in stop mode 

delay(1500);

status=0;

connect_status();

}