Tag Archives: HTTP

Introducción al ESP8266

31 May , 2017,
Jose Nunez
, , , , ,
one comments

Aquí resumo algunas cosas que he ido descubriendo del ESP8266 esta semana:

#1 – El ESP8266 viene programado de manera nativa con un firmware que responde a comandos AT para realizar conexiones y comunicación WiFi. Una referencia útil al set de comandos se puede encontrar acá.

#2 – El ESP8266 puede ser programado mediante el IDE de ARDUINO. Para esto es necesario instalar la definición de placa usando la opción de Tools > Board Manager; pero antes de esto es necesario configurar la siguiente URL para definición de tarjetas adicionales usando la opción File > Preferences > Additional Boards Manager URLs.

URL:  http://arduino.esp8266.com/stable/package_esp8266com_index.json

Es necesario cerrar el IDE y volverlo a cargar para poder utilizar el board que aparece en la lista abajo como “Generic ESP8266 Module“. (!) Importante: Una vez re-programado el módulo se pierde el firmware que habilita los comandos AT. Para re-habilitarlos será necesario seguir alguno de los procedimientos disponibles para cargar el firmware

#3 – Se puede conectar el módulo directamente a la PC usando un convertidor USB-Serial FOCA 2.2 con las siguientes conexiones; pero antes se debe configurar el FOCA 2.2 para operar a 3.3V, caso contrario se daña el ESP8266:

esp8266_pinoutFOCAV2.2        ESP8266
   VCCIO -----> VCC (3.3V)
     TXD -----> RXD
     RXD <----- TXD
     GND <----- GND
   VCCIO -----> CH_PD

 Opcionalmente se enciende el dispositivo con el GPIO0 conectado a tierra (GND) para habilitar la descarga de sketches de ARDUINO en el módulo; y luego se desconecta de GND para operar con el Sketch descargado.
FTDI Cable             ESP8266
 VCCIO (red)    -----> VCC (3.3V) 
   TXD (orange) -----> RXD 
   RXD (yellow) <----- TXD
   GND (black)  <----- GND
 VCCIO (red)    -----> CH_PD

#4 – La definición de placa del ESP8266 de ARDUINO (“Generic ESP8266 Module“) incluye una cantidad importante de ejemplos muy básicos para la operación del módulo, ya sea como Cliente HTTP, o cliente WiFi, o Access point, e incluso la creación de redes tipo Mesh usando WiFi.

#5 – El módulo ESP8266 no tiene capacidad para comunicarse con servicios de Internet por canales seguros de tipo HTTPS, lo cual representa una limitante sobre el tipo de aplicación que se pueda implementar. Como medida mínima es recomendable conectar el ESP8266 a un IoT Gateway con capacidad de comunicación HTTPS hacia la nube y no usarlo en aplicaciones suceptibles en caso de ser “hackeadas” ya que es relativamente facil para un hacker poder interceptar los datos provenientes del ESP8266 (no cifrados) interpretarlos e incluso suplantarlos.

#6 – El ESP8266 se puede conseguir en Costa Rica en CR Cibernetica. Nótese que al momento de escribir este artículo el precio estaba en $7.95, solamente $1 por debajo del SONOFF que aparte de traer uno de estos módulos tiene el hardware necesario para manejar corriente AC y un programa predeterminado para poder operarlo mediante un App de teléfono.

#7 – En Amazon se puede conseguir hasta por $15 cuatro módulos ($3.75 cada uno!). En Wish.com se pueden conseguir incluso a $2. Aunque para ser sinceros la comodidad de comprarlos en CR Cibernética y que me los traigan a domicilio el día siguiente es inigualable.

 #8 – Volviendo a los comandos AT, se puede acceder a estos mediante una terminal como Putty usando el puerto serial del FOCA V2.2 a una velocidad de 115200 bauds, pero es necesario (al menos en el caso de Putty) utilizar [ENTER] y [CTRL]+[ J ] para enviar los comandos al módulo y obtener una respuesta. Una conexión parecida se puede usar desde un ARDUINO 101 (que opera a 3.3V) usando la librería SoftwareSerial para operar el ESP8266 usando comandos AT enviados desde el ARDUINO. También se puede operar el ESP8266 desde un arduino usando los GPIO del ESP8266 como indicativos de qué hacer y que un Sketch de ARDUINO en el ESP8266 tome decisiones y realice comunicaciones WiFi basadas en esas señales.

#9 –  Finalmente cabe mencionar que el módulo tiene la capacidad de almacenar información en estado apagado. Lo cual permite, por ejemplo, recordar cual fue el último SSID/Passphrase que se usó y reconectar al encender, tanto para aplicaciones basadas en comandos AT como para aplicaciones basadas en sketch de Arduino ejecutados en el módulo ESP8266.

Intel Galileo – Enviar datos a un sitio web usando NodeJS

29 Oct , 2014,
José Núñez
, , , , , ,
8 comments

Espero en unos días publicar un tutorial más completo sobre el uso de NodeJS en Intel Galileo.

Por el momento les presento este código de prueba.

var request = require('request'); //Referencia a la librería "request" de nodejs
var i = 0; //variable para contar
var timer = {};
test();
function test(){
   i++;
   var busqueda='costa rica makers';
   var url= 'http://www.google.com/';
   url += '?q=' + busqueda;
   url += '&veces=' + i; //un parametro adicional cualquiera

   request(url , function (error, response, body){
      if (!error && response.statusCode == 200) { //EXITO
         console.log(body);
      } else { //ERROR
         console.log(response);
         console.log(error);
      }
   timer = setTimeout(test,2000); //VOLVER A LLAMAR EN 2 SEGUNDOS
 });
}

Configurando nodeJS y la librería Request

Para que el script anterior funcione, la libreria request debe estar disponible. Digamos que creamos una carpeta particular para la prueba: ~/nodejs_test01 ( o lo que es lo mismo /home/root/nodejs_test01/)

Para esto es necesario instalar la libreria usando la utilidad npm, pero para esto es necesario tambien que el Galileo tenga la fecha y hora correctas.

Entonces, ejecute estos pasos en el linux del Galileo:

date 1029114114
El comando anterior, configura la fecha del galileo a OCT-29-2014, a las 11:41 de la mañana. Si su fecha/hora fuera el primero de diciembre de 2014 a las 3:30pm podria ejecutar esto:  date 1201153014  donde los cuatro primeros caracteres son DIC-01, los siguientes cuatro caracteres son 15:30, y el ultimo juego de dos caracteres es el año 2014.

npm install request
Esta operación puede tardar varios minutos, básicamente descarga la libreria del repositorio de NPM

wget http://costaricamakers.com/wp-content/uploads/2014/10/test_request.js
Esto descarga el programa test_request.js en la carpeta seleccionada.

Ejecutando el programa

Para ejecutar el programa, primero almacénelo en la carpeta de pruebas que hicimos “~/nodejs_test01/request_test.js”

Luego ejecute el siguiente código:

node request_test.js

Listo, el programa empezará a llamar al sitio web de google con la pregunta “costa rica makers”

Para detener el programa utilice las teclas CTRL+C

Intel Galileo – hacer una llamada al web usando wget

Oct , 2014,
José Núñez
, , ,
No Comments

Uno de los retos interesantes que uno enfrenta en IoT es hacer llamadas desde nuestras pequeñas computadoras IoT a la Internet.

La llamada más básica es posiblemente lo que se conoce como el HTTP GET; que básicamente es hacer una solicitud a un sitio web usando un URL.

Un ejemplo de una llamada de este tipo es cuando ponemos en la dirección de nuestro navegador algo como “http://www.costaricamakers.com/?s=Internet“.

En una llamda como esta estamos haciendo una solicitud al servidor “www.costaricamakers.com” y le pasamos un parámetro s=Internet; el cual el servidor en nuestro caso entiende como una solicitud para realizar una búsqueda “?s” usando el término “Internet“. Esto genera una respuesta del servidor con el resultado de la búsqueda.

En nuestro caso, teniendo un computador “Intel Galileo” existen varias formas de ejecutar una solicitud HTTP GET.

Una de las más simples que he encontrado es el comando de linux “wget”.

wget http://www.costaricamakers.com/?s=Internet -O respuesta.txt

En el ejemplo anterior, wget haría la solicitud y guardaría el resultado en un archivo, en este caso el archivo llevaría el nombre “respuesta.txt”, en el directorio actual. También se puede especifica una ruta completa para el archivo donde se colocará el contenido de la respuesta.

Para más información:

  1. http://es.m.wikipedia.org/wiki/GNU_Wget

 

Happy Making!