Archivo de la categoría: Video

Iniciación a Arduino en 3 Directos de YouTube

En estos tres directos hechos en marzo de 2020 hago una iniciación a Arduino.

Primer Directo

Hablo de:

Enlaces del vídeo:

Segundo Directo

Hablo de:

  • Uso de una pantalla LCD con Arduino
  • Instalar una librería
  • Funciones Arduino
  • Debug de un Sketch de Arduino

Enlaces del vídeo:

Tercer Directo

Hablo de:

Enlaces del Vídeo:

Anuncio publicitario

Crea un Bot de Telegram con Node-RED

Descripción

Haz tu propio bot de Telegram y programalo con Node-RED para controlar Internet.

Este artículo explica cada paso y el código del vídeo publicado en dos partes.

Vídeo Parte 1:

Vídeo Parte 2:

Haremos un bot de Telegram al que podrás hacer preguntas sencillas, podrás pedirle que encienda o apague un led de un dispositivo conectado a Internet, te mandará correos electrónicos, podrás decirle que haga una foto de la webcam conectada, saber el tiempo que hace en tu ciudad y mucho más…

Además lo programaremos usando Node-RED que es una herramienta visual de programación muy fácil de usar.

Requisitos:

Telegram y Node-RED

Crea tu Bot de Telegram y prográmalo usando Node-RED para interactuar con cualquier servicio de Internet como twitter, la luz de tu casa, Arduino, conocer el la predicción del tiempo, Alexa, enviar un email o SMS y mucho más…

Telegram Bots son cuentas especiales que no requieren un número de teléfono adicional para configurar. Estas cuentas sirven para interactuar a través Telegram, simplemente para tener una conversación o para encender la luz de tu habitación.

Para programar el Bot de Telegram usaremos Node-RED. Node-RED es una herramienta de desarrollo basada en flujo para programación visual desarrollada originalmente por IBM para conectar dispositivos de hardware, API y servicios en línea como parte de Internet de las cosas.

Node Red permite programar de forma visual, puede recordar a Scratch, pero es una herramienta muy potente de programación, es un motor de flujos que permite definir gráficamente flujos de servicios, a través de protocolos estándares como REST, MQTT, Websocket, AMQP… además de ofrecer integración con apis de terceros, tales como Twitter, Facebook, Yahoo!…

Su punto fuerte es la sencillez. Nos permite utilizar tecnologías complejas sin tener que profundizar hasta el más mínimo detalle en todas ellas. Nos quedamos en una capa inicial donde nos centramos en lo importante y dejamos de lado aquello que no es práctico.

Crear el Bot

Lo primero que necesitaremos es una cuenta de Telegram, es una aplicación de mensajería que puede usarse desde el móvil, ordenador o web.

Necesitaremos también ejecutar Node-RED. Para ello se puede hacer en una Raspberry Pi, un contenedor Docker, un ordenador o en un servidor en la nube: https://nodered.org/#get-started. Incluso también se puede ejecutar de forma experimental en un móvil Android.

La forma más sencilla de usar Node-RED sin instalar nada es usar FRED, que hace hosting Node-RED y la versión gratuita, aunque limitada, es suficiente para probar Node-RED: https://fred.sensetecnic.com/

Crear un Bot:

Para crear un bot simplemente hay que hablar con BotFather: https://t.me/botfather

Los usuarios pueden interactuar con bots de dos maneras:

  • Enviar mensajes y comandos a los bots abriendo un chat con ellos o agregándolos a grupos. Esto es útil para bots de chat o bots de noticias.
  • Enviar solicitudes directamente desde el campo de entrada escribiendo el nombre de usuario del bot y una consulta. Esto permite enviar contenido desde bots en línea directamente a cualquier chat, grupo o canal.

Debemos solicitar un nuevo bot y elegir un nombre y un username que debe acabar en bot. Una vez hecho esto nos da una token o contraseña, con este token ya podemos usar el bot.

  • /newbot
  • nombre
  • username

Ahora vamos a configurar el bot:

Ahora ya tenemos nuestro bot y podemos añadirlo a grupos o canales y mandarle mensajes aunque aun no nos va a responder.

Lo siguiente es pensar los comandos que queremos que ejecute nuestro bot:

  • /start – inicio del bot
  • /help – muestra los comandos
  • /hola – saluda al bot
  • /quetal – pregunta al bot que tal está
  • /temperatura – temperatura en tu ciudad
  • /humedad – humedad en tu ciudad
  • /tiempo – que tiempo atmosférico hace en tu ciudad
  • /hora – hora y día
  • /enciende – enciende un led de un dispositivo conectado
  • /apaga – apaga un led de un dispositivo conectado
  • /sonido – emite un sonido en un dispositivo conectado
  • /mensaje – muestra un mensaje en la pantalla de un dispositivo conectado
  • /tweet – manda un tweet
  • /mail – manda un email
  • /foto – hace una foto y la muestra en telegram

Para añadir comandos al bot:

  • /setcommands
  • @juntosdesdecasa_bot

Pasar los comandos (copia y pega esto):

start – inicio del bot
help – muestra los comandos
hola – saluda al bot
quetal – pregunta al bot que tal está
temperatura – temperatura en tu ciudad
humedad – humedad en tu ciudad
tiempo – que tiempo atmosférico hace en tu ciudad
hora – hora y día
enciende – enciende un led de un dispositivo conectado
apaga – apaga un led de un dispositivo conectado
sonido – emite un sonido en un dispositivo conectado
mensaje – muestra un mensaje en la pantalla de un dispositivo conectado
tweet – manda un tweet
mail – manda un email
foto – hace una foto y la muestra en telegram

Ahora ya hemos configurado los comandos y para programarlos usaremos Node-RED

Por último vamos a crear un nuevo grupo de telegram donde añadiremos al bot. Además podéis uniros al grupo donde interactuar con el bot en: https://t.me/aprendiendoarduinojuntos 

También podéis uniros al canal de Telegram de aprendiendoarduino: https://t.me/aprendiendoarduino 

Ahora que ya tenemos el bot configurado, vamos a programarlo usando Node-RED: https://nodered.org/

Usar Node-RED en la Nube

Node-RED se puede ejecutar en tu PC, una Raspberry Pi, un servidor o incluso en un teléfono Android, pero lo más sencillo e inmediato es ejecutarlo en un un servicio gratuito en la nube: https://fred.sensetecnic.com/

Para ello es necesario darse de alta y elegir la versión gratuita llamada short: https://fred.sensetecnic.com/pricing

Esta versión está limitada a 50 nodos y funcionamiento de 24 horas, luego hay que volver a iniciar Node-RED.

Una descripción completa de qué es Node-RED puedes verla en https://aprendiendoarduino.wordpress.com/2020/03/05/que-es-node-red/

Lo primero es entrar FRED https://fred.sensetecnic.com/ e instalar los nodos que vamos a usar:

Una vez instalado configurar el bot con nuestro usuario y el token o contraseña que nos ha dado botfather.

Probemos que nuestro bot puede ver los mensajes que le mandamos, para ello unir el bloque “Telegram Receiver” con el node debug y visualizarlo en la pantalla de debug.

Código:

[{"id":"c6588f41.31fad","type":"chatbot-telegram-receive","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","x":150,"y":140,"wires":[["b56dbbfc.886138","468f84be.2d0b0c","bc7025a7.d77f88","c5f7e4ca.0a3f68","38a90205.251c0e","c277093d.96aa38"]]},{"id":"b56dbbfc.886138","type":"debug","z":"9bb3e1e5.884ce","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":400,"y":140,"wires":[]},{"id":"13342512.0e9c4b","type":"chatbot-telegram-node","z":"","botname":"juntosdesdecasa_bot","usernames":"","polling":"1000","log":""}]

También podemos ver el Node-RED de FRED en: https://aprendiendoarduino.fred.sensetecnic.com/

Podemos ver el dashboard de FRED en: https://aprendiendoarduino.fred.sensetecnic.com/api/ui/

Ahora ya podemos programar cada uno de los comandos que hemos configurado en el bot.

Programar Bot Telegram

start – inicio del bot y help – muestra los comandos

Para estos dos comandos, simplemente va a saludar y va a mostrar los comandos.

Código:

[{"id":"a9c4f195.e216d","type":"chatbot-telegram-receive","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","x":130,"y":300,"wires":[["876e2bac.dd4728"]]},{"id":"876e2bac.dd4728","type":"change","z":"9bb3e1e5.884ce","name":"Variables","rules":[{"t":"set","p":"nombre","pt":"flow","to":"originalMessage.from.first_name","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":320,"y":300,"wires":[["400e3866.c55778","bc7025a7.d77f88"]]},{"id":"400e3866.c55778","type":"chatbot-command","z":"9bb3e1e5.884ce","name":"","command":"/start","x":490,"y":280,"wires":[["668cfc50.398514"]]},{"id":"bc7025a7.d77f88","type":"chatbot-command","z":"9bb3e1e5.884ce","name":"","command":"/help","x":490,"y":320,"wires":[["668cfc50.398514"]]},{"id":"668cfc50.398514","type":"chatbot-message","z":"9bb3e1e5.884ce","name":"","message":[{"message":"Hola {{nombre}}\n\nstart - inicio del bot\nhelp - muestra los comandos\nhola - saluda al bot\nquetal - pregunta al bot que tal está\ntemperatura - temperatura en tu ciudad\nhumedad - humedad en tu ciudad\ntiempo - que tiempo atmosférico hace en tu ciudad\nhora - hora y día\nenciende - enciende un led de un dispositivo conectado\napaga - apaga un led de un dispositivo conectado\nsonido - emite un sonido en un dispositivo conectado\nmensaje - muestra un mensaje en la pantalla de un dispositivo conectado\ntweet - manda un tweet\nmail - manda un email\nfoto - hace una foto y la muestra en telegram"}],"answer":false,"track":false,"parse_mode":"","x":650,"y":300,"wires":[["5f996a5f.ed0024"]]},{"id":"5f996a5f.ed0024","type":"chatbot-telegram-send","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","track":false,"outputs":0,"x":830,"y":300,"wires":[]},{"id":"13342512.0e9c4b","type":"chatbot-telegram-node","z":"","botname":"juntosdesdecasa_bot","usernames":"","polling":"1000","log":""}]

hola – saluda al bot y quetal – pregunta al bot que tal está

El bot va a responder a /hola y /quetal con varias respuestas aleatorias.

Código:

[{"id":"c55a6a9d.251d68","type":"chatbot-telegram-receive","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","x":130,"y":420,"wires":[["1c966594.5ae91a"]]},{"id":"1c966594.5ae91a","type":"change","z":"9bb3e1e5.884ce","name":"Variables","rules":[{"t":"set","p":"username","pt":"flow","to":"originalMessage.from.username","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":320,"y":420,"wires":[["b37510d5.bf716","f9c3aaac.474cb8"]]},{"id":"b37510d5.bf716","type":"chatbot-command","z":"9bb3e1e5.884ce","name":"","command":"/hola","x":490,"y":400,"wires":[["699f1646.e97398"]]},{"id":"f9c3aaac.474cb8","type":"chatbot-command","z":"9bb3e1e5.884ce","name":"","command":"/quetal","x":490,"y":440,"wires":[["fd6d51e9.9a66f"]]},{"id":"699f1646.e97398","type":"chatbot-message","z":"9bb3e1e5.884ce","name":"","message":[{"message":"Hola {{username}} 👏"},{"message":"👍"},{"message":"Adiós, mantengamos la distancia de seguridad 😷"},{"message":"Me alegro de volver a verte {{username}} 😁"}],"answer":false,"track":false,"parse_mode":"","x":650,"y":400,"wires":[["ec60a0f8.8c47a"]]},{"id":"fd6d51e9.9a66f","type":"chatbot-message","z":"9bb3e1e5.884ce","name":"","message":[{"message":"Hoy no me encuentro muy bien 😷"},{"message":"Muy bien {{username}} ¿Y tu?"},{"message":"Aquí en casa. Recuerdate ¡Quedaté en casa! 🏠"}],"answer":false,"track":false,"parse_mode":"","x":650,"y":440,"wires":[["ec60a0f8.8c47a"]]},{"id":"ec60a0f8.8c47a","type":"chatbot-telegram-send","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","track":false,"outputs":0,"x":830,"y":420,"wires":[]},{"id":"13342512.0e9c4b","type":"chatbot-telegram-node","z":"","botname":"juntosdesdecasa_bot","usernames":"","polling":"1000","log":""}]

tiempo – que tiempo atmosférico hace en tu ciudad

Preguntando /tiempo nos dirá qué tiempo hace en mi ciudad, para ello usaremos el nodo de openweathermap: https://github.com/node-red/node-red-web-nodes/tree/master/openweathermap

Openweathermap https://openweathermap.org/ es una web donde puede consultar el tiempo de mi ciudad y mi bot también. Para ello es necesario darse de alta y obtener la API key.

Código:

[{"id":"dbe9499e.100028","type":"chatbot-telegram-receive","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","x":110,"y":360,"wires":[["c26920ba.c8a5e"]]},{"id":"c26920ba.c8a5e","type":"chatbot-command","z":"9bb3e1e5.884ce","name":"","command":"/tiempo","x":280,"y":360,"wires":[["2887bf4a.008bf"]]},{"id":"2887bf4a.008bf","type":"openweathermap","z":"9bb3e1e5.884ce","name":"","wtype":"current","lon":"","lat":"","city":"logrono","country":"Espana","language":"es","x":450,"y":360,"wires":[["7890acdf.39a1e4"]]},{"id":"7890acdf.39a1e4","type":"change","z":"9bb3e1e5.884ce","name":"Variables","rules":[{"t":"set","p":"tiempo","pt":"flow","to":"payload.description","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":620,"y":360,"wires":[["b7c6ca8b.fd84f8"]]},{"id":"b7c6ca8b.fd84f8","type":"chatbot-message","z":"9bb3e1e5.884ce","name":"","message":[{"message":"Hola este es el tiempo solicitado:\n\n{{tiempo}}"}],"answer":false,"track":false,"parse_mode":"","x":770,"y":360,"wires":[["c256b90d.b4aea8"]]},{"id":"c256b90d.b4aea8","type":"chatbot-telegram-send","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","track":false,"outputs":0,"x":950,"y":360,"wires":[]},{"id":"13342512.0e9c4b","type":"chatbot-telegram-node","z":"","botname":"juntosdesdecasa_bot","usernames":"","polling":"1000","log":""}]

hora – hora y día

Al pedir el comando /hora, el bot nos dará la fecha y hora. Para ello necesitaremos el nodo “moment”: https://github.com/totallyinformation/node-red-contrib-moment

Código:

[{"id":"84e9eb57.8762a8","type":"chatbot-telegram-receive","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","x":110,"y":420,"wires":[["38a90205.251c0e"]]},{"id":"38a90205.251c0e","type":"chatbot-command","z":"9bb3e1e5.884ce","name":"","command":"/hora","x":310,"y":420,"wires":[["56731d.5b4b1ce4"]]},{"id":"56731d.5b4b1ce4","type":"change","z":"9bb3e1e5.884ce","name":"","rules":[{"t":"set","p":"hora","pt":"flow","to":"$now()","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":470,"y":420,"wires":[["e74644c8.820a78"]]},{"id":"e74644c8.820a78","type":"moment","z":"9bb3e1e5.884ce","name":"","topic":"","input":"hora","inputType":"flow","inTz":"Etc/UTC","adjAmount":"2","adjType":"hours","adjDir":"add","format":"","locale":"\"POSIX\"","output":"hora","outputType":"flow","outTz":"Etc/UTC","x":600,"y":480,"wires":[["2eef1594.07269a"]]},{"id":"2eef1594.07269a","type":"chatbot-message","z":"9bb3e1e5.884ce","name":"","message":[{"message":"Hola esta es la fecha y hora:\n\n{{hora}}"}],"answer":false,"track":false,"parse_mode":"","x":690,"y":420,"wires":[["fc861b5b.3e9a38"]]},{"id":"fc861b5b.3e9a38","type":"chatbot-telegram-send","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","track":false,"outputs":0,"x":850,"y":420,"wires":[]},{"id":"13342512.0e9c4b","type":"chatbot-telegram-node","z":"","botname":"juntosdesdecasa_bot","usernames":"","polling":"1000","log":""}]

foto – hace una foto y la manda por telegram

Al ejecutar el comando /foto, solicito que haga una foto en una webcam remota y la manda por Telegram.

En este caso uso una RaspberryPi Zero con cámara conectada a Internet y que cuando recibe la orden manda la foto a Telegram.

Para mandar la orden, uso el protocolo MQTT y un servidor gratuito que es https://www.cloudmqtt.com/

El funcionamiento es simple, cuando recibo la solicitud de /foto respondo diciendo que en breve llegará la foto y guardo la variable chatId para que una vez llegue la foto la pueda mandar al mismo chat. Una vez llega la foto enviada por MQTT la mando al chat que la ha solicitado.

Código:

[{"id":"ddef9c1e.3b5c","type":"chatbot-telegram-receive","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","x":110,"y":640,"wires":[["7d91e4eb.25d70c"]]},{"id":"7d91e4eb.25d70c","type":"chatbot-command","z":"9bb3e1e5.884ce","name":"","command":"/foto","x":310,"y":640,"wires":[["50aa7619.e50258","fa77bad5.5803f8"]]},{"id":"50aa7619.e50258","type":"mqtt out","z":"9bb3e1e5.884ce","name":"","topic":"foto/bot","qos":"","retain":"","broker":"6803b3c6.3db1bc","x":500,"y":640,"wires":[]},{"id":"c1239e7c.4333a","type":"mqtt in","z":"9bb3e1e5.884ce","name":"","topic":"foto/imagen","qos":"2","datatype":"auto","broker":"6803b3c6.3db1bc","x":90,"y":720,"wires":[["90f8b83c.4fcb38"]]},{"id":"4eac8339.c516cc","type":"chatbot-telegram-send","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","track":false,"outputs":0,"x":710,"y":720,"wires":[]},{"id":"fa77bad5.5803f8","type":"chatbot-message","z":"9bb3e1e5.884ce","name":"","message":[{"message":"Solicitando foto....\nEspera unos segundos a que llegue"}],"answer":false,"track":false,"parse_mode":"","x":490,"y":580,"wires":[["a99eebc0.d85b58"]]},{"id":"a99eebc0.d85b58","type":"change","z":"9bb3e1e5.884ce","name":"Variables","rules":[{"t":"set","p":"chatid","pt":"flow","to":"payload.chatId","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":640,"y":580,"wires":[["65e6d1bf.6dc4"]]},{"id":"65e6d1bf.6dc4","type":"chatbot-telegram-send","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","track":false,"outputs":0,"x":830,"y":580,"wires":[]},{"id":"90f8b83c.4fcb38","type":"function","z":"9bb3e1e5.884ce","name":"manda imagen","func":"imagen = msg.payload;\nchatid = flow.get('chatid');\n\nmsg.payload = {\n    content: imagen,\n chatId: chatid,\n type: \"photo\"\n}\n\nreturn msg;","outputs":1,"noerr":0,"x":300,"y":720,"wires":[["3179a0ed.f8049"]]},{"id":"3179a0ed.f8049","type":"chatbot-conversation","z":"9bb3e1e5.884ce","name":"","chatId":"","transport":"telegram","x":490,"y":720,"wires":[["4eac8339.c516cc"]]},{"id":"13342512.0e9c4b","type":"chatbot-telegram-node","z":"","botname":"juntosdesdecasa_bot","usernames":"","polling":"1000","log":""},{"id":"6803b3c6.3db1bc","type":"mqtt-broker","z":"","name":"","broker":"m20.cloudmqtt.com","port":"10488","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}] 

La Raspberry Pi Zero también está configurada con Node-RED para que tome la foto y la devuelva.

Código:

[{"id":"dfbb37cf.44f8c8","type":"mqtt in","z":"7e76b20c.feda1c","name":"","topic":"foto/bot","qos":"2","datatype":"auto","broker":"8579193.97411e8","x":150,"y":600,"wires":[["b0f0ef4f.8c8f2"]]},{"id":"b0f0ef4f.8c8f2","type":"camerapi-takephoto","z":"7e76b20c.feda1c","filemode":"0","filename":"imagen.jpg","filedefpath":"1","filepath":"","fileformat":"jpeg","resolution":"2","rotation":"0","fliph":"0","flipv":"0","brightness":"50","contrast":"0","sharpness":"0","quality":"80","imageeffect":"none","exposuremode":"auto","iso":"0","agcwait":"1.0","led":"0","awb":"auto","name":"","x":340,"y":600,"wires":[["6970b871.3e1f78"]]},{"id":"6970b871.3e1f78","type":"mqtt out","z":"7e76b20c.feda1c","name":"","topic":"foto/imagen","qos":"","retain":"","broker":"8579193.97411e8","x":530,"y":600,"wires":[]},{"id":"8579193.97411e8","type":"mqtt-broker","z":"","name":"","broker":"m20.cloudmqtt.com","port":"10488","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]

enciende – enciende un led de un dispositivo conectado y apaga – apaga un led de un dispositivo conectado

Para este ejemplo vamos a usar un dispositivo conectado a Internet programable llamado M5StickC: https://m5stack.com/products/stick-c

Al igual que encendemos y apagamos el led del M5StickC, podríamos apagar y encender la luz de nuestra casa usando el dispositivo conectado a Internet adecuado.

Este dispositivo se programa de diversas formas, una de ellas es como un Arduino, pero lo he programado usando bloques con http://flow.m5stack.com/

Para mandar la orden usamos MQTT como protocolo y el servidor gratuito https://www.cloudmqtt.com/ como hemos hecho anteriormente.

Código:

[{"id":"6a786d51.9c12a4","type":"chatbot-telegram-receive","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","x":130,"y":760,"wires":[["9e53e05e.8db81","c831375e.de21a8"]]},{"id":"9e53e05e.8db81","type":"chatbot-command","z":"9bb3e1e5.884ce","name":"","command":"/enciende","x":340,"y":760,"wires":[["fed77841.defea8"]]},{"id":"c831375e.de21a8","type":"chatbot-command","z":"9bb3e1e5.884ce","name":"","command":"/apaga","x":340,"y":800,"wires":[["14fb096b.04ecc7"]]},{"id":"fed77841.defea8","type":"change","z":"9bb3e1e5.884ce","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"ON","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":500,"y":760,"wires":[["e9b25c14.01afd","150e4da0.f24952"]]},{"id":"14fb096b.04ecc7","type":"change","z":"9bb3e1e5.884ce","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"OFF","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":500,"y":800,"wires":[["e9b25c14.01afd","84a1f34.51f1c1"]]},{"id":"e9b25c14.01afd","type":"mqtt out","z":"9bb3e1e5.884ce","name":"","topic":"m5stickc/led","qos":"","retain":"","broker":"6803b3c6.3db1bc","x":710,"y":780,"wires":[]},{"id":"150e4da0.f24952","type":"chatbot-message","z":"9bb3e1e5.884ce","name":"","message":[{"message":"Led Encendido"}],"answer":false,"track":false,"parse_mode":"","x":690,"y":720,"wires":[["4c8d2b07.0022c4"]]},{"id":"84a1f34.51f1c1","type":"chatbot-message","z":"9bb3e1e5.884ce","name":"","message":[{"message":"Led apagado"}],"answer":false,"track":false,"parse_mode":"","x":690,"y":840,"wires":[["4c8d2b07.0022c4"]]},{"id":"4c8d2b07.0022c4","type":"chatbot-telegram-send","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","track":false,"outputs":0,"x":950,"y":780,"wires":[]},{"id":"13342512.0e9c4b","type":"chatbot-telegram-node","z":"","botname":"juntosdesdecasa_bot","usernames":"","polling":"1000","log":""},{"id":"6803b3c6.3db1bc","type":"mqtt-broker","z":"","name":"","broker":"m20.cloudmqtt.com","port":"10488","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]

sonido – emite un sonido en un dispositivo conectado

El método es el mismo que en el caso del led.

Código:

[{"id":"4a378cfc.3230e4","type":"chatbot-telegram-receive","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","x":110,"y":800,"wires":[["25947763.14b2d8"]]},{"id":"25947763.14b2d8","type":"chatbot-command","z":"9bb3e1e5.884ce","name":"","command":"/sonido","x":340,"y":800,"wires":[["c7ff2e29.ba074","674764d3.a9c9ac"]]},{"id":"c7ff2e29.ba074","type":"mqtt out","z":"9bb3e1e5.884ce","name":"","topic":"m5stickc/sonido","qos":"","retain":"","broker":"6803b3c6.3db1bc","x":520,"y":860,"wires":[]},{"id":"674764d3.a9c9ac","type":"chatbot-message","z":"9bb3e1e5.884ce","name":"","message":[{"message":"Sonido emitido"}],"answer":false,"track":false,"parse_mode":"","x":510,"y":800,"wires":[["9ab43036.cbb8e"]]},{"id":"9ab43036.cbb8e","type":"chatbot-telegram-send","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","track":false,"outputs":0,"x":730,"y":800,"wires":[]},{"id":"13342512.0e9c4b","type":"chatbot-telegram-node","z":"","botname":"juntosdesdecasa_bot","usernames":"","polling":"1000","log":""},{"id":"6803b3c6.3db1bc","type":"mqtt-broker","z":"","name":"","broker":"m20.cloudmqtt.com","port":"10488","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]

mensaje – muestra un mensaje en la pantalla de un dispositivo conectado

Ahora vamos a mandar un mensaje para que lo muestre por la pantalla del dispositivo, en este caso el bot va a dar varias opciones para mandar.

Código: 

[{"id":"c8ff4724.d761c8","type":"chatbot-telegram-receive","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","x":130,"y":900,"wires":[["17f77785.35dfb8"]]},{"id":"17f77785.35dfb8","type":"switch","z":"9bb3e1e5.884ce","name":"","property":"payload.content","propertyType":"msg","rules":[{"t":"cont","v":"/","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":290,"y":900,"wires":[["717fa77b.479188"],["e8619f7f.44b33"]]},{"id":"717fa77b.479188","type":"chatbot-command","z":"9bb3e1e5.884ce","name":"","command":"/mensaje","x":440,"y":860,"wires":[["82ebe12b.4d6d4"]]},{"id":"e8619f7f.44b33","type":"change","z":"9bb3e1e5.884ce","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.content","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":460,"y":940,"wires":[["c425c4d9.cf3e58"]]},{"id":"82ebe12b.4d6d4","type":"chatbot-ask","z":"9bb3e1e5.884ce","name":"","answers":[{"value":"Hola","label":"Hola"},{"value":"SOS","label":"SOS"},{"value":"Mensaje desde Telegram","label":"Mensaje desde Telegram"}],"message":"¿Que mensaje quieres mandar a la pantalla?","x":610,"y":860,"wires":[["95a7f43e.0b7518"]]},{"id":"c425c4d9.cf3e58","type":"mqtt out","z":"9bb3e1e5.884ce","name":"","topic":"m5stickc/pantalla","qos":"","retain":"","broker":"6803b3c6.3db1bc","x":650,"y":940,"wires":[]},{"id":"95a7f43e.0b7518","type":"chatbot-telegram-send","z":"9bb3e1e5.884ce","bot":"13342512.0e9c4b","track":false,"outputs":0,"x":810,"y":860,"wires":[]},{"id":"13342512.0e9c4b","type":"chatbot-telegram-node","z":"","botname":"juntosdesdecasa_bot","usernames":"","polling":"1000","log":""},{"id":"6803b3c6.3db1bc","type":"mqtt-broker","z":"","name":"","broker":"m20.cloudmqtt.com","port":"10488","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]

Flujo Final

Todo ordenado el flujo final queda:

Repositorio: https://github.com/jecrespo/Bot-Telegram-NodeRed

Video. Conectar ESP8266 a Internet. WifiClient

TODO: poner enlace al vídeo

Una vez escaneadas las redes, vamos a conectarnos a una de ellas y acceder a internet llegando a un servidor y ver su contenido.

El ejemplo WiFiClientBasic que podemos encontrar en Archivos – Ejemplos – ESP8266WiFi – WiFiClientBasic.

Este ejemplo se conecta a una red WiFi y manda un mensaje a un servidor TCP, en este caso a la IP 192.168.1.1 y al puerto 80.

La clase ESP8266WiFiMulti es igual que la clase ESP8266WiFi pero que permite configurar múltiples conexiones a puntos de acceso que en caso de perder la conexión se conecte al siguiente: http://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/station-examples.html?highlight=ESP8266WiFiMulti

Con WiFi.mode(WIFI_STA); pongo el ESP8266 en modo estación, es decir, para conectar a una red WiFi de un punto de acceso.

Para más información:

Una vez conectado entramos en el loop y me conecto a un servidor como cliente. La clase cliente permite acceder a servicios de los servidor pudiendo enviar y recibir datos:

NOTA: en caso que el router wifi de una IP en otro rango que no sea el 192.168.1.x, cambiar la IP de la variable host por la IP del router wifi al que nos conectamos.

Ejercicio propuesto: conectar a https://www.aprendiendoarduino.com/servicios/aprendiendoarduino/ y leer el mensaje que devuelve.

Solución: https://github.com/jecrespo/aprendiendoarduino-curso-esp8266-youtube/blob/master/WiFiClientBasicMejorado/WiFiClientBasicMejorado.ino

En este caso debemos usar un lenguaje de comunicación común para hablar entre el servidor y el ESP8266, es el mismo lenguaje que usa cualquier navegador que se conecta a una página web y es el HTTP.

Una vez conectados al puerto 80 debe mandar un GET con la ruta del servidor y acabar con una línea nueva, tal y como funciona este protocol. Para ello mando:

 
client.println("GET /servicios/aprendiendoarduino/ HTTP/1.0");
client.println("Host: www.aprendiendoarduino.com");
client.println();

Si todo funciona bien recibiré la respuesta “HTTP1.1 200 OK” seguido de las cabeceras y luego una línea nueva, tras la cual aparecerá la respuesta del servidor. Para leer todas las líneas y no solo la primera es necesario hacer un bucle while mientras haya datos recibidos con la instrucción client.available(): https://www.arduino.cc/en/Reference/WiFiClientAvailable

NOTA: es necesario añadir la cabecera HTTP “Host: http://www.aprendiendoarduino.com” para que el hosting de la web resuelva el nombre del dominio.

La respuesta obtenida es:

Mensaje oculto: “Bienvenido al servidor de http://www.aprendiendoarduino.com

Más información sobre el protocolo HTTP: https://aprendiendoarduino.wordpress.com/2017/06/26/protocolo-http-2/

Video. Primeros Pasos con ESP8266

Enlace Vídeo

Una vez que sabemos que es el ESP8266 y tenemos el IDE instalado, vamos a aprender a usar el Wifi del ESP8266. No entramos en el uso de otras características que son comunes a Arduino y que trataré de forma genérica en otros vídeos dentro del curso de Arduino en vídeo https://www.aprendiendoarduino.com/videos/curso-arduino/.

Si quieres saber más de Arduino y de su programación puedes ver los cursos de https://www.aprendiendoarduino.com

Una forma de aprender a manejar un dispositivo hardware o una librería es leer los ejemplos y ponerlos en práctica mientras se revisa la documentación en lugar de leer toda la documentación antes de empezar a practicar. Para empezar con los módulos ESP8266 una vez instalado el soporte para las placas, lo más sencillo es ejecutar los ejemplos que vienen con el soporte instalado para los módulos ESP8266.

Para ver los ejemplos debemos primero seleccionar la placa que vamos a usar, en nuestro caso la Wemos D1 mini o la nodeMCU.

Todos los ejemplos disponibles en el IDE de Arduino los puedes encontrar en los ejemplos de las librerías que vienen con el soporte del ESP8266 para Arduino que hemos instalado anteriormente en: https://github.com/esp8266/Arduino/tree/master/libraries

WiFiScan

Veamos primero el ejemplo WiFiScan que podemos encontrar en Archivos – Ejemplos – ESP8266WiFi – WiFiScan.

Este sketch muestra cómo escanear redes WiFi y el código es casi similar al usado con el WiFi shield de Arduino pero incluyendo la librería “ESP8266WiFi.h” en lugar de “WiFi.h”

La documentación de la librería “ESP8266WiFi” está en http://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/readme.html y dentro de la librería hay varias clases, entre ellas está scan para escanear redes y la client para conectarnos a un servidor: http://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/readme.html#scan

Al usar la librería ESP8266WiFi, lo primero es configurar el WiFi del ESP8266, en este caso en modo estación (WIFI_STA), es decir, para conectarse a un AP, pero en este caso nos desconectamos para poder escanear todas las redes.

Para scanear la red usamos la clase scan de WiFi: http://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/scan-class.html y este proceso tarda aproximadamente un segundo y devuelve un número entero con el número total de redes encontradas. Luego mediante una serie de métodos puedo obtener los datos de SSID, RSSI, etc… de las redes encontradas en el scaneo.

Luego saco por pantalla el nombre de la red (SSID), la potencia (RSSI) y si es una red protegida. En la línea 40 hay un operador que no es común es un operador ternario https://es.wikipedia.org/wiki/Operador_ternario que es un if simplificado.

Luego para acceder a los datos de las redes encontradas en el scan, uso las funciones SSID, RSSI y encryptionType para encontrar el SSID, la señal y el tipo de cifrado de las redes encontradas.

Para más información ver la documentación de la clase scan en : http://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/scan-class.html

Más ejemplos de uso de la clase scan: http://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/scan-examples.html

Ejercicio propuesto: modificar el ejemplo WiFiScan para que también busque las redes WiFi ocultas y también muestre el canal y la MAC del punto de acceso o BSSID https://es.wikipedia.org/wiki/BSSID

Solución: https://github.com/jecrespo/aprendiendoarduino-curso-esp8266-youtube/blob/master/WiFiScanMejorado/WiFiScanMejorado.ino

En este caso he usado dos funciones:

  • muestra_encriptacion() que me dice la encriptación de la red wifi que me da el método WiFi.encryptionType()
  • muestra_SSID() que me da el nombre de SSID y en caso que sea una red oculta se dice.

También uso tabuladores “\t” para mostrar la información de forma más clara.

Con la información obtenida de las MACs, RSSI y canal, usando la librería de Germán Martín puedo obtener la localización https://github.com/gmag11/ESPWifiLocation gracias a  Google Maps GeoLocation API. Un tutorial completo realizado por Luis del Valle puede verse en https://programarfacil.com/blog/arduino-blog/geolocalizacion-wifi-arduino-nodemcu/

Video. Preparación IDE Arduino para ESP8266

Una vez conocido el hardware del ESP8266 visto en el anterior vídeo https://www.aprendiendoarduino.com/2018/01/23/video-iniciacion-a-esp8266-hardware/ vamos a ver como preparar el entorno de programación de Arduino (IDE) para programar el ESP8266.

Estas son las dos placas que vamos a usar.

Instalación Drivers uso NodeMCU y Wemos D1 Mini

Para conectar las placas de prototipado NodeMCU y Wemos D1 Mini usamos el puerto USB y al contrario que con Arduino donde los drivers ya se instalan con el IDE, en este caso debemos instalar los drivers que emula un puerto serie (COM) en el USB de la placa utilizada.

Para el Wemos D1 Mini es necesario instalar el driver del conversor USB a serie que es el CH340G y excepto para el D1 mini Pro que es el chip CP2104:

Para el NodeMCU es necesario instalar el driver del adaptador USB CP210x de silicon labs:

Preparación IDE Arduino para usar con ESP8266

El ESP8266 dispone internamente de un pequeño procesador, prácticamente es capaz de replicar casi cualquier cosa los Arduinos puedan hacer. Usando el entorno de programación y el lenguaje de programación de Arduino podemos programar un ESP8266 cargando un firmware programado por nosotros mismo. Esto permite que la CPU ESP8266 y sus componentes Wi-Fi sean programados como cualquier otro dispositivo Arduino.

  • Puedes desarrollar con el mismo IDE que ya conoces
  • La comunidad ha hecho un Cross compiler, de forma que prácticamente utilizas los mismos comandos que utilizas con Arduino.
  • Puedes programar el procesador de tu ESP8266 exactamente como si fuera un Arduino con los mismos comandos, y en lo que se refiere a la WIFI, puedes olvidarte de los comandos AT, porque incluye una serie de librerías, que imitan la librería WIFI de Arduino con lo que se pueden reutilizar muchos programas hechos para Arduino y compilarlos para un ESP8266.  

El Arduino Core ESP8266 está disponible a través de GitHub: https://github.com/esp8266/Arduino

Reference de Arduino core para el ESP8266:

Listado de URLs para soporte de tarjetas no oficiales: https://github.com/arduino/Arduino/wiki/Unofficial-list-of-3rd-party-boards-support-urls

Podemos instalar el soporte a terceros en nuestro IDE simplemente añadiendo el texto “http://arduino.esp8266.com/stable/package_esp8266com_index.json” en propiedades:

Y luego desde el gestor de tarjetas dar a instalar al soporte para ESP8266.

Blink con ESP8266

Una vez preparado nuestro IDE de Arduino para programar placas con ESP8266, podemos probar que funciona. Para ello vamos a probar blink en el Wemos D1 Mini y en el NodeMCU.

Paso 1: Abrir el ejemplo blink del IDE de Arduino:

void setup()
{ pinMode(LED_BUILTIN, OUTPUT); }

void loop()
{ digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}

Paso 2: seleccionar la tarjeta que vamos a programar

  • Wemos R2 & D1 mini
  • NodeMCU 1.0 (ESP-12E module)

Paso 3: Cargar el programa y comprobar que el led integrado funciona.

Ejercicio Propuesto

Revisar los ejemplos para ESP8266 que aparecen en el IDE y ejecutar el scanner de redes wifi llamado “WifiScan”.