Académique Documents
Professionnel Documents
Culture Documents
ARDUINO Y NODEMCU
Laboratorio Nro 5.1.
Internet de las cosas con Arduino y NodeMCU. Laboratorio Nro. 5.1 Separata
por Nombre del autor
©INICTEL-UNI, Año
Hecho en Perú
Derechos reservados. No está permitida la reproducción total o parcial de la obra por cualquier medio o procedimiento,
comprendidos la reprografía, el tratamiento informático y electrónico sin la autorización de INICTEL-UNI.
1
LABORATORIO N° 5.1
El módulo NodeMCU tiene integrado la electrónica adecuada para realizar la conectividad Wi-Fi. Entre los
protocolos de comunicación web que tiene son los peticiones GET/POST HTTP, las cuales permiten
obtener y enviar información a servidores.
2. Objetivos
Implementación de un cliente GET cliente para petición de datos a ThingSpeak.
Implementación de un cliente GET para petición de datos a JsonPlaceHolder
Configuración de servidor ThingSpeak para conexión con el NodeMCU
Implementación de un cliente GET para envío de datos a ThingSpeak
3. Sustento teórico
El Protocolo de transferencia de hipertexto (HTTP) está diseñado para habilitar las comunicaciones entre
clientes y servidores. HTTP funciona como un protocolo de solicitud y respuesta entre un cliente y un
servidor. Un navegador web puede ser el cliente, y una aplicación en una computadora que aloja un sitio
web puede ser el servidor. Veremos que el módulo NodeMCU se puede comportar como cliente, servidor o
Modo AP (Access Point).
GET. Solicita datos de un recurso especificado. El objetivo de GET es obtener información del
servidor, ya sea en un archivo o base de datos, hacia el cliente.
POST. Envía datos para ser procesados a un recurso especificado. El objetivo es enviar información
desde el cliente para que sea procesada y actualice o agregue información en el servidor
4. Equipos y Materiales
NodeMCU x1
Sensor DHT22/DHT11
Cables para Protoboard.
Protoboard x1.
Resistor de 1k Ohmios x1
5. Procedimientos
En este laboratorio se realizarán cuatro ejercicios para realizar la comunicación con servidores Web
usando cliente HTTP en el NodeMCU
2
Figura 1. Esquema de comunicación de clientes con servidor en la nube
Thingspeak es una plataforma para transmisión y recepción de datos de dispositivos IOT en la que
cualquiera puede visualizar y analizar datos en vivo desde sus dispositivos sensores. Además, podemos
realizar análisis de datos con la información publicada por dispositivos remotos usando Matlab.
En este ejemplo usaremos un canal de identificación ya existente el cual nos devuelve el último dato que
ha sido almacenado.
La identificación del canal es = 309236
La clave de escritura es = 1EYZIS5OCRJSKZHG
En este ejemplo no es necesario tener ningún otro componente más que el NodeMCU, asi que nos
conectaremos directamente a la nube de ThinSpeak para acceder a un canal de datos libre. Un esquema
de conexión se muestra en la siguiente figura.
GET Request
GET Response
WiFiClient client;
void setup() {
Serial.begin(9600);
delay(1000);
Serial.println("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while(client.available()){
char c = client.read();Serial.print(c);
}
Serial.println("");
}
client.stop();
Serial.println("Waiting…");
delay(10000);
}
4
Se observa en el monitor serial que se tiene la respuesta del servidor cada 10 segundos donde se tiene el
último registro de datos a ese canal en ThingSpeak. Nosotros podemos obtener esa información
accediendo directamente al enlace “http://api.thingspeak.com/channels/309236/feeds/last.txt” y observar
que tenemos la misma información.
También se puede usar el software “Hercules” para implementar un cliente HTTP y comprobar que el
formato de petición GET es el mismo. La petición GET puede también puede tener como url de conexión:
“/channels/309236/feeds/last.txt” y el parámetro HTTP/1.1, si está separado por espacio de la línea
anterior GET nos brindará más datos en la respuesta del servidor
NodeMCU Hercules HW
GET GET
http://api.thingspeak.com/channels/309236/fee http://api.thingspeak.com/channels/309236/fee
ds/last.txt\n ds/last.txt<LF>
HTTP/1.1\n HTTP/1.1<LF>
Host: api.thingspeak.com\n Host: api.thingspeak.com<LF>
Connection: close\n\n\n Connection: close<LF><LF><LF>
Tabla 1. Formato de petición de datos utilizando el protocolo HTTP GET
5
Figura 5. Acceso al servidor remoto utilizando el software Hercules
GET Request
GET Response
6
Se especifica la dirección donde se hará la petición con la función “http.begin” y se realiza la
petición “http.GET”.
Si hay respuesta del servidor se utiliza la función “http.getString” para obtener los datos y
enviarlos por el puerto serie.
Se agrega un retardo de 30 segundos, el cual es el periodo en el que se harán peticiones al
servidor
Una vez escrito el código guardamos el archivo con nombre nombre: “Ejemplo13_get”.
Compilamos y grabamos el programa, verificando nuevamente que se ha seleccionado la tarjeta
NodeMCU 1.0 y puerto Serial correcto.
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
const char* ssid = "ricne";
const char* password = "s10n1sm0";
void setup () {
Serial.begin(9600);
WiFi.begin(ssid, password);
http.begin("http://jsonplaceholder.typicode.com/users/1");
int httpCode = http.GET();
Se observa en el monitor serial que se tiene la respuesta del servidor cada 30 segundos donde se obtiene
información en formato json desde el servidor de pruebas “JSONPlaceholder. Nosotros podemos obtener
esa información accediendo directamente al enlace “http://jsonplaceholder.typicode.com/users/1” y
observar que tenemos la misma información.
7
Figura 7. Recepción de datos del servidor.
9
Figura 5.12. Acceso a la API KEY
temperature
GET Request
humidity
void setup() {
Serial.begin(115200);
delay(10);
Serial.println();Serial.println();
Serial.print("Connecting to ");Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);Serial.print(".");
}
Serial.println("");Serial.println("WiFi connected");
Serial.println("IP address: ");Serial.println(WiFi.localIP());
}
void loop() {
Serial.print("connecting to ");Serial.println(host);
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
}
float humidity = dht.readHumidity();
float temperature = dht.readTemperature(!IS_METRIC);
11
Serial.println(url);
Se observa en el monitor serial que se tiene la respuesta del servidor cada 30 segundos lo cual indica que
tenemos una respuesta satisfactoria del servidor. Los datos se pueden observar de forma gráfica en la
sección “Channels”.
12
Utilizando el software “Hercules” podemos comprobar que también podemos enviar datos si utilizamos el
formato adecuado para el envío de datos.
Para hacer la lectura de los datos de forma remota podemos utilizar las siguientes opciones:
13
https://thingspeak.com/channels/469510/ https://api.thingspeak.com/channels/469510/
import_export feeds.json?api_key=XX&results=1
b) Uso de un software cliente HTTP. Se puede utilizar el software “Hércules” con el formato mostrado en
la siguiente figura.
“GET
https://api.thingspeak.com/channels/469510/feeds.json?api_key=AY5DJAKOADFCLAL5&results=1<LF>H
TTP/1.1<LF>Host: api.thingspeak.com<LF>Connection: close<LF><LF><LF>”
c) Utilizar aplicaciones móviles. Otra opción para acceder a los datos remotamente desde el teléfono
móvil utilizando la aplicación donde debemos ingresar la API_KEY de lectura y número de canal.
Podemos utilizar la aplicación “ThingView” la cual requiere como datos el número de canal y el API_KEY
para lectura de datos
14
Figura 19. Sofware ThingView para visualización de datos.
También se puede utilizar un cliente HTTP “HTTPClient” e ingresar los datos de solicitud de datos en el
formato:
“GET /channels/469510/feeds.json?api_key= AY5DJAKOADFCLAL5&results=1”
15