Saltar al contenido
Menú
El blog de Kañaz
  • Inicio
  • Acerca de
  • Github
  • Youtube
  • LinkedIn
  • Twitter
El blog de Kañaz

Reto: Trabajando con Arduino y Azure

Publicada el 13 abril, 2015
Twittear

¿Tienes un Arduino con Shield de Ethernet? Entonces aquí tienes un buen reto para divertirte unos días (bueno, de hecho no lo sé, quizá ya hasta tienes un ejercicio similar resuelto).

El reto

Es sencillo, copia y pega este código en un proyecto de Arduino.

#include <SPI.h>
#include <Ethernet.h>
 
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0xEC, 0x6C };
EthernetClient client;
 
void setup() 
{
   Serial.begin(9600);
   if (Ethernet.begin(mac) == 0) 
   {
      Serial.println("Datos: Fallidos");
      for (;;) ;
   }
}
 
void loop()
{
  send_request();
  wait_response();
  read_response();
  end_request();
 
  delay(5000);
}
 
void send_request()
{
  Serial.println("Datos:Conectando");
 
  if (client.connect("internetofthingsservice.azure-mobile.net", 80)) 
  {
    client.println("GET /tables/FocosDomotica HTTP/1.1");
    client.println("Host: internetofthingsservice.azure-mobile.net");
    client.println("X-ZUMO-APPLICATION: NQUWuGZifGtkFdLSJuCjeFrBYhCXcB59");
    client.println("Accept: application/json");
    client.println();
 
    Serial.println("Datos: Enviados "); 
  } 
  else 
  {
    Serial.println("Conexion: Fallida");
  }
}
 
void wait_response()
{
  while (!client.available()) 
  {
    if (!client.connected()) 
    {
      return;
    }
  }
}
 
void read_response()
{
  bool print = true;
  while (client.available()) 
  {
    char c = client.read();
    Serial.print(c);
  }
}
 
void end_request()
{
  client.stop();
}

#include <SPI.h> #include <Ethernet.h> byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0xEC, 0x6C }; EthernetClient client; void setup() { Serial.begin(9600); if (Ethernet.begin(mac) == 0) { Serial.println("Datos: Fallidos"); for (;;) ; } } void loop() { send_request(); wait_response(); read_response(); end_request(); delay(5000); } void send_request() { Serial.println("Datos:Conectando"); if (client.connect("internetofthingsservice.azure-mobile.net", 80)) { client.println("GET /tables/FocosDomotica HTTP/1.1"); client.println("Host: internetofthingsservice.azure-mobile.net"); client.println("X-ZUMO-APPLICATION: NQUWuGZifGtkFdLSJuCjeFrBYhCXcB59"); client.println("Accept: application/json"); client.println(); Serial.println("Datos: Enviados "); } else { Serial.println("Conexion: Fallida"); } } void wait_response() { while (!client.available()) { if (!client.connected()) { return; } } } void read_response() { bool print = true; while (client.available()) { char c = client.read(); Serial.print(c); } } void end_request() { client.stop(); }

 

Una vez que lo hayas hecho, ejecuta el proyecto y notarás que el resultado es el siguiente en cada iteración (cinco segundos).

resultado
Como puedes ver el resultado realmente necesario es:

ResultadoJSON

Si deseas ver el resultado de una manera más cómoda puedes entrar a este sitio y ver el resultado al ingresar los siguientes parámetros.

ConsultaREST

Aquí los datos en texto plano:

Destino: internetofthingsservice.azure-mobile.net/tables/focosdomotica

Headers:

Host: internetofthingsservice.azure-mobile.net

X-ZUMO-APPLICATION: NQUWuGZifGtkFdLSJuCjeFrBYhCXcB59

Accept: application/json

 

Así que el reto consiste en lograr obtener esta cadena sin los headers que la acompañan. Es decir, de la respuesta obtenida debes eliminar toda la respuesta y mantener únicamente el resultado del JSON.

Se vale utilizar el lenguaje únicamente o bibliotecas de terceros para obtener el resultado pero cuidando al máximo el rendimiento del procesador.

El primero en responder se ganará una playera de C# y una memoria de 16 GB además de recibir el merecido crédito en cada demo que utilice esta funcionalidad.

¿Quién dice yo?

2 comentarios en «Reto: Trabajando con Arduino y Azure»

  1. oriol dice:
    18 noviembre, 2020 a las 1:35 pm

    Buenas Amin,

    Tengo un Arduino Mega 2560 con un ethernet shield, mi intencion es que publique datos en una device de iot hub en mi azure.
    Estoy barajando las opciones a tomar, la primera es usar el «client.prinln» como tu has echo en este post, intentando descubrir el como funciona el REST API de iothub…

    Como lo ves? me podrias orientar un poco porfavor?

    Saludos

    Responder
    1. Amin Espinoza dice:
      18 noviembre, 2020 a las 9:21 pm

      Oriol, desde el tiempo de publicación de este artículo las cosas han evolucionado muchísimo! Ahora, la comunicación vía REST puede ser una opción pero igualmente podrías hacerlo vía MQTT que consume muchos menos recursos (y eso en Arduino es importante) y además, hay mucha más documentación de esto. Para aprender a como enviar información vía Arduino a IoT Hub quizá lo mejor sea conocer como funciona el protocolo y después implementarlo en Arduino enviar vía Arduino a IoT hub de esta manera hará las cosas mucho más fáciles.

      Responder

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Busca en este sitio

MI perfil de Github

Github profile

Sígueme en Twitter

Seguir a @aminespinoza
©2023 El blog de Kañaz | Funciona con SuperbThemes y WordPress