21 de marzo de 2020

NodeMCU: 07_ESPNOW (Comunicación bidireccional) ¡¡EUREKA!!

Entro ahora en terreno desconocido. No he leído nada, por ahora, que me permita hacer una comunicación ESP-NOW de forma bidireccional con los ESP8266, aunque puedo obtener pistas de la entrada NodeMCU: 04_ESPNOW (Comunicación maestro-esclavo).

La idea y paso previo


La idea es conectar un NodeMCU a un LED en D1 y a un pulsador en D0. Y asimismo otro segundo NodeMCU. Cuando pulse el pulsador del primer NodeMCU debe iluminarse el LED del segundo, y viceversa. Vamos, este circuito para ambos:



Para probar que está todo bien conectado... Así, si pulsamos el botón, se enciende el LED del NodeMCU.


Y ahora el desafío: al pulsar el pulsador, se debe encender el LED del otro NodeMCU...

= = = = = = = = = = = 

El programa del primer NodeMCU

En este programa tenemos que hacer dos cosas (respecto a comunicaciones master-slave ESPNOW anteriores), que son:
  1. Utilizar el role 3 --> esp_now_set_self_role(3); 
  2. Utilizar la MAC de la otra estación en la línea de emparejamiento (esp_now_add_peer) y en el envío de datos (esp_now_send).
  3. Utilizar el callback de envío (esp_now_register_send_cb) y también el de recepción (esp_now_register_recv_cb), y en este último, programar los resultados. En mi caso, encender un LED.
Una vez comprendido el sistema, podremos hacer maravillas conectando ambos dispositivos. Habrá que ver cómo hacer para conectar más de uno... 

El programa del segundo NodeMCU


Es idéntico al primero. Lo único que cambia es que ahora el primer NodeMCU es la estación (STA) vista desde el segundo (AP), así que hay que poner la STA MAC del primero en esp_now_add_peer y esp_now_send.

= = = = = = = = = = = =

NOTA: en estos días de confinamiento forzoso, con la amenaza de una enfermedad infecciosa en las puertas, este resultado me ha puesto muy contento. ¡¡Por fin lo he entendido!!

20 de marzo de 2020

NodeMCU: 04_ESPNOW (Comunicación maestro-esclavo)

Intentando la comunicación ESP-NOW, me propongo hacer el esquema que propone Dani No en su web de esploradores. Intentaremos la conexión master + esclavo para después poder intentar hacer la master+esclavo en ambos dispositivos

Primero, averiguamos las MACS.


Según Dani No, cada dispositivo posee dos MACs distintas. Una para las comunicaciones como AP (AP MAC) y otra como station (STA MAC). Para averiguarlas escribimos el siguiente programa:

En mi caso, salen estos resultados:

Master

AP MAC: EE:FA:BC:C5:AC:AF
STA MAC: EC:FA:BC:C5:AC:AF

Slave

AP MAC: A6:CF:12:DF:5A:6B
STA MAC: A4:CF:12:DF:5A:6B


Tal como dicen en la web de Dani No,

La dirección MAC que debemos asignar a un par, depende de la conexión WiFi que tenga establecida y su papel en el par de comunicación. En la siguiente tabla se resumen las posibles combinaciones y la MAC a elegir:

TIPO DE CONEXIÓN WiFi
SIN CONEXIÓN AP STA AP+STA
PAPEL MAESTRO STA MAC AP MAC STA MAC* AP MAC
ESCLAVO STA MAC AP MAC* STA MAC STA MAC*

*Conexiones WiFi sugeridas por Spressif, en el caso de que se utilicen. (Maestro-STA y Esclavo-AP o AP+STA)

¿Cómo se establece una comunicación? En la web se nos hace un resumen de las funciones a incorporar, divididas en grupos. Podemos verlas mejor en ella. Simplemente me refiero ahora con el esquema:



Ejemplo

Circuito esclavo Circuito Maestro


Script del maestro




Script del esclavo






= = = = = = = = = 
Bibliografía
=========

https://www.esploradores.com/practica-6-conexion-esp-now/
https://randomnerdtutorials.com/esp-now-two-way-communication-esp32/


19 de marzo de 2020

NodeMCU: 06_Conectamos nuestro NodeMCU como station a nuestro router de casa (AP)

En este caso, nuestro NodeMCU está conectado a un LED como en el anterior. Las conexiones son las mismas.

Por otra parte, ahora necesito la SSID y la contraseña de nuestro router inalámbrico. Ese será nuestro punto de acceso. Una vez conectados, nuestro NodeMCU como cliente estará a la espera de una petición.

Esa petición proviene del navegador de otro dispositivo, como nuestro móvil o nuestro ordenador. En él, escribiremos la IP del NodeMCU al que nos hemos conectado. La IP aparece en el monitor Serie al resetear nuestro NodeMCU.

Se han añadido al programa original una línea para poder escribir acentos (codificación UTF-8) y las etiquetas body.

Además, si abrimos el puerto 80 en nuestro router y hacemos una redirección de las peticiones por este puerto a la IP de nuestro NodeMCU, podremos controlarlo desde el exterior. Se explica para un router determinado en el segundo enlace de la bibliografía.



Bibliografía
========

https://www.esploradores.com/practica-3-station-conexion-con-access-point/
https://www.esploradores.com/practica-4-station-conexion-desde-cualquier-sitio-del-mundo-con-access-point-encendido-y-apagado-de-un-led/


18 de marzo de 2020

NodeMCU: 05_Punto de acceso_y_web_server.


El código que convierte el NodeMCU en punto de acceso es el siguiente:


En el programa, lo importante es la orden WiFi.softAP(ssid, password);   ue convierte nuestro NodeMCU en un punto de acceso.

= = = = = = = = = = 

En el siguiente programa, profundizamos en este concepto. No sólo convierto nuestro NodeMCU en punto de acceso sino que a través de un puerto emite contenido en HTML. Este contenido puede ser captado desde un navegador en un móvil, por ejemplo, y ser usado para mandar información de vuelta al AP, pudiendo cambiar un estado.

En el siguiente ejemplo, modificación del ejemplo que se cita en la bibliografía de la web https://www.esploradores.com/, puede actuarse desde el navegador encendiendo u apagando un LED.



.

Bibliografía
=========
https://www.esploradores.com/access-point-servidor-web-nodemcu/

https://tttapa.github.io/ESP8266/Chap01%20-%20ESP8266.html

16 de marzo de 2020

NodeMCU: 03_ESPNOW (Emisor y receptor - primeras pruebas)

Receptor



===============

Emisor


Al principio pensé que no funcionaban los programas. Pero algo me hizo sospechar de una unidad... Así era. Ambos programas funcionan perfectamente.

NodeMCU: 02_ ESPNOW (Comunicación punto a punto // funciones usadas )

Pretendo hacer lo siguiente:
  1.  Un módulo ESP8266 actuará como emisor y el otro como receptor
  2.  Mandaremos una estructura de datos, que puede contener variables de tipo char, int, float, String, boolean. Se podrá modificar para enviar otra estructura de datos.
  3. ESPNOW trabaja con funciones callback (de retorno) que serán llamadas cuando se produce un evento: se recibe o se envía un mensaje, o se produce un error en el envío.
  4. Respecto al emisor:
    1.  Se inicializa ESP-NOW
    2. Se creará una función callback (OnDataSent) que se ejecutará al enviar un mensaje, y así sabremos si el mensaje se ha enviado con éxito o no.
    3. Añadiremos un receptor a través de su dirección MAC.
    4. Enviaremos el mensaje a este receptor
  5. Respecto al receptor:
    1.  Se inicializa ESP-NOW
    2.  Se creará una función callback (OnDataRecv) que se ejecutará cuando se reciba un mensaje.
    3. Dentro de esa función, se almacenará una variable con el valor del mensaje, y se podrá realizar cualquier tarea con dicha información.
==============

Las funciones que usa el protocolo son:

  1. esp_now_init() --> Inicializa ESP-NOW. hay que inicializar Wi-Fi antes. Si tiene exito, retorna 0.
  2. esp_now_set_self_role(role) --> establece perfil; puede ser. ESP_NOW_ROLE_IDLE = 0,
    ESP_NOW_ROLE_CONTROLLER, ESP_NOW_ROLE_SLAVE, ESP_NOW_ROLE_COMBO, ESP_NOW_ROLE_MAX
  3. esp_now_add_peer (uint8 mac_addr, uint8 role, uint8 channel, uint8 key, uint8 key_len) --> llamar a esta función para emparejarse a otro nodeMCU
  4. esp_now_register_send_cb() --> registra una función callback que se dispara tras enviar datos, y devuelve si la entrega tuvo éxito o no.
  5. esp_now_register_rcv_cb() --> registra una función callback que se dispara tras recibir datos via ESP-NOW.

Más información en: 








NodeMCU: 01_ ESPNOW (Averiguar MAC)

En primer lugar, en enlace que contiene la guía que voy a seguir se encuentra en:

https://randomnerdtutorials.com/esp-now-esp8266-nodemcu-arduino-ide/

https://randomnerdtutorials.com/projects-esp8266/

Y, punto por punto:
  1. No instalo el gestor de tarjetas porque ya lo tenía instalado. De todas formas, la guía para hacerlo (https://randomnerdtutorials.com/how-to-install-esp8266-board-arduino-ide/) aparece en la web. 
  2. Cargo el siguiente programa para averiguar las MACs. Los "NodeMCU" se llevan mal con el puerto serie en el setup. Probablemente tendrás que pulsar RESET para que aparezca la información en la pantalla.
  3. La salida del puerto serie es algo como lo que sigue: "ESP8266 Board MAC Address:  DC:4F:11:22:AA:CC " (la MAC es inventada). Apunta la MAC.

============================================
BIBLIOGRAFÍA
============================================
https://hackaday.io/project/164132-hello-world-for-esp-now
https://www.fernandok.com/2018/03/esp32-com-protocolo-esp-now.html

https://www.instructables.com/id/ESP32-With-ESP-Now-Protocol/
https://espressif.com/sites/default/files/documentation/esp-now_user_guide_en.pdf

http://www.esploradores.com/practica-6-conexion-esp-now/

 https://youtu.be/6NsBN42B80Q

 Parece que no hay que instalar la librería espnow.h, solo llamarla ¿¿??

15 de marzo de 2020

Recopilación de programas gratuitos que sirven para hacer videotutoriales


RecordMyDesktop: grabación de Escritorio (muy bueno). Sistemas Linux. Instalación nueva en http://ubuntuhandbook.org/index.php/2020/01/install-vokoscreenng-3-0-ppa-ubuntu-18-04-19-10/

VokoScreen: grabación de Escritorio con posibilidad de grabar la entrada de la videocámara (bueno). Sistemas Linux y Windows (no lo he testeado en Windows).

Screen Cast: app de móviles que permite lanzar lo que se ve por la pantalla a la red. Se visualiza en el ordenador que esté grabando con los programas anteriores.

Edición de vídeo en Ubuntu: Kdenlive (muy bueno), Openshot (más simple - también disponible en Windows aunque no lo he usado con él).