All Collections
IoT Projects Tutorials
Push data to a chipKIT Board with an LED Matrix
Push data to a chipKIT Board with an LED Matrix

Read a value from Ubidots cloud and display it using an LED Matrix

S
Written by Sergio M
Updated over a week ago

This project shows how to read an Ubidots variable using an HTTP GET request and the chipKIT Uno board.

This serves as an example of how data can be read from an embedded system using the short polling technique. There are other methods and protocols to talk to a remote device which can help you achieve real time push notifications; long polling, MQTT or CoAP. For more information about these methods, check out our article "Choosing the Right Protocol to Send Data to Remote Devices".

 

Materials

Wiring

To get started you'll only need five wires. Please keep in mind that an external power source will be needed if handling more than two (2) LED Matrix:

Coding

This is a modification of the LED Matrix code provided by JolliFactory. Please remember to put the corresponding TOKEN and Variable ID of your Ubidots account.

Also, refer to our chipKIT WiFi Shield example to download the required networking libraries so the code can compile.

 

#include <Wprogram.h>#include <Wire.h>#include <WiFiShieldOrPmodWiFi_G.h>                     #include <DNETcK.h>#include <DWIFIcK.h>#include <LedControl.h>//------------------------------End Libraries----------------------------------#define GREEN 0                          #define RED 1                            #define offREDoffGREEN 0#define offREDonGREEN 1#define onREDoffGREEN 2int MAXbrightnessCount = 0;int maxInShutdown=RED; // indicates which LED Matrix color is currently offint colorMode = '2';  // default color (1 = RED, 2 = GREEN, 3 = ORANGE, 4 = blank off)int lastcolorMode = '0'; int temp_colorMode = '2';    int brightnessLevel = '9';  // default brightness level (1 to 9)int SetbrightnessValue = (15 * (brightnessLevel-48))/9;  //Re-adjust values to meet MAX7219 Brightness Level range between 0 to 15int MAX72xxbrightnessValue = 0;int scrollDelay = 30;  // default scroll delay    boolean newMsg = false;boolean newCmd = false;boolean fadeInFlag = true;// You may change the pin assignments according to your requirements below// First set of 4 Bi-color LED Matricesint devices;int lc1_DataIn_Pin = 7;int lc1_CLK_Pin = 6;int lc1_Load_Pin = 5;int lc1_LEDMatrixQty = 4;  // No. of Bi-color LED Matrices daisy-chained//Create a new LedControl for first set of 4 Bi-color LED Matrices with 2 MAX7219 chips eachLedControl 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);// The character set courtesy of 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;//---------------------------End initialization Matrix-------------------------------------char * szIPServer = "industrial.api.ubidots.com";                            // server to connect tounsigned short portServer = 80;                                      // port serverconst char * szSsid = "Atom House Medellin";                         // SSIDconst char * szPassPhrase = "atommed2014";                           // passphrase#define WiFiConnectMacro() DWIFIcK::connect(szSsid, szPassPhrase, &status) String token="pSZJt9W7v5W3fpUsRYNKiDMgJ770NK";                       // your tokenString idvariable="53e262127625421973e7cdb5";                        // your variable IDunsigned tStart = 0;unsigned tWait = 5000;byte rgbRead[1024]; int cbRead = 0;char t[1024];String v = "  PEOPLE  ";                                              // concatenated phrasetypedef enum                                                          // States of the state machine{    NONE = 0,    CONNECT,    TCPCONNECT,    WRITE,    READ,    CLOSE,    DONE,} STATE;STATE state = CONNECT;TcpClient tcpClient;//--------------------------//**********************************************************************************************************************************************************void setup(){   Serial.begin (9600);  //we have already set the number of devices when we created the LedControl  devices=lc1.getDeviceCount();  //we have to init all devices in a loop  for(int address=0;address<devices;address++)   {    //The MAX72XX is in power-saving mode on startup, we have to do a WAKEUP call    lc1.shutdown(address,false);    // Set the brightness values (0 to 15)    lc1.setIntensity(address,MAX72xxbrightnessValue);    // and clear the display     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;    }    //**********************************************************************************************************************************************************    //Start of Serial available Check         //Change message via serial comm            //**********************************************************************************************************************************************************    //End of Serial available Check                curcharixsave2 = curcharix;    curcharbitsave2 = curcharbit;    for (i=7;i>=0;i=i-2) // Loop through our 4 Bi-color LED Matrices     {           //If ISR not used - just have the following instructions below to alternate shutdown of MAX7219 chips for RED and GREEN LEDs to prevent 'ghosting' display      altShutDown();             for (j=0;j<8;j++) // Set up rows on current display      {           byte outputbyte = 0;           curchar = msg[curcharix];        curcharixsave = curcharix;        curcharbitsave = curcharbit;            for (k=7;k>=0;k--) // Copy over data for 8 columns to current row and send it to current display  - scroll from right to left        {               byte currentcharbits;          // This byte is the bitmap of the current character for the current row          currentcharbits = Font8x5[((curchar-32)*8)+j];            if (currentcharbits & (1<<curcharbit))          outputbyte |= (1<<k);             // advance the current character bit of current character          curcharbit ++;           if (curcharbit > lentbl_S[curchar-32]) // we are past the end of this character, so advance.          {            curcharbit = 0;            curcharix += 1;              if (curcharix+1 > msgsize) curcharix=0;            curchar = msg[curcharix];          }        }        if (i<8)   //First Set of 4 x Bi-color LED Matrix (need 8 x MAX7219)        {             if (colorMode == '1') //Red          {               lc1.setRow(i-1, j, outputbyte);    //Even number devices - Red          }           else if (colorMode == '2') //Green          {               lc1.setRow(i, j, outputbyte);      //Odd number devices - Green          }          else if (colorMode == '3') //Orange          {               lc1.setRow(i-1, j, outputbyte);    //Even number devices - Red            lc1.setRow(i, j, outputbyte);      //Odd number devices - Green          }        }         if (j != 7) // if this is not the last row, roll back advancement, if it is, leave the counters advanced.        {          curcharix = curcharixsave;          curcharbit = curcharbitsave;        }       }    }     curcharix = curcharixsave2;    curcharbit = curcharbitsave2;      // Prepare new text message    if  (newMsg == true)    {      newMsg = false;      MAXbrightnessCount = 0;      MAX72xxbrightnessValue = 0;       if (newCmd == true)      {        newCmd = false;           if (temp_msg[5]=='*') // To use current text message        {            //do Nothing        }        else        {            for (j=0;j<temp_msgsize;j++) // Discard command part from message data            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];      // advance the current character bit of current character       curcharbit ++;        if (curcharbit > lentbl_S[curchar-32]) // we are past the end of this character, so advance.    {      curcharbit = 0;      curcharix += 1;      if (curcharix+1 > msgsize) curcharix=0;      {        curchar = msg[curcharix];      }    }         if (colorMode == '3') //ORANGE Display      delay(scrollDelay/10); //Scrolling in ORANGE is much slower than in RED and GREEN due to alternate shutdown of MAX 7219 chips required    else      delay(scrollDelay);    // Fade-in effect for new text message    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;  //shutdown false  byte col2 = 0x00;  //shutdown true  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);// specify register    putByte(col2);//((data & 0x01) * 256) + data >> 1); // put data    putByte(reg);// specify register    putByte(col2);//((data & 0x01) * 256) + data >> 1); // put data  }}else if (cmd == offREDonGREEN){  //for ( c =1; c<= maxInUse; c++) {  for ( c =1; c<= 4; c++) {    putByte(reg);// specify register    putByte(col);//((data & 0x01) * 256) + data >> 1); // put data    putByte(reg);// specify register    putByte(col2);//((data & 0x01) * 256) + data >> 1); // put data  }}else if (cmd == onREDoffGREEN){  //for ( c =1; c<= maxInUse; c++) {  for ( c =1; c<= 4; c++)   {    putByte(reg);// specify register    putByte(col2);//((data & 0x01) * 256) + data >> 1); // put data    putByte(reg);// specify register    putByte(col);//((data & 0x01) * 256) + data >> 1); // put data  }}    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); // get bitmask    digitalWrite(lc1_CLK_Pin, LOW); // tick    if (data_1 & mask) // choose bit    {    digitalWrite(lc1_DataIn_Pin, HIGH);// send 1    }    else    {    digitalWrite(lc1_DataIn_Pin, LOW); // send 0    }    digitalWrite(lc1_CLK_Pin, HIGH); // tock    --i; // move to lesser bit  }}//**********************************************************************************************************************************************************void altShutDown()    //Simple but not ideal method for alternate shutdown of MAX7219 chips for RED and GREEN LEDs if ISR Timer method is not employed {  if (colorMode == '3')    //Scrolling in ORANGE  {    lastcolorMode = '3';            if(maxInShutdown==RED){     maxAll(onREDoffGREEN);     maxInShutdown=GREEN;    }     else     {      maxAll(offREDonGREEN);     maxInShutdown=RED;    }  }  else if ((colorMode == '2') and (lastcolorMode != '2'))   //Scrolling in GREEN  {    lastcolorMode = '2';            maxAll(offREDonGREEN);    maxInShutdown=RED;  }  else if ((colorMode == '1') and (lastcolorMode != '1'))   //Scrolling in RED  {    lastcolorMode = '1';    maxAll(onREDoffGREEN);    maxInShutdown=GREEN;  }  else if (colorMode == '4')  //Blank Display  {    lastcolorMode = '4';    maxAll(offREDoffGREEN);           maxInShutdown=GREEN;  }} boolean get_value(String idvariable)//Send value to 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)//Handle the TCP connection{        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("Connection Created, ConID = ");                Serial.println(conID, DEC);                state = TCPCONNECT;            }            else            {                Serial.print("Unable to connection, status: ");                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("Got Connection");                  tcpClient.writeStream(rgbWriteStream, cbWriteStream);                  //Serial.println("Bytes Read Back:");                  state = READ;                  tStart = (unsigned) millis();                                   }                break;                    case READ:                    // see if we got anything to read            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;            }                    // give us some time to get everything echo'ed back                        break;                  case CLOSE:                        state = DONE;            break;        case DONE:                 state = CONNECT;                        tcpClient.close();            tcpClient.discardReadBuffer();            DNETcK::end();             DWIFIcK::disconnect(status);            rap = 0;            break;                            default:            break;    }        // keep the stack alive each pass through the 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;            }     }}


This article was originally published on Ubidots' Blog on September 17, 2015.

Did this answer your question?