Linkit one http://www.seeedstudio.com/depot/LinkIt-ONE-p-2017.html

hola como puedo integrar esta placa y usar su gps para que me lo marque en el dasboard

Se puede programar en entorno Arduino, o lleva otro IDE diferente?

hola ,se programa igual que con el ide de arduino lo único que solo vale para la version 1.57 hay que cargarle la s librerías del SDK y listo el ide preparado ,la cuestión esque no se si se pueden representar la posición gps en la plataforma de thinger.io y si es asi como integrarlo .
gracias un saludo.

Hola! Pues me gustaría ver cómo es un sketch para conectar a la wifi con el código de la placa. Si han diseñado bien la librería, habrán hecho una especialización de la clase WifiClient que define Arduino, y sería compatible con Thinger.io con el ejemplo de la Wifi shield, por ejemplo.

Para sacar la posición, sí es posible crear un recurso que de la posición, y luego pintarlo en un widget de mapa. Por ejemplo, mientras tanto en un NodeMCU podrías definir un recurso para probar como:

thing["ubicacion"] >> [](pson& out){
   out["latitude"] = 4.245; // en el linkit habría que cambiarlo por la llamada de gps.getLatitude() o como sea.
   out["longitude"] = 5.444; // en el linkit habría que cambiarlo por la llamada de gps.Longitude() o como sea.
};

El nombre de los parámetros da un poco igual (aunque no deben llevar acentos ni espacios ni caracteres raros). Luego vas a un dashboard, y añades un Widget de tipo Map Location, seleccionas el dispositivo, el recurso “ubicacion”, y “unes” los parámetros de latitud y longitud, con los de tu recurso.

Ya me cuentas si consigues algo :wink:

https://halckemy.s3.amazonaws.com/uploads/document/file/102535/mediatekrx.txt

Bueno, he estado haciendo algunas pruebas para integrarlo, pero sin la placa es complicado probarlo. Al menos compila. Con suerte funcionará :slightly_smiling:

Algunas cosas: Esta placa ya es compatible con la versión de Arduino 1.6.5, que es la que uso yo para los ESP8266/NodeMCU. Te recomiendo esta versión para tener el library manager y también poder instalar las librerías de Thinger:

Por lo que haría falta tener la placa instalada en el 1.6.5, la librería de Thinger instalada, y habría que meter este fichero que te paso en la librería de Thinger.io que descarga el Arduino (Meterla en Documentos/Arduino/Libraries/thinger.io/src):

Luego he hecho un pequeño sketch que sacaría la información del GPS y lo expone en un Sketch (recuerda cambiar el user id, el id del dispositivo, las credenciales, y el SSID y contraseña)

#include <LTask.h>
#include <LWiFi.h>
#include <LWiFiClient.h>
#include <ThingerLinkItOne.h>
#include <LGPS.h>

ThingerLinkItOne thing("user_id", "device_id", "device_credential");

int hour = 0, minute = 0, second = 0, sat_count = 0;
double latitude= 0, longitude = 0;

void setup() {
  thing.add_wifi("SSID", "SSID_Password");
  LGPS.powerOn();

  delay(3000);
  
  thing["location"] >> [](pson& out){
    out["latitude"] = latitude;
    out["longitude"] = longitude;
  };

  thing["time"] >> [](pson& out){
    out["hour"] = hour;
    out["minute"] = minute;
    out["second"] = second;
  };

  thing["satellites"] >> outputValue(sat_count);
}

void loop() {
  thing.handle();

  // update gps state
  gpsSentenceInfoStruct info;
  LGPS.getData(&info);
  parseGPGGA((const char*)info.GPGGA);
}

static unsigned char getComma(unsigned char num,const char *str)
{
  unsigned char i,j = 0;
  int len=strlen(str);
  for(i = 0;i < len;i ++)
  {
     if(str[i] == ',')
      j++;
     if(j == num)
      return i + 1; 
  }
  return 0; 
}

static double getDoubleNumber(const char *s)
{
  char buf[10];
  unsigned char i;
  double rev;
  
  i=getComma(1, s);
  i = i - 1;
  strncpy(buf, s, i);
  buf[i] = 0;
  rev=atof(buf);
  return rev; 
}

static double getIntNumber(const char *s)
{
  char buf[10];
  unsigned char i;
  double rev;
  
  i=getComma(1, s);
  i = i - 1;
  strncpy(buf, s, i);
  buf[i] = 0;
  rev=atoi(buf);
  return rev; 
}

void parseGPGGA(const char* GPGGAstr)
{
  if(GPGGAstr[0] != '$') return;
  int tmp;
  tmp = getComma(1, GPGGAstr);
  hour     = (GPGGAstr[tmp + 0] - '0') * 10 + (GPGGAstr[tmp + 1] - '0');
  minute   = (GPGGAstr[tmp + 2] - '0') * 10 + (GPGGAstr[tmp + 3] - '0');
  second    = (GPGGAstr[tmp + 4] - '0') * 10 + (GPGGAstr[tmp + 5] - '0');
  
  tmp = getComma(2, GPGGAstr);
  latitude = getDoubleNumber(&GPGGAstr[tmp]);
  tmp = getComma(4, GPGGAstr);
  longitude = getDoubleNumber(&GPGGAstr[tmp]);
 
  tmp = getComma(7, GPGGAstr);
  sat_count = getIntNumber(&GPGGAstr[tmp]);
}

Si funciona o hace algo vamos viendo para incluir el soporte de la placa en la librería, y dejar algún ejemplo como este :wink:

Ya me cuentas si consigues algo!!

hola creo que me complila pero me salen estos errores ,como estoy como acabo de actualizar a w10 no se si hay algo que la esta cagando .

gpslinkitone.ino: In function ‘void setup()’:
gpslinkitone.ino:21:3: warning: lambda expressions only available with -std=c++11 or -std=gnu++11 [enabled by default]
gpslinkitone.ino:27:3: warning: lambda expressions only available with -std=c++11 or -std=gnu++11 [enabled by default]
In file included from C:\Users\ardum\Documents\Arduino\libraries\thinger.io\src/ThingerLinkItOne.h:27:0,
from gpslinkitone.ino:4:
C:\Users\ardum\Documents\Arduino\libraries\thinger.io\src/ThingerClient.h:273:56: warning: lambda expressions only available with -std=c++11 or -std=gnu++11 [enabled by default]
#define outputValue(value) [](pson& out){ out = value; }
^
gpslinkitone.ino:29:26: note: in expansion of macro 'outputValue’
C:\Users\ardum\AppData\Roaming\Arduino15\packages\LinkIt\hardware\arm\1.1.17\libraries\LWiFi\LWiFi.cpp: In constructor ‘LWiFiLoginInfo::LWiFiLoginInfo()’:
C:\Users\ardum\AppData\Roaming\Arduino15\packages\LinkIt\hardware\arm\1.1.17\libraries\LWiFi\LWiFi.cpp:24:18: warning: passing NULL to non-pointer argument 1 of ‘String::String(int, unsigned char)’ [-Wconversion-null]
m_password(NULL)
^

C:\Program Files (x86)\Arduino>C:\Users\ardum\AppData\Roaming\Arduino15\packages\LinkIt\tools\linkit_tools\1.1.17\PackTag.exe C:\Users\ardum\AppData\Local\Temp\build3088682989604937766.tmp/gpslinkitone.cpp.elf C:\Users\ardum\AppData\Local\Temp\build3088682989604937766.tmp/gpslinkitone.cpp.vxp
Multiple libraries were found for "ThingerLinkItOne.h"
Used: C:\Users\ardum\Documents\Arduino\libraries\thinger.io

Pero son warnings . no? Compilar compila… la has subido para probar?

si ha subido empiezo a realizar pruebas haber que pasa ,hay esta conectad ahora hay que ver como se hace para que me lo pinte en un mapa ,muchas gracas por tu ayuda

Pues si ha conectado, la parte difícil esta hecha! Ahora comprobar en la Api del dispositivo que se leen bien los valores, y luego añadir en un dashboard un widget de mapa enlazado con tu dispositivo. Eso ya es cuestión de 4 clicks :slight_smile:

hola tengo un error en la librería del lgps esta en rojo y por eso creo que no sube los datos porque la librería esta mal cargada

Qué está en rojo? un led del GPS? será que no tiene fix? Si me das más detalles quizá te pueda echar una mano…

no lo que esta en rojo es la librería de lgps cuando compilo el programa ,la librería donde dice include lgps pues esta enrojo por lo que veo que esque no esta en el archivo de las librerías y o consigo como cargarlo dentro ,alfinal voy a tener que pasarme al w7 y empezar de nuevo.

una pregunta lleva todo el dia conectado y me dice que lleva unos 6000 bytes de datos como crees que se comportara en un sistema m2m con una tarjeta de 100 megas al mes seria suficiente o necesitaría mas es por ir preparando el tema ,por cierto esto esta por el puerto 80 con lo que no tendría que habriri purtos ni hacer ningún túnel?,salu2

Yo seguí las instrucciones de la siguiente página web para el Arduino 1.6.5, y al instalar la placa ya tenía todas las librerías instaladas, de hecho puedo compilar bien el código con el GPS. No creo que sea problema de Windows 10 o 7…

http://labs.mediatek.com/site/global/developer_tools/mediatek_linkit/get-started/windows_os_stream/install/index.gsp

Pues los datos depende de lo que interactúes con el dispositivo… En principio con 100MB tienes muchísimo más que de sobra para cualquier aplicación de IoT. Salvo que demande muchos datos…

Ah! se me olvidaba! En este caso si quieres interactuar con los dispositivos no tienes que abrir puertos ni abrir túneles. Puedes hacer las peticiones HTTP al servidor directamente… tal y como hace la consola (es un cliente en AngularJS), o la app móvil.

esto es el error que me da

gpslinkitone.ino: In function ‘void setup()’:
gpslinkitone.ino:21:3: warning: lambda expressions only available with -std=c++11 or -std=gnu++11 [enabled by default]
gpslinkitone.ino:27:3: warning: lambda expressions only available with -std=c++11 or -std=gnu++11 [enabled by default]
In file included from C:\Users\ardum\Documents\Arduino\libraries\thinger.io\src/ThingerLinkItOne.h:27:0,
from gpslinkitone.ino:4:
C:\Users\ardum\Documents\Arduino\libraries\thinger.io\src/ThingerClient.h:273:56: warning: lambda expressions only available with -std=c++11 or -std=gnu++11 [enabled by default]
#define outputValue(value) [](pson& out){ out = value; }
^
gpslinkitone.ino:29:26: note: in expansion of macro 'outputValue’
C:\Users\ardum\AppData\Roaming\Arduino15\packages\LinkIt\hardware\arm\1.1.14\libraries\LWiFi\LWiFi.cpp: In constructor ‘LWiFiLoginInfo::LWiFiLoginInfo()’:
C:\Users\ardum\AppData\Roaming\Arduino15\packages\LinkIt\hardware\arm\1.1.14\libraries\LWiFi\LWiFi.cpp:24:18: warning: passing NULL to non-pointer argument 1 of ‘String::String(int, unsigned char)’ [-Wconversion-null]
m_password(NULL)
^

Buenas, pero eso es lo que ya te daba el otro día, y no son errores, son warnings que en este caso se pueden omitir. Está diciendo que se están utilizando algunas funciones de c++11 y no se le pasa el flag al compilador, pero que lo tiene habilitado por defecto.

Vamos a concretar… el código compila y se sube. La placa se conecta a thinger. Puedes ver la API de la placa en thinger, y por lo que entiendo, los valores de GPS salen siempre a 0?. Si esto es así no va a ser problema de compilación, y debe ser algo del código del GPS que no esté funcionando bien y que habría que depurar.

bueno pues entonces en cuanto saque algo de tiempo me pongo en ello ,esta siendo una semana un poco complicada ,sabes para que me viene muy bien para saber mi ip publica y asi conectarme a l domuino de mi casa .bueno poco a poco hay que ir practicando.