Ir al contenido principal
Todas las coleccionesTutoriales de proyectos IoT
Enviar datos a una placa chipKIT con una matriz de LED
Enviar datos a una placa chipKIT con una matriz de LED

Leer un valor de la nube de Ubidots y mostrarlo utilizando una matriz de LED.

Sergio M avatar
Escrito por Sergio M
Actualizado hace más de 2 meses

Este proyecto muestra cómo leer una variable de Ubidots utilizando una solicitud HTTP GET y la placa chipKIT Uno.

Esto sirve como un ejemplo de cómo se pueden leer datos de un sistema embebido utilizando la técnica de sondeo corto. Existen otros métodos y protocolos para comunicarse con un dispositivo remoto que pueden ayudarte a lograr notificaciones push en tiempo real; sondeo largo, MQTT o CoAP. Para más información sobre estos métodos, consulta nuestro artículo "Elegir el Protocolo Correcto para Enviar Datos a Dispositivos Remotos".

Materiales

Cableado

Para comenzar, solo necesitarás cinco cables. Ten en cuenta que se necesitará una fuente de alimentación externa si manejas más de dos (2) matrices LED:

Codificación

Esta es una modificación del código de la matriz LED proporcionado por JolliFactory. Recuerda poner el TOKEN correspondiente y el ID de variable de tu cuenta de Ubidots.

Además, consulta nuestro ejemplo de chipKIT WiFi Shield para descargar las bibliotecas de red requeridas para que el código pueda compilar.

#include <Wprogram.h>#include <Wire.h>#include <WiFiShieldOrPmodWiFi_G.h>                     #include <DNETcK.h>#include <DWIFIcK.h>#include <LedControl.h>//------------------------------Fin de Bibliotecas----------------------------------#define GREEN 0                          #define RED 1                            #define offREDoffGREEN 0#define offREDonGREEN 1#define onREDoffGREEN 2int MAXbrightnessCount = 0;int maxInShutdown=RED; // indica qué color de la matriz LED está actualmente apagadoint colorMode = '2';  // color predeterminado (1 = ROJO, 2 = VERDE, 3 = NARANJA, 4 = apagado)int lastcolorMode = '0'; int temp_colorMode = '2';    int brightnessLevel = '9';  // nivel de brillo predeterminado (1 a 9)int SetbrightnessValue = (15 * (brightnessLevel-48))/9;  //Reajustar valores para cumplir con el rango de nivel de brillo MAX7219 entre 0 y 15int MAX72xxbrightnessValue = 0;int scrollDelay = 30;  // retraso de desplazamiento predeterminado    boolean newMsg = false;boolean newCmd = false;boolean fadeInFlag = true;// Puedes cambiar las asignaciones de pines según tus requisitos a continuación// Primer conjunto de 4 matrices LED bicolorint devices;int lc1_DataIn_Pin = 7;int lc1_CLK_Pin = 6;int lc1_Load_Pin = 5;int lc1_LEDMatrixQty = 4;  // No. de matrices LED bicolor en cadena//Crear un nuevo LedControl para el primer conjunto de 4 matrices LED bicolor con 2 chips MAX7219 cada unoLedControl lc1=LedControl(lc1_DataIn_Pin, lc1_CLK_Pin, lc1_Load_Pin, lc1_LEDMatrixQty * 2); char msg[1024];int msgsize = strlen(msg);char temp_msg[255];int temp_msgsize = strlen(temp_msg);// El conjunto de caracteres cortesía de cosmicvoid.byte Font8x5[104*8] ={0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00, 0x05, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0A, 0x1F, 0x0A, 0x1F, 0x0A, 0x0A, 0x00, 0x0E, 0x15, 0x05, 0x0E, 0x14, 0x15, 0x0E, 0x00, 0x13, 0x13, 0x08, 0x04, 0x02, 0x19, 0x19, 0x00, 0x06, 0x09, 0x05, 0x02, 0x15, 0x09, 0x16, 0x00, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x01, 0x01, 0x01, 0x02, 0x04, 0x00, 0x01, 0x02, 0x04, 0x04, 0x04, 0x02, 0x01, 0x00, 0x00, 0x0A, 0x15, 0x0E, 0x15, 0x0A, 0x00, 0x00, 0x00, 0x04, 0x04, 0x1F, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x10, 0x08, 0x04, 0x02, 0x01, 0x01, 0x00, 0x0E, 0x11, 0x19, 0x15, 0x13, 0x11, 0x0E, 0x00, 0x04, 0x06, 0x04, 0x04, 0x04, 0x04, 0x0E, 0x00, 0x0E, 0x11, 0x10, 0x0C, 0x02, 0x01, 0x1F, 0x00, 0x0E, 0x11, 0x10, 0x0C, 0x10, 0x11, 0x0E, 0x00, 0x08, 0x0C, 0x0A, 0x09, 0x1F, 0x08, 0x08, 0x00, 0x1F, 0x01, 0x01, 0x0E, 0x10, 0x11, 0x0E, 0x00, 0x0C, 0x02, 0x01, 0x0F, 0x11, 0x11, 0x0E, 0x00, 0x1F, 0x10, 0x08, 0x04, 0x02, 0x02, 0x02, 0x00, 0x0E, 0x11, 0x11, 0x0E, 0x11, 0x11, 0x0E, 0x00, 0x0E, 0x11, 0x11, 0x1E, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x02, 0x01, 0x08, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08, 0x04, 0x02, 0x01, 0x00, 0x0E, 0x11, 0x10, 0x08, 0x04, 0x00, 0x04, 0x00, 0x0E, 0x11, 0x1D, 0x15, 0x0D, 0x01, 0x1E, 0x00, 0x04, 0x0A, 0x11, 0x11, 0x1F, 0x11, 0x11, 0x00, 0x0F, 0x11, 0x11, 0x0F, 0x11, 0x11, 0x0F, 0x00, 0x0E, 0x11, 0x01, 0x01, 0x01, 0x11, 0x0E, 0x00, 0x07, 0x09, 0x11, 0x11, 0x11, 0x09, 0x07, 0x00, 0x1F, 0x01, 0x01, 0x0F, 0x01, 0x01, 0x1F, 0x00, 0x1F, 0x01, 0x01, 0x0F, 0x01, 0x01, 0x01, 0x00, 0x0E, 0x11, 0x01, 0x0D, 0x11, 0x19, 0x16, 0x00, 0x11, 0x11, 0x11, 0x1F, 0x11, 0x11, 0x11, 0x00, 0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x07, 0x00, 0x1C, 0x08, 0x08, 0x08, 0x08, 0x09, 0x06, 0x00, 0x11, 0x09, 0x05, 0x03, 0x05, 0x09, 0x11, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0F, 0x00, 0x11, 0x1B, 0x15, 0x15, 0x11, 0x11, 0x11, 0x00, 0x11, 0x13, 0x13, 0x15, 0x19, 0x19, 0x11, 0x00, 0x0E, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0E, 0x00, 0x0F, 0x11, 0x11, 0x0F, 0x01, 0x01, 0x01, 0x00, 0x0E, 0x11, 0x11, 0x11, 0x15, 0x09, 0x16, 0x00, 0x0F, 0x11, 0x11, 0x0F, 0x05, 0x09, 0x11, 0x00, 0x0E, 0x11, 0x01, 0x0E, 0x10, 0x11, 0x0E, 0x00, 0x1F, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0E, 0x00, 0x11, 0x11, 0x11, 0x11, 0x0A, 0x0A, 0x04, 0x00, 0x41, 0x41, 0x41, 0x49, 0x2A, 0x2A, 0x14, 0x00, 0x11, 0x11, 0x0A, 0x04, 0x0A, 0x11, 0x11, 0x00, 0x11, 0x11, 0x11, 0x0A, 0x04, 0x04, 0x04, 0x00, 0x1F, 0x10, 0x08, 0x04, 0x02, 0x01, 0x1F, 0x00, 0x07, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07, 0x00, 0x01, 0x01, 0x02, 0x04, 0x08, 0x10, 0x10, 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x00, 0x00, 0x04, 0x0A, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x08, 0x0E, 0x09, 0x0E, 0x00, 0x01, 0x01, 0x0D, 0x13, 0x11, 0x13, 0x0D, 0x00, 0x00, 0x00, 0x06, 0x09, 0x01, 0x09, 0x06, 0x00, 0x10, 0x10, 0x16, 0x19, 0x11, 0x19, 0x16, 0x00, 0x00, 0x00, 0x06, 0x09, 0x07, 0x01, 0x0E, 0x00, 0x04, 0x0A, 0x02, 0x07, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x06, 0x09, 0x09, 0x06, 0x08, 0x07, 0x01, 0x01, 0x0D, 0x13, 0x11, 0x11, 0x11, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x04, 0x00, 0x06, 0x04, 0x04, 0x04, 0x04, 0x03, 0x01, 0x01, 0x09, 0x05, 0x03, 0x05, 0x09, 0x00, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x15, 0x2B, 0x29, 0x29, 0x29, 0x00, 0x00, 0x00, 0x0D, 0x13, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x06, 0x09, 0x09, 0x09, 0x06, 0x00, 0x00, 0x00, 0x0D, 0x13, 0x13, 0x0D, 0x01, 0x01, 0x00, 0x00, 0x16, 0x19, 0x19, 0x16, 0x10, 0x10, 0x00, 0x00, 0x0D, 0x13, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x01, 0x06, 0x08, 0x07, 0x00, 0x00, 0x02, 0x07, 0x02, 0x02, 0x02, 0x04, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x19, 0x16, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x0A, 0x04, 0x00, 0x00, 0x00, 0x11, 0x11, 0x15, 0x15, 0x0A, 0x00, 0x00, 0x00, 0x11, 0x0A, 0x04, 0x0A, 0x11, 0x00, 0x00, 0x00, 0x09, 0x09, 0x09, 0x0E, 0x08, 0x06, 0x00, 0x00, 0x0F, 0x08, 0x06, 0x01, 0x0F, 0x00, 0x04, 0x02, 0x02, 0x01, 0x02, 0x02, 0x04, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x01, 0x02, 0x02, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x2A, 0x49, 0x49, 0x41, 0x22, 0x1C, 0x00, 0x1C, 0x22, 0x51, 0x49, 0x41, 0x22, 0x1C, 0x00, 0x1C, 0x22, 0x41, 0x79, 0x41, 0x22, 0x1C, 0x00, 0x1C, 0x22, 0x41, 0x49, 0x51, 0x22, 0x1C, 0x00, 0x1C, 0x22, 0x41, 0x49, 0x49, 0x2A, 0x1C, 0x00, 0x1C, 0x22, 0x41, 0x49, 0x45, 0x22, 0x1C, 0x00, 0x1C, 0x22, 0x41, 0x4F, 0x41, 0x22, 0x1C, 0x00, 0x1C, 0x22, 0x45, 0x49, 0x41, 0x22, 0x1C, 0x00};byte lentbl_S[104] ={ 2, 2, 3, 5, 5, 5, 5, 2,  3, 3, 5, 5, 2, 5, 1, 5,  5, 4, 5, 5, 5, 5, 5, 5,  5, 5, 1, 2, 4, 4, 4, 5,  5, 5, 5, 5, 5, 5, 5, 5,  5, 3, 5, 5, 4, 5, 5, 5,  5, 5, 5, 5, 5, 5, 5, 7,  5, 5, 5, 3, 5, 3, 5, 5,  2, 4, 5, 4, 5, 4, 4, 4,  5, 2, 3, 4, 2, 6, 5, 4,  5, 5, 5, 4, 3, 5, 5, 5,  5, 4, 4, 3, 2, 3, 0, 0,  7, 7, 7, 7, 7, 7, 7, 7};int curcharix = 0;int curcharbit = 0;int curcharixsave = 0;int curcharbitsave = 0;int curcharixsave2 = 0;int curcharbitsave2 = 0;char curchar;//---------------------------Fin de inicialización de la matriz-------------------------------------char * szIPServer = "industrial.api.ubidots.com";                            // servidor al que conectarseunsigned short portServer = 80;                                      // puerto del servidorconst char * szSsid = "Atom House Medellin";                         // SSIDconst char * szPassPhrase = "atommed2014";                           // frase de contraseña#define WiFiConnectMacro() DWIFIcK::connect(szSsid, szPassPhrase, &status) String token="pSZJt9W7v5W3fpUsRYNKiDMgJ770NK";                       // tu tokenString idvariable="53e262127625421973e7cdb5";                        // tu ID de variableunsigned tStart = 0;unsigned tWait = 5000;byte rgbRead[1024]; int cbRead = 0;char t[1024];String v = "  PEOPLE  ";                                              // frase concatenadatypedef enum                                                          // Estados de la máquina de estados{    NONE = 0,    CONNECT,    TCPCONNECT,    WRITE,    READ,    CLOSE,    DONE,} STATE;STATE state = CONNECT;TcpClient tcpClient;//--------------------------//**********************************************************************************************************************************************************void setup(){   Serial.begin (9600);  //ya hemos establecido el número de dispositivos cuando creamos el LedControl  devices=lc1.getDeviceCount();  //tenemos que inicializar todos los dispositivos en un bucle  for(int address=0;address<devices;address++)   {    //El MAX72XX está en modo de ahorro de energía al inicio, tenemos que hacer una llamada WAKEUP    lc1.shutdown(address,false);    // Establecer los valores de brillo (0 a 15)    lc1.setIntensity(address,MAX72xxbrightnessValue);    // y limpiar la pantalla     lc1.clearDisplay(address);  }}//**********************************************************************************************************************************************************void loop(){  int i,j,k,second=0;  char va[20];    get_value(idvariable);     check();     strcpy(va, v.c_str());    for(i=0;i<20;i++)    {              if ((va[i] > 32) or (va[i] < 122))       {       msg[i] = va[i];       }       else        {         break;       }           }                msgsize = strlen(msg);          while(1)  {      second++;    if (second>1000)    {      get_value(idvariable);           check();     strcpy(va, v.c_str());    for(i=0;i<20;i++)    {              if ((va[i] > 32) or (va[i] < 122))       {       msg[i] = va[i];       }       else        {         break;       }           }                msgsize = strlen(msg);    second=0;    }    //**********************************************************************************************************************************************************    //Inicio de la verificación de Serial disponible         //Cambiar mensaje a través de comunicación serial            //**********************************************************************************************************************************************************    //Fin de la verificación de Serial disponible                curcharixsave2 = curcharix;    curcharbitsave2 = curcharbit;    for (i=7;i>=0;i=i-2) // Bucle a través de nuestras 4 matrices LED bicolor     {           //Si no se usa ISR - solo tener las siguientes instrucciones a continuación para alternar el apagado de los chips MAX7219 para LEDs ROJOS y VERDES para evitar la visualización de 'fantasmas'      altShutDown();             for (j=0;j<8;j++) // Configurar filas en la pantalla actual      {           byte outputbyte = 0;           curchar = msg[curcharix];        curcharixsave = curcharix;        curcharbitsave = curcharbit;            for (k=7;k>=0;k--) // Copiar datos para 8 columnas a la fila actual y enviarlo a la pantalla actual - desplazarse de derecha a izquierda        {               byte currentcharbits;          // Este byte es el mapa de bits del carácter actual para la fila actual          currentcharbits = Font8x5[((curchar-32)*8)+j];            if (currentcharbits & (1<<curcharbit))          outputbyte |= (1<<k);             // avanzar el bit del carácter actual del carácter actual          curcharbit ++;           if (curcharbit > lentbl_S[curchar-32]) // hemos pasado el final de este carácter, así que avanza.          {            curcharbit = 0;            curcharix += 1;              if (curcharix+1 > msgsize) curcharix=0;            curchar = msg[curcharix];          }        }        if (i<8)   //Primer conjunto de 4 x matriz LED bicolor (necesita 8 x MAX7219)        {             if (colorMode == '1') //Rojo          {               lc1.setRow(i-1, j, outputbyte);    //Número par de dispositivos - Rojo          }           else if (colorMode == '2') //Verde          {               lc1.setRow(i, j, outputbyte);      //Número impar de dispositivos - Verde          }          else if (colorMode == '3') //Naranja          {               lc1.setRow(i-1, j, outputbyte);    //Número par de dispositivos - Rojo            lc1.setRow(i, j, outputbyte);      //Número impar de dispositivos - Verde          }        }         if (j != 7) // si esta no es la última fila, retroceder el avance, si lo es, dejar los contadores avanzados.        {          curcharix = curcharixsave;          curcharbit = curcharbitsave;        }       }    }     curcharix = curcharixsave2;    curcharbit = curcharbitsave2;      // Preparar nuevo mensaje de texto    if  (newMsg == true)    {      newMsg = false;      MAXbrightnessCount = 0;      MAX72xxbrightnessValue = 0;       if (newCmd == true)      {        newCmd = false;           if (temp_msg[5]=='*') // Para usar el mensaje de texto actual        {            //no hacer nada        }        else        {            for (j=0;j<temp_msgsize;j++) // Descartar la parte del comando de los datos del mensaje            temp_msg[j]=temp_msg[j+5];             temp_msgsize = strlen(temp_msg);                  for (j=0;j<temp_msgsize;j++)            msg[j]=temp_msg[j];             msgsize = strlen(temp_msg);           }      }      else      {           for (j=0;j<temp_msgsize;j++)          msg[j]=temp_msg[j];           msgsize = strlen(temp_msg);              }         colorMode = temp_colorMode;    }     curchar = msg[curcharix];      // avanzar el bit del carácter actual del carácter actual       curcharbit ++;        if (curcharbit > lentbl_S[curchar-32]) // hemos pasado el final de este carácter, así que avanza.    {      curcharbit = 0;      curcharix += 1;      if (curcharix+1 > msgsize) curcharix=0;      {        curchar = msg[curcharix];      }    }         if (colorMode == '3') //Visualización NARANJA      delay(scrollDelay/10); //El desplazamiento en NARANJA es mucho más lento que en ROJO y VERDE debido al apagado alterno de los chips MAX 7219 requerido    else      delay(scrollDelay);    // Efecto de desvanecimiento para el nuevo mensaje de texto    if (fadeInFlag == true)    {      if (MAXbrightnessCount < 6)      {        MAXbrightnessCount = MAXbrightnessCount+1;        for(int address=0;address<devices;address++)           lc1.setIntensity(address,MAX72xxbrightnessValue);        }      else if (MAX72xxbrightnessValue < SetbrightnessValue)      {        MAX72xxbrightnessValue = MAX72xxbrightnessValue+1;        if (MAX72xxbrightnessValue > SetbrightnessValue)        MAX72xxbrightnessValue = SetbrightnessValue;        for(int address=0;address<devices;address++)           lc1.setIntensity(address,MAX72xxbrightnessValue);        }    }  }}//**********************************************************************************************************************************************************  void maxAll(int cmd) {  byte reg = 0x0c;  //max7219_reg_shutdown  byte col = 0x01;  //apagado falso  byte col2 = 0x00;  //apagado verdadero  int c = 0;  digitalWrite(lc1_Load_Pin, LOW);  if (cmd == offREDoffGREEN){  //for ( c =1; c<= maxInUse; c++) {  for ( c =1; c<= 4; c++) {    putByte(reg);// especificar registro    putByte(col2);//((data & 0x01) * 256) + data >> 1); // poner datos    putByte(reg);// especificar registro    putByte(col2);//((data & 0x01) * 256) + data >> 1); // poner datos  }}else if (cmd == offREDonGREEN){  //for ( c =1; c<= maxInUse; c++) {  for ( c =1; c<= 4; c++) {    putByte(reg);// especificar registro    putByte(col);//((data & 0x01) * 256) + data >> 1); // poner datos    putByte(reg);// especificar registro    putByte(col2);//((data & 0x01) * 256) + data >> 1); // poner datos  }}else if (cmd == onREDoffGREEN){  //for ( c =1; c<= maxInUse; c++) {  for ( c =1; c<= 4; c++)   {    putByte(reg);// especificar registro    putByte(col2);//((data & 0x01) * 256) + data >> 1); // poner datos    putByte(reg);// especificar registro    putByte(col);//((data & 0x01) * 256) + data >> 1); // poner datos  }}    digitalWrite(lc1_Load_Pin, LOW);  digitalWrite(lc1_Load_Pin,HIGH);}  //**********************************************************************************************************************************************************void putByte(byte data_1) {  byte i = 8;  byte mask;  while(i > 0)  {    mask = 0x01 << (i - 1); // obtener máscara de bits    digitalWrite(lc1_CLK_Pin, LOW); // tick    if (data_1 & mask) // elegir bit    {    digitalWrite(lc1_DataIn_Pin, HIGH);// enviar 1    }    else    {    digitalWrite(lc1_DataIn_Pin, LOW); // enviar 0    }    digitalWrite(lc1_CLK_Pin, HIGH); // tock    --i; // mover a un bit menor  }}//**********************************************************************************************************************************************************void altShutDown()    //Método simple pero no ideal para el apagado alterno de los chips MAX7219 para LEDs ROJOS y VERDES si no se emplea el método de temporizador ISR {  if (colorMode == '3')    //Desplazamiento en NARANJA  {    lastcolorMode = '3';            if(maxInShutdown==RED){     maxAll(onREDoffGREEN);     maxInShutdown=GREEN;    }     else     {      maxAll(offREDonGREEN);     maxInShutdown=RED;    }  }  else if ((colorMode == '2') and (lastcolorMode != '2'))   //Desplazamiento en VERDE  {    lastcolorMode = '2';            maxAll(offREDonGREEN);    maxInShutdown=RED;  }  else if ((colorMode == '1') and (lastcolorMode != '1'))   //Desplazamiento en ROJO  {    lastcolorMode = '1';    maxAll(onREDoffGREEN);    maxInShutdown=GREEN;  }  else if (colorMode == '4')  //Pantalla en blanco  {    lastcolorMode = '4';    maxAll(offREDoffGREEN);            maxInShutdown=GREEN;  }} boolean get_value(String idvariable)//Enviar valor a Ubidots{  String message = "GET /api/v1.6/variables/"+idvariable+" HTTP/1.1\nX-Auth-Token: "+token+"\nHost: things.ubidots.com\n\n";  byte rgbWriteStream[message.length()]  ;  message.getBytes(rgbWriteStream,message.length() + 1);  int cbWriteStream = sizeof(rgbWriteStream);  state_machine(rgbWriteStream,cbWriteStream);  return true;}     boolean state_machine(byte rgbWriteStream[], int cbWriteStream)//Manejar la conexión TCP{        int conID = DWIFIcK::INVALID_CONNECTION_ID;    int rap = 1;    DNETcK::STATUS status;  while(rap>0)  {        switch(state)    {       case CONNECT:            if((conID = WiFiConnectMacro()) != DWIFIcK::INVALID_CONNECTION_ID)            {                Serial.print("Conexión creada, ConID = ");                Serial.println(conID, DEC);                state = TCPCONNECT;            }            else            {                Serial.print("No se pudo conectar, estado: ");                Serial.println(status, DEC);                state = CLOSE;                            }            break;       case TCPCONNECT:            Serial.print("H1");            DNETcK::begin();            Serial.print("H2");            tcpClient.connect(szIPServer, portServer);             Serial.print("H3");            state = WRITE;             break;       case WRITE:           Serial.print("H4");            if(tcpClient.isConnected())                {                            Serial.print("H5");                         //Serial.println("Conexión establecida");                  tcpClient.writeStream(rgbWriteStream, cbWriteStream);                  //Serial.println("Bytes leídos de vuelta:");                  state = READ;                  tStart = (unsigned) millis();                                   }                break;                    case READ:                    // ver si tenemos algo que leer            if((cbRead = tcpClient.available()) > 0)            {                cbRead = cbRead < sizeof(rgbRead) ? cbRead : sizeof(rgbRead);                cbRead = tcpClient.readStream(rgbRead, cbRead);                         for(int i=0; i < cbRead; i++)                 {                    t[i] = (char)rgbRead[i];                    //Serial.print(t[i]);                                    }                           }            else if( (((unsigned) millis()) - tStart) > tWait )            {                Serial.println("");                state = CLOSE;            }                    // darnos algo de tiempo para que todo se ecoe de vuelta                        break;                  case CLOSE:                        state = DONE;            break;        case DONE:                 state = CONNECT;                        tcpClient.close();            tcpClient.discardReadBuffer();            DNETcK::end();             DWIFIcK::disconnect(status);            rap = 0;            break;                            default:            break;    }        // mantener la pila viva en cada paso a través del loop()  }}void check(){    char TOKEN[9]={'"','v','a','l','u','e','"',':',' '};  int flag=0;  v = "  PEOPLE  ";  for(int i=0; i < 1000; i++)    {          if((TOKEN[flag]==t[i])&&(flag<9))            {              flag++;            }             else if(((t[i]>47)&&(t[i]<58)||(t[i]=='.')||(t[i]=='}'))&&(flag>8))            {                                 if(t[i]=='}')              {                    break;              }              else              {                v+=t[i];                temp_msg[i] = t[i];                msg[i] = t[i];                flag++;                               }            }            else            {              flag=0;            }     }}


Este artículo fue publicado originalmente en el Blog de Ubidots el 17 de septiembre de 2015.

¿Ha quedado contestada tu pregunta?