ACTUALIZACIÓN 26/10/2022: El tutorial ya no funciona la plataforma Asksensors bajó su calidad y cambió sus métodos de configuración.
Usaremos una plataforma IoT (gratis) para ver desde cualquier parte del mundo el valor que un potenciómetro tiene al variarlo, esto con la tarjeta NodeMcu basada en el ESP8266 conectada a internet.
Y todo este proceso tendrá su explicación paso a paso porque aquí nadie nace aprendido y los detalles más pequeños pueden ser de mucha ayuda para aquellos que recién empiezan con el tema de IoT y similares.
Haciendo IoT con NodeMcu + Potenciómetro
Como ya había hecho mención párrafos arriba el objetivo variar un potenciómetro que estará conectado a nuestra tarjeta NodeMcu, dicho dato será visualizado en una plataforma de IoT tal que desde cualquier parte del mundo alguien pueda ver como se comporta en vivo, sin más que decir empecemos:
1. ¿Qué usaremos?
- x1 Tarjeta NodeMcu v3.0 de LoLin (si tienes otra versión no hay lío)
- x1 Potenciómetro de 5K
- Cables de conexión (Hembra-Hembra ó Hembra-macho)
- x1 Cable micro USB (Con el que cargamos el celular servirá)
- Plataforma IoT Asksensors
- IDE Arduino
¡Listo! Con lo anterior podemos hacer el tutorial rápidamente.
2. Crear y configurar cuenta IoT en Asksensors
En internet hay cientos de plataformas para IoT sin embargo he decidido tomar esta por su extrema facilidad pues es casi un "Plug & Play" y es lo que buscamos en SkullTrap al compartir un tutorial o proyecto, que sea claro, preciso y lo más fácil posible, aunque otras plataformas IoT tienen mejores funciones y son más avanzadas, usar Asksensors será suficiente para ver una o más variables graficarlas, exportar dichos datos y tratarlos así que veamos:
2.1. Nos registraremos en asksensors seleccionando la cuenta gratis (Click para ir), una vez nos registramos vamos al dashboard de asksensors:
2.2. Ya en el dashboard vamos a crear un nuevo sensor dando click en "+New sensor" asignamos un nombre, ahora creamos un módulo dando en "+Add module" deberá quedarnos un módulo agregado así:
Module1 creado |
2.3. Hecho lo anterior bajamos un poco y guardamos cambios en "Save", luego nos cargará los detalles de nuestro sensor "Sensors details" de estos datos por ahora sólo necesitaremos la API key in, así que la copiaremos para usarla más adelante:
2.4. Agregaremos el sistema de gráficos que nos mostrará el comportamiento del potenciómetro al variarlo, como se ve en la imagen anterior vamos a la pestaña (2) Modules luego a "+Add graph" y dejaremos en Type "Line" para registrar todo el comportamiento del potenciómetro, finalmente damos click en "Save":
Y nos saldrá un cuadro de gráfico vacío pero con el espacio listo para tratar los datos (Cosa que haremos cuando programemos nuestra nodeMcu):
3. Cómo conectar potenciómetro 5k a NodeMcu
Sabemos que lo que proporcionará el potenciómetro será un dato análogo entonces requerimos un pin análogo de la NodeMcu (Que sólo trae uno) para ello la identificación de todos los pines está en esta imagen:
Clic en imagen para ampliar |
El pin conversor Análogo-Digital será el A0 en la tarjeta ¡Fácil! además hay que recordar que la resolución de dicho conversor es de 10 bits lo que se traduce en que podremos manejar y ver valores entre 0 a 1023.
3.1. Sabido lo anterior la conexión a realizar será simple y estará lista así:
Clic en imagen para ampliar |
4. Programar NodeMcu para IoT usando API
Nota: Si compraste tu NodeMcu pero es la primera vez que la conectas a tu pc debes instalar el driver de la tarjeta y configurarla con el IDE de Arduino para programarla, da click aquí para ir al tutorial que tenemos para ello.
4.1. Ya con la tarjeta NodeMcu configurada podemos ir al siguiente paso, abrimos el IDE de Arduino y como he mencionado al principio usaré la tarjeta NodeMcu v3.0 si tienes esta entonces vamos a Herramientas > Placa > NodeMcu 1.0(ESP-12E Module) luego seleccionamos Upload Speed > 115200 conectamos la tarjeta y escogemos el puerto COM correspondiente que nos salga:
4.2. ¡Importante! Lo siguiente será instalar la librería ESP8266WiFi, entonces vamos a Programa > Incluir Librería > Administrar Bibliotecas escribimos ESP8266WiFi e instalamos la que dice IoTtweet by Isaranu Janthong:
4.3. Con la librería lista finalmente programaremos nuestra NodeMcu con el siguiente código:
/*API DESARROLLADA POR AskSensors código traducido y modificado al español por Andrés Lozano de SkullTrap Electronics - www.skulltrap.co*/ #include <Arduino.h> #include <ESP8266WiFi.h> #include <ESP8266WiFiMulti.h> #include <ESP8266HTTPClient.h> // Configuración Inicial const char* wifi_ssid = "NOMBRE RED WIFI"; // SSID - Nombre red Wifi const char* wifi_password = "CLAVE RED WIFI"; // Clave Wifi const char* apiKeyIn = "AQUI VA LA API KEY"; // API KEY IN const unsigned int writeInterval = 300; // Tiempo de actualización (en ms) // Configuración API asksensors String host = "http://api.asksensors.com"; // Host de API ESP8266WiFiMulti WiFiMulti; void setup() { Serial.begin(115200); Serial.println("*****************************************************"); Serial.println("********** Programa Inicial : ESP8266 a AskSensors sobre HTTP"); Serial.println("Esperando WiFi... "); Serial.print("********** Conectando al WiFi : "); Serial.println(wifi_ssid); WiFi.begin(wifi_ssid, wifi_password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("-> Conectado al WiFi"); Serial.println("-> Direccion IP: "); Serial.println(WiFi.localIP()); //Lectura Inicial de Potenciómetro pinMode(A0, INPUT); } void loop() { int POT = analogRead(A0); Serial.print("Pot-5K = "); Serial.println(POT); //Imprimo valor de Potenciómetro // Espera para la conexión WiFi if (WiFi.status() == WL_CONNECTED){ HTTPClient http; Serial.print("[HTTP] Iniciando...n"); // Creo la URL para enviar la petición concatenando los datos String url = ""; url += host; url += "/write/"; url += apiKeyIn; url += "?module1="; url += POT; // Variable del potenciometro concatenada en la URL Serial.print("********** solicitando URL: "); Serial.println(url); http.begin(url); //HTTP Serial.println("> Solicitud enviada a ASKSENSORS"); Serial.print("[HTTP] GET...n"); // Inicio la conexión y envío peticion GET int httpCode = http.GET(); if(httpCode > 0) { Serial.printf("[HTTP] GET... codigo: %dn", httpCode); if(httpCode == HTTP_CODE_OK) { String payload = http.getString(); Serial.println(payload); } } else { Serial.printf("[HTTP] GET... fallido, error: %sn", http.errorToString(httpCode).c_str()); } http.end(); Serial.println("********** Fin "); Serial.println("*****************************************************"); } delay(writeInterval); // Espera el tiempo de actualización }
Sobre el código
- ¡Importante! En las líneas 11, 12 y 13 se debe reemplazar respectivamente el texto entre las comillas dobles por el nombre exacto de nuestra red WiFi, la clave WiFi y la Api Key In que obtuvimos en el paso 2.3.
- Línea 14 se establece el intervalo de actualización en milisegundos esto irá directamente ligado a cada cuánto se enviará el dato del potenciómetro a la plataforma IoT.
- Línea 17 contiene la URL a la que se conecta en este caso allí se validará la API Key ingresada en la línea 13, no se debe modificar.
- Línea 46 a 48 a cargo de leer el valor del potenciómetro y mostrarlo en monitor serial.
- Línea 58 a la 63 he creado un STRING para concatenar porciones que crearán mi URL final que se conectará por peticiones HTTP, en la línea 63 se almacena el valor en la variable POT que se graficará finalmente en el module1 indicado en la línea 62 en el paso 2.2 agregamos dicho módulo con ese nombre "Module1" por defecto.
4.4. Hechas las modificaciones ahora hay que cargar el código en la tarjeta, mientras lo hace el led del ESP8266 de la NodeMcu titilará y en el IDE de Arduino una vez carga por completo el código, saldrá algo así:
Vamos a la tarjeta para presionar el botón de reset (rst) y verificamos en el monitor serial (La comunicación debe estar en 115200 baudios) como se está comportando el programa, allí podremos ver si la conexión se ha logrado o no, entonces:
Hemos comprobado que nuestra tarjeta se conecta a internet y establece un vínculo con la API de la plataforma IoT enviando el valor actual que tenga el potenciómetro, recordemos que para este código el tiempo se actualizará cada 300ms pero este puede ser cambiado a gusto del programador.
5. Ver valor potenciómetro en gráfica IoT AskSensors
Para ver en vivo como se comporta nuestro potenciómetro en la plataforma IoT vamos de nuevo a Asksensors y damos en "visualize":
Nos cargará el mismo cuadro de gráfica que sacamos en el paso 2.4 para finalmente ver el comportamiento de nuestro potenciómetro ¡La magia ocurre cuando lo variamos! y vemos como actualiza cada cierto tiempo en vivo:
5.1. Hasta lo anterior ya logramos conectar un potenciómetro al mundo de Internet lo cual está bien: IoT que le llaman, aunque es algo muy básico son buenas bases para ir adquiriendo nivel y hacer cosas más complejas, pero por ahora el paso final será tener la opción de que cualquier persona pueda ver el comportamiento de nuestro componente:
Como decirle a un amigo "Abre este link y mira como varío un potenciómetro en vivo desde mi casa" y tu amigo está a 100 kilómetros de ti
Si abro el link en modo incógnito/privado o lo envío a alguien más para que observe no requerirá ingresar a mi cuenta de asksensors lo cuál es bueno ya que sólo podrán ver más no modificar o alterar mi gráfica:
Cualquier persona con el link verá algo así esté donde esté |
🔔 Aclaraciones y dudas:
🔰 ¿Puedo mostrar el estado de otro elemento o componente?
Sí, desde un sensor hasta un pulsador todo depende de nuestra creatividad programando,este código es una base para establecer conexión a internet y hacer IoT.
🔰 ¿Se puede cambiar el estilo de gráfica usada, no usar línea?
Sí, sólo usamos línea para el ejemplo pero como expliqué en el paso 2.4 en Type tenemos múltiples opciones (Sólo las resaltadas en amarillo):
🔰 ¿Es del todo gratis AskSensors?
No, como cualquier servicio en la red poseen planes de pago y el gratis que hemos creado al inicio tiene validez de 1 año pero, no pasa nada si el año se cumple creamos otra cuenta y se repite el proceso sin problema.
Es todo en este 1er post sobre IoT muy completo y dinámico, ¿Alguna duda? Comentar es gratis 😉.
Hola Andrés te fajaste con el tutorial no pensé que fuera tan fácil y tan bien detallado me gustaría salber cuando publicarás el artículo sobre reverseo de firmware? un abrazo, Luis desde mexico
ResponderEliminarHola Luis gracias por comentar para los días próximos tendré el tutorial publicado.
EliminarHola Andres, Excelente guia. Por favor me podrias ayudar en el paso 4.4 me sale este error, que debo hacer?
ResponderEliminarC:\Users\netwa\OneDrive\Documentos\Arduino\Proyecto_Final_Potenciometro\Proyecto_Final_Potenciometro.ino: In function 'void loop()':
Proyecto_Final_Potenciometro:63:19: error: call to 'HTTPClient::begin' declared with attribute error: obsolete API, use ::begin(WiFiClient, url)
63 | http.begin(url); //HTTP
| ~~~~~~~~~~^~~~~
exit status 1
call to 'HTTPClient::begin' declared with attribute error: obsolete API, use ::begin(WiFiClient, url)
Hola Yostin estás usando el mismo código que compartí aquí?
EliminarEs que hace poco hice unas pruebas y tampoco me quiso funcionar considerando que este artículo es de hace dos años. Pero buscaré una versión que monté y funcionó.
Y te comento.
Hola Andres, Mil gracias por responder. utilice el mismo codigo, por favor me puedes compartir el codigo nuevo, lo estoy montando para un proyecto de la universidad. En lo que me puedas ayudar estaré muy agradecido.
Eliminarya no funciona.
ResponderEliminarsolo son 3 meses de trial y no esta permitido este paso : "+Add graph"
HOLA TIENES TODA LA RAZÓN GRACIAS POR AVISARME ACTUALIZARÉ EL POST ES UNA LÁSTIMA QUE YA NO SIRVA COMO DECÍA EL POST FUE BUENO MIENTRA DURÓ.
EliminarHOLA, SOY EL AUTOR DEL BLOG ESTE POST YA NO FUNCIONA TEMPORALMENTE LA PLATAFORMA ASKSENSORS BAJÓ SU CALIDAD Y NADA ES PSOIBLE HACERLO COMO SE HACÍA ANTES. FUE BUENO MIENTRAS DURÓ.
ResponderEliminarSALUDOS.