Hola.
Comence enviando un par de variables para ver como funcionaba su plataforma, y si, primera vez que la utilizo. Lo que me di cuenta fue de lo siguiente:
En la sección de date me aparece información de 1969. No entiendo como es que aparece eso. De una parte del foro había leído que el mismo ubidots generaba un tiemstamp al momento en que un dato era insertado en la plataforma, pero tambien por ser la primera vez que utilizo una plataforma iot de este tipo, solo queria que alguien me ayudara a ver si estoy haciendo algo mal, o es una configuracion o si tengo que enviar la fecha para que se publique de forma correcta. El dispositivo con el que estoy trabajando es Electron de Particle, junto con un lector OBD-II de Carloop.
Mi codigo:
// This #include statement was automatically added by the Particle IDE.
#include <Ubidots.h>
/* Minimal Carloop example app
*
* Reads battery voltage, counts CAN messages and report GPS position to
* USB serial once per second
*
* Copyright 2016 Julien Vanier
*
* Distributed under the MIT license. See LICENSE.txt for more details.
*/
#include "application.h"
#include "carloop.h"
#define TOKEN "A1E-6yUjNDzgYgVnGUtvxSDneOXUFDCvp8" // Put here your Ubidots TOKEN
Ubidots ubidots(TOKEN);
void updateCanMessageCount();
void printValuesAtInterval();
void printValues();
void printFloat(float val, bool valid, int len, int prec);
void printDateTime(TinyGPSDate &d, TinyGPSTime &t);
int LED = D7;
//float Lat;
//float Lng;
Carloop<CarloopRevision2> carloop;
int canMessageCount = 0;
void setup()
{
Serial.begin(115200);
carloop.begin();
pinMode(LED, OUTPUT);
}
void loop()
{
if(ubidots.sendAll(TYPE_UDP)){
// Do something if values were sent properly
carloop.update();
updateCanMessageCount();
printValuesAtInterval();
//Serial.println("Values sent by the device");
}
//delay(5000);
}
void updateCanMessageCount()
{
CANMessage message;
while(carloop.can().receive(message))
{
canMessageCount++;
}
}
void printValuesAtInterval() {
static const unsigned long interval = 10000;
static unsigned long lastDisplay = 0;
if(millis() - lastDisplay < 10000)
{
return;
}
lastDisplay = millis();
printValues();
}
void printValues()
{
auto &gps = carloop.gps();
// Ensure that the GPS state doesn't change while printing
WITH_LOCK(gps) {
//Serial.printf("Battery voltage: %12f ", carloop.battery());
float bat = carloop.battery();
unsigned long t = ubidots.ntpUnixTime();
ubidots.add("BatV", bat, NULL, t);
//Serial.printf("CAN messages: %12d ", canMessageCount);
ubidots.add("CAN", canMessageCount);
Serial.print("GPS ");
printFloat(gps.location.lat(), gps.location.isValid(), 11, 6);
printFloat(gps.location.lng(), gps.location.isValid(), 1, 6);
float Lat = gps.location.lat();
float Lng = gps.location.lng();
ubidots.add("Lat",Lat);
ubidots.add("Lng",Lng);
printDateTime(gps.date, gps.time);
Serial.printf("%6d chars, %d checksum error", gps.charsProcessed(), gps.failedChecksum());
Serial.println("");
}
}
void printFloat(float val, bool valid, int len, int prec)
{
if(!valid)
{
while(len-- > 1)
{
Serial.print('*');
digitalWrite(LED,HIGH);
delay(100);
digitalWrite(LED,LOW);
}
Serial.print(' ');
digitalWrite(LED,HIGH);
delay(100);
digitalWrite(LED,LOW);
}
else
{
char format[10];
snprintf(format, sizeof(format), "%%%d.%df", len, prec);
Serial.printf(format, val);
digitalWrite(LED,HIGH);
}
}
void printDateTime(TinyGPSDate &d, TinyGPSTime &t)
{
if (!d.isValid())
{
Serial.print("********** ");
}
else
{
Serial.printf("%02d/%02d/%02d ", d.month(), d.day(), d.year());
}
if (!t.isValid())
{
Serial.print("******** ");
}
else
{
Serial.printf("%02d:%02d:%02d ", ((t.hour())-6), t.minute(), t.second());
}
}
En las variables que tengo problemas son en CAN, Lat y Lng. Las tres se publican en 1969.
Halp