Cada módulo M5StickC programable se conecta a los HATs del Rover y el JoyStick. Lo que vamos a programar con los M5StickC.
RoverC es una base de robot móvil omnidireccional programable compatible con M5stickC, y puede iniciarse insertando el M5stickC. El controlador principal de la base es el microcontrolador stm32f030f4. La base viene con motores de engranaje helicoidal N20 que son accionados directamente por un controlador de motor de cuatro canales. Estos motores están conectados a ruedas mecanum que pueden moverse en todas las direcciones. Además, se proporcionan dos puertos I2C compatibles con grove para facilitar la expansión de otros módulos. La base también es compatible con los bloques de LEGO y puede expandirse en su estructura. Se instala una batería 16340 en la parte posterior de la base para cumplir con los requisitos de potencia y resistencia del automóvil y se puede controlar mediante un interruptor independiente.
I2C Address 0x38
Para moverlo:
Antes de usar, asegúrese de que el RoverC está completamente cargado. Método de carga: inserte m5stickc en el roverc y conecte el cable USB para cargar.
JoyC es un módulo basculante diseñado para el M5StickC. Admite la operación con las dos manos. Chip de control principal STM32F030F4 integrado, que utiliza el protocolo de comunicación I2C y el host M5StickC para la transmisión de datos. El rango del joystick es 0 ~ 200, hay 12 LED RGB debajo de los joysticks izquierdo y derecho, y la parte inferior del joystick está equipada con una base de batería 16340 para una vida útil continua de la batería.
I2C Address 0x38
Como vamos a programar con UIFLow, lo primero es cargar el firmware de UIFlow con el M5Burner, que puede descargarse en: https://m5stack.com/pages/download. Cargar en ambos M5StickC.
ESP-NOW es un protocolo de comunicación de corto alcance y baja potencia que permite que múltiples dispositivos se comuniquen sin Wi-Fi. Este protocolo es similar a la conexión inalámbrica de 2,4 GHz de baja potencia que se encuentra en los ratones inalámbricos: los dispositivos se emparejan antes de comunicarse. Después del emparejamiento, las conexiones entre dispositivos son continuas, de igual a igual, y no requieren un protocolo de protocolo de enlace.
Para emparejar ambos dispositivos necesito saber su dirección.
Uso un M5Stack que recibe los datos y los muestra por pantalla
Los datos que mando son: Velocidad, Dirección y Ángulo, añadiendo el caracter V, D o A delante del valor.
Solo mando el valor si cambia más de 5 unidades sobre el valor anteriormente enviado. Ahorrando el envío de datos y mejorando la experiencia con el Joystick
Si el valor del Joystick es menor de 30 lo dejo en 0, porque sino los motores apenas se mueven y hace ruido.
Uso en cada receptor un contador para saber cuantos mensajes llegan
El M5Stick del rover lee el dato recibido, analiza si es Velocidad, Dirección y Ángulo y aplica el valor a los motores del rover.
BugC es una base de robot programable compatible con el M5StickC. Esto tiene cuatro motores de CC, controlador de motor, dos LED RGB, soporte de batería y un interruptor. La base Bugc debe usarse junto con el controlador M5StickC. La base viene con un microcontrolador STM32F030F4 que controla todos los motores y LED y esto es controlado a través del protocolo I2C (0x38) por el M5StickC que se encuentra en la parte superior de la base.
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.
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/
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.
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
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/
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.
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":""}]
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":""}]
[{"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.
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.
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.
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":""}]
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.
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:
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.
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/.
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”
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.
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