miércoles, 28 de septiembre de 2016

[Arduino 18] TIC/Picaro (Arduino Leonarod UNO) + Wifibee (ESP8266) +Ubidots

En este tutorial mostraré como enviar el valor de una variable a Ubidots usando una tarjeta TIC (Compatible con arduino Leonardo) y también con un Arduino Pícaro (Arduino UNO).

¿Que es ubidots?

Para quienes no saben ni conocen, Ubidots es un servicio en la nube que permite almacenar y analizar información de sensores en tiempo real. Se pueden crear aplicaciones para el internet de las cosas sin necesidad de tener conocimientos en programación web o bases de datos. Ubidots cuenta cuenta con bases de datos, desarrollo web/móvil, diseño de gráficos, APIs, se pueden enviar datos vía wifi, Blueetooth, Zigbee  o red celular y ademas se pueden integrar sensores y microcontroladores.

Como enviar datos a Ubidots

Veremos dos formas de enviar datos, primero utilizaremos la TIC basada en Arduino Leonardo y luego usaremos Arduino Picaro basada en Arduino UNO. Es importante tener en cuenta que se deben crear una cuenta primero que nada y crear una variable en Ubidots y su respectivo widget. Con esto podremos cambia

Enviar datos a Ubidots con TIC (Arduino Leonardo) + WifiBee

Materiales 1
  • TIC (Arduino Leonardo)
  • WifiBee Flasheada para usar con comandos AT a 9600bps (Puedes ver el tutorial como flashear tu Wifibee)
  • Cable USB mini B para TIC
  • Sensor analógico cualquiera
Conexiones 1
Solo se debe poner la WifiBee en la dirección correcta con la tarjeta TIC
Si es un arduino leonardo se debe conectar como lo se realiza en la conexion  Arduino UNO + WifiBee (ESP8266)

Código 1 (TIC+Wifibee+Ubidots)

El código que hay que cargar a la TIC o Arduino Leonardo es el siguiente, antes de cargarlo a su tarjeta debe estar seleccionado el puerto COM y la placa "Arduino Leonardo"


#define SSID "SebaElectronic"
#define PASS "LABs"
#define TOKEN "Token"    //<--Reemplazar con su TOken de ubidots (NO usar el API key)
#define ID "Variable ID" //<--Reemplazar con su variabale ID
int sensorPin = A5;      //<--Conectar el sensor en el pin análogo 5
int sensorValue = 0;
int len=300;
int len2;

void setup() {
  Serial.begin(9600);   //Usb Leonardo
  Serial1.begin(9600);  //Pines Tx/Rx Arduino Leonardo

  delay(3000);
  //preconfig();
  preconfig();
}

void loop() {
  sensorValue = analogRead(sensorPin);
  conexiontcp();
  delay(1000);
}




void preconfig() {
  //-----------Set Up------------------------
  Serial1.println("AT");                         //para comunicar con tajreta usar   Serial.write();
  delay(2000);
  Serial1.println("AT+RST");
  delay(2000);
  Serial1.println("AT+GMR");
  delay(2000);
  Serial1.println("AT+CWMODE=3");
  delay(2000);
  //------------Conexion a wifi---------------
  String cmd = "AT+CWJAP=\"";
  cmd += SSID;
  cmd += "\",\"";
  cmd += PASS;
  cmd += "\"";
  Serial1.println(cmd);
  delay(10000);
  //------------------------------------------
  Serial1.println("AT+CIPMODE=1");
  delay(2000);
  Serial1.println("AT+CIPMUX=0");
  delay(2000);
}




void conexiontcp() {
  //------------Conexion TCP/IP--------------
  String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += "things.ubidots.com";
  cmd += "\",8080";
  Serial1.println(cmd);
  delay(1500);  
  
  //---------Algoritmo contador-------
    
    //---Medimos el Content-Length:-----
    String SensorVal =String (sensorValue);
    cmd = "xxxxxxxxxx";
    len2 = SensorVal.length() +cmd.length();

    //---Medimos el largo del mensaje Total     
    cmd = "POST /api/v1.6/variables/";
    String cmd1 = ID;
    String cmd2 = "/values HTTP/1.1";
    String cmd3 = "Host: things.ubidots.com";
    String cmd4 = "User-Agent: Arduino-ESP8266/1.0";
    String cmd5 = "X-Auth-Token: ";
    String cmd6 = TOKEN;
    String cmd7 = "Content-Type: application/json";
    String cmd8 = "Content-Length: ";
    String cmd9 = String (len2);
    String cmd10 = "+++++++++++++++++++++++++++++";           //hacer cuadrar el mensaje (NO MODIFICAR)
    len = cmd.length() + cmd1.length() + cmd2.length() + cmd3.length() + cmd4.length() + cmd5.length() + cmd6.length() + cmd7.length() + cmd8.length() + cmd9.length() + cmd10.length();
    Serial1.println(len);
    
  //------Envio de informacion a Ubidots---------
  Serial1.print("AT+CIPSEND=");
  Serial1.println (len);                             //cambiar "241" por len
  delay(1500);

  Serial1.print ("POST /api/v1.6/variables/");
  Serial1.print (ID);
  Serial1.println ("/values HTTP/1.1");
  delay(80);
  Serial1.println ("Host: things.ubidots.com");
  delay(80);
  Serial1.println ("User-Agent: Arduino-ESP8266/1.0");
  delay(80);
  Serial1.print ("X-Auth-Token: ");
  Serial1.println (TOKEN);
  delay(80);
  Serial1.println ("Content-Type: application/json");
  delay(80);  
  Serial1.print ("Content-Length: ");
  Serial1.println (len2);                              //longutud de {"value":<variable>}
  delay(80);
  Serial1.println ();
  delay(80);
  cmd = "{\"value\":";
  cmd += sensorValue;                                  
  cmd += "}";
  Serial1.println (cmd);
  delay(80);
  Serial1.println ();
  delay(80);
  Serial1.println ("+++");
  delay(80);
  Serial1.println("+++");
  Serial1.println("+++");
  Serial1.println("---------------------------------------");
}

---------------------------------------------------------------------------------------------------------

Enviar datos a Ubidots con Arduino UNO + WifiBee

Materiales 2
  • Arduino Picaro (Arduino UNO)
  • WifiBee Flasheada para usar con comandos AT a 9600bps (Puedes ver el tutorial como flashear tu Wifibee)
  • Cable USB para Arduino UNO
  • Sensor analogico cualquiera
Conexiones 2
Conexiones Arduino UNO + WifiBee (ESP8266)
  • Tx (1) de Arduino a Rx de la WifiBee
  • Rx (0) de Arduino a Tx de la WifiBee (Al programar cuando se cargue el Skecth del Arduino IDE no debe estar conectado este pin)
  • Pin 3,3V de arduino UNO a Vcc de Wifibee (Si conectan mal aqui pueden quemar la WifiBee)
  • Gnd de Arduino a Gnd de WifiBee (ESP8266)

Código 2 (Picaro+Wifibee+Ubidots)

El código que hay que cargar a Arduino es el siguiente, antes de cargarlo a su tarjeta debe estar seleccionado el puerto COM y la placa "Arduino UNO"

#define SSID "SebaLabs"
#define PASS "Electronic"
#define TOKEN "token"    //<--Reemplazar con su TOken de ubidots (NO usar el API key)
#define ID "Variable ID" //<--Reemplazar con su variabale ID
int sensorPin = A5;      //<--Conectar el sensor en el pin análogo 5
int sensorValue = 0;
int len=300;
int len2;

void setup() {
  Serial.begin(9600);
  delay(3000);
  preconfig();
}

void loop() {
  sensorValue = analogRead(sensorPin);
  conexiontcp();
  delay(1000);
}




void preconfig() {
  //-----------Set Up------------------------
  Serial.println("AT");                         
  delay(2000);
  Serial.println("AT+RST");
  delay(2000);
  Serial.println("AT+GMR");
  delay(2000);
  Serial.println("AT+CWMODE=3");
  delay(2000);
  //------------Conexion a wifi---------------
  String cmd = "AT+CWJAP=\"";
  cmd += SSID;
  cmd += "\",\"";
  cmd += PASS;
  cmd += "\"";
  Serial.println(cmd);
  delay(10000);
  //------------------------------------------
  Serial.println("AT+CIPMODE=1");
  delay(2000);
  Serial.println("AT+CIPMUX=0");
  delay(2000);
}




void conexiontcp() {
  //------------Conexion TCP/IP--------------
  String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += "things.ubidots.com";
  cmd += "\",8080";
  Serial.println(cmd);
  delay(1500);  
  
  //---------Algoritmo contador-------
    
    //---Medimos el Content-Length:-----
    String SensorVal =String (sensorValue);
    cmd = "xxxxxxxxxx";
    len2 = SensorVal.length() +cmd.length();

    //---Medimos el largo del mensaje Total     
    cmd = "POST /api/v1.6/variables/";
    String cmd1 = ID;
    String cmd2 = "/values HTTP/1.1";
    String cmd3 = "Host: things.ubidots.com";
    String cmd4 = "User-Agent: Arduino-ESP8266/1.0";
    String cmd5 = "X-Auth-Token: ";
    String cmd6 = TOKEN;
    String cmd7 = "Content-Type: application/json";
    String cmd8 = "Content-Length: ";
    String cmd9 = String (len2);
    String cmd10 = "+++++++++++++++++++++++++++++";           //hacer cuadrar el mensaje (NO MODIFICAR)
    len = cmd.length() + cmd1.length() + cmd2.length() + cmd3.length() + cmd4.length() + cmd5.length() + cmd6.length() + cmd7.length() + cmd8.length() + cmd9.length() + cmd10.length();
    Serial.println(len);
    
  //------Envio de informacion a Ubidots---------
  Serial.print("AT+CIPSEND=");
  Serial.println (len);                           
  delay(1500);

  Serial.print ("POST /api/v1.6/variables/");
  Serial.print (ID);
  Serial.println ("/values HTTP/1.1");
  delay(80);
  Serial.println ("Host: things.ubidots.com");
  delay(80);
  Serial.println ("User-Agent: Arduino-ESP8266/1.0");
  delay(80);
  Serial.print ("X-Auth-Token: ");
  Serial.println (TOKEN);
  delay(80);
  Serial.println ("Content-Type: application/json");
  delay(80);  
  Serial.print ("Content-Length: ");
  Serial.println (len2);                              
  delay(80);
  Serial.println ();
  delay(80);
  cmd = "{\"value\":";
  cmd += sensorValue;                                  
  cmd += "}";
  Serial.println (cmd);
  delay(80);
  Serial.println ();
  delay(80);
  Serial.println ("+++");
  delay(80);
  Serial.println("+++");
  Serial.println("+++");
  Serial.println("---------------------------------------");
}

-------------------------------------------------------------------------------------------

3 comentarios: