sábado, 18 de marzo de 2023

Wake On Lan - ESP8266 - Enciende la PC de manera remota

Finalmente me compré una placa con el integrado ESP8266, en este caso una placa de desarrollo NodeMCU ESP8266 V3. Hace rato que quería probar esta familia de placas que, entre otras cosas, tienen conectividad WiFi.

No voy a entrar en muchos detalles respecto de las características de la placa, no es el fin de este post, pero resumidamente son las siguientes:

  • Procesador: ESP8266 @ 80MHz (3.3V) (ESP-12E)
  • 4MB de memoria FLASH (32 MBit)
  • WiFi 802.11 b/g/n
  • Regulador 3.3V integrado (500mA)
  • Conversor USB-Serial CH340G / CH340G
  • 9 pines GPIO con I2C y SPI
  • 1 entrada analógica (1.0V max)
  • 4 agujeros de montaje (3mm)
  • Pulsador de RESET
  • Entrada alimentación externa VIN (20V max)

En realidad la primera placa que compré fue una Wemos D1 Mini pero no hubo manera de hacerla andar. Puedo subir sketchs desde el IDE de Arduino pero no puedo utilizar ninguno de los pines. ¯_(ツ)_/¯

En fin, desde hace tiempo que tenía ganas de probar la función WOL de la placa madre de mi PC.

WOL o Wake on Lan es un estándar de redes que permite encender la pc de manera remota. En mi caso, que utilizo Gnu-Linux como sistema operativo, no tuve que hacer más que habilitar la opción de wake on lan en el BIOS de la pc.

En este link les dejo un artículo de la web Xataca que explica como habilitar esta función tanto en el Bios como en Microsoft Windows.

Wake-on-LAN está implementado utilizando un paquete especialmente diseñado llamado “Paquete mágico”, el cual es enviado a todos los equipos en la red, entre ellos el dispositivo a ser encendido. El “paquete mágico” contiene la dirección MAC del equipo destino, un identificador numérico que tiene cada Tarjeta de Red u otros dispositivos de red en la computadora, que posibilita ser reconocido dentro de la red. (…) Si un “paquete mágico” es recibido y está direccionado a la dirección MAC del dispositivo, la Tarjeta de Red envía la señal a la fuente de energía o tarjeta madre para iniciar el encendido del sistema, muy similar a lo que acontece cuando se presiona el botón de encendido. Fuente: Wikipedia

Para este proyecto entonces usaremos la placa mencionada arriba, dos leds de diferente color (en mi caso usé un led RGB) y un pulsador. La idea es que el ESP8266 se conecte a nuestro router (nos señale con los leds cuando se está conectando y cuando la conexión ha sito establecida exitosamente) y cuando presionamos el pulsador se envía el paquete mágico.

Vamos a hacer uso de tres librerías que pueden instalarse vía el Gestor de de Librerías (Herramientas -> Administrar Bibliotecas…)

  • La primera es WiFiUdp.h que nos permite crear una instancia de la clase WiFi UDP que puede enviar y recibir mensajes UDP.

  • La segunda es WakeOnLan.h que es la librería que nos permitirá armar de manera sencilla el paquete mágico y enviarlo. Toda la información referente a esta librería la pueden encontrar en este link.

  • La tercera es Debouncer.h que no es estrictamente necesaria pero a mi me resulta muy útil y sencilla para evitar los “rebotes” del pulsador y la uso habitualmente (para este sketch en particular los rebotes no son un problema).

Los rebotes son las falsas pulsaciones (ruido) que se producen al hacer falsos contactos en el interruptor. Si te interesa saber más sobre los rebotes recomiendo visitar esta página.

Dejo el diagrama de conexiones. Como comenté arriba estoy usando un led RGB de cátodo común, ustedes pueden utilizar LEDS comunes (recuerden conectarlos a GND utilizando una resistencia de 220ohms). El uso de los LEDS no es necesario, pero me gustan los indicadores visuales.

Flashing Leds

Como siempre el código está bastante comentado para que en cada paso se entienda lo que estamos haciendo.

Dejo debajo el link al proyecto en GitHub. Incluyo también un script en python llamado “wake_on_lan.py” (estoy aprendiendo python XD) que funciona perfectamente para encender remotamente una pc y en donde se puede ver con claridad como se arma el paquete mágico.

GitHub: https://github.com/mcattani/esp8266_wake_on_lan

Como siempre si este proyecto te gustó / interesó no dudes en compartirlo y dejar algún comentario, se aprecia.

Saludos!

miércoles, 21 de diciembre de 2022

Cmd2PC (envía comandos desde Android a la PC)


En esta ocasión traigo este interesante proyecto; se trata de una aplicación para Android hecha en Mit App Inventor que permite ejecutar determinados comandos en la PC.

A través de bluetooth la aplicación envía caracteres que serán recibidos por un Pro Micro con un módulo HC-06 conectado a él.

Pro Micro es una pequeña y completa placa basada en el ATmega32U4, el mismo microcontrolador del Arduino Leonardo.

El microcontrolador entonces interpretará estos caracteres y ejecutará los comandos asociados en la PC. Como se puede observar en el video son comandos correspondientes al sistema operativo Gnu-Linux pero el código es fácilmente adaptable para cualquier otro. Como comenté en esta entrada: “Una de las funcionalidades más interesantes de este microcontrolador es la de poder funcionar como un HID (Human Interface Device), pudiendo emular un teclado o mouse.”

Utilizaremos la librería SoftwareSerial.h para realizar la conexión con el módulo HC-06 y la librería Keyboard.h para emular el teclado.

Para este proyecto elegí los siguientes comandos que el Pro Micro escribirá en la pc:

  • systemctl poweroff (apaga la pc)
  • systemctl reboot (reinicia el sistema)
  • systemctl suspend (pone la pc en estado de suspensión)
  • loginctl lock-session (bloquea el sistema)
  • loginctl unlock-session (desbloquea el sistema)

El Pro Micro envía primero la instrucción ALT+F2 para poder luego ingresar cualquiera de los comandos arriba enumerados.

La conexión del módulo bluetooth hc-06 es muy sencilla:

HC-06 Pro Micro
VCC 5v
GND GND
TX D8
RX D9

La aplicación para Android también es muy sencilla, debajo dejaré los links a la galería de Mit App Inventor para que puedan hacer copia de la App, igualmente en el repositorio de GitHub dejaré también una captura de pantalla de la configuración de los bloques.

El funcionamiento de la app es muy sencilla cada botón tiene asignada una acción que es la de enviar un caracter “L-U-S-P-R” (bloquear, desbloquear, suspender, apagar y reniciar correspondientemente) vía bluetooth al Pro Micro.

Links:

GitHub: https://github.com/mcattani/cmd2pc

Mit App Inventor: https://gallery.appinventor.mit.edu/?galleryid=e26f7e65-c1a8-4855-8d1e-1716ecdd34e2

Espero les haya interesado. Como siempre si este post les resultó de interés no duden en compartirlo en sus redes y comentar!

Saludos.




lunes, 24 de octubre de 2022

RamDrive (v3)


Desde hace un tiempo y por diferentes motivos volví a utilizar unidades creadas con memoria ram o ramdrives (mas que nada para codificar video) utilizando la aplicación que hice hace algún tiempo publicada aquí.

Me pareció que la aplicación podía actualizarse (quiero creer que aprendí algo todo este tiempo XD ) sobre todo en lo que aspecto visual se refiere.

No voy a repetir todo el post respecto a qué son este tipo de unidades. Solo voy a volver a destacar dos aspectos que me parecen importantes:

  1. La unidad solo puede almacenar información durante la sesión en curso. Si se apaga o reinicia el sistema, toda la información de la misma se borrará.
  2. La velocidad de lecto/escritura de la RAM es muchísimo mas alta que la del disco (incluidas unidades USB y discos SSD).

Pueden dárseles varios usos a estas unidades, vuelvo a recomendar que lean la entrada original -> RamDrive

Para esta versión (v3) se volvió a diseñar toda la interfaz gráfica. No más pantallazos tipo wizard. Como pueden ver en el video todo está en el mismo cuerpo del programa. Con el uso de contenedores (de a poco le estoy tomando la mano) ya debería no haber problemas al redimensionar la pantalla principal. Debería verse bien tanto en Gtk3 como en Qt.
Se agregó también la búsqueda para nuevas versiones en caso de que haya futuras modificaciones.

Espero les sirva.

Si esta entada les gustó / interesó no duden en compartir y comentar debajo.

Link al repositorio de GitHub: https://github.com/mcattani/ramdrive

Saludos!

miércoles, 5 de octubre de 2022

MyNotesDB


Durante la pandemia de Covid-19 muchas clases se dictaron de manera virtual. Posiblemente esta modalidad ha llegado para quedarse.

Este programa (escrito en Gambas3) nació de la necesidad de tener un lugar donde almacenar de manera ordenada las notas tomadas en dichas clases.

El programa utiliza una base de datos Sqlite3 para almacenar la información.

Como se ve en la imagen esta información se compone de varios campos: id (que se genera automáticamente y no se puede modificar), fecha, autor, clase, lugar, tags (palabras clave) y contenido.

El programa permite realizar búsquedas en cualquiera de estos campos (excepto ID que no tiene mucho sentido). Tras realizar la búsqueda la lista de entradas se reduce a los resultados de la misma, luego se puede refrescar la lista para volver a mostrar todas las entradas.

El programa permite también realizar una limpieza de la base de datos a través del comando vacuum de sqlite. Para más información sobre el mismo sugiero visitar este link,

También se pueden exportar las entradas a una variedad de formatos:

  • Texto plano .txt
  • Texto plano .md
  • Word (docx)
  • HTML

Se utiliza el formato markdown como referencia. Formato que suelo utilizar para tomar apuntes.

Para exportar las entradas es necesario tener instalada la aplicación pandoc, que es la realiza la conversión entre los formatos (excepto para exportar en formato de texto plano)

sudo apt install pandoc

Dejo en las carpetas Archlinux y Debian los instaladores correspondientes. De producirse fallas con los mismos recomiendo bajar Gambas3 en su totalidad.

sudo apt install gambas3*

Como siempre el programa está ampliamente comentado y lo pueden modificar para que se ajuste a sus necesidades.

Link al proyecto en GitHub: https://github.com/mcattani/mynotesdb

Si te gustó / interesó esta entrada no dudes en dejar un mensaje y compartir.

Saludos!

lunes, 15 de agosto de 2022

Probando una Matriz Led 8x8 c/ chip MAX7219


Hace poco recibí un módulo de matriz led 8x8 que utiliza el chip MAX7219.

Este módulo integra una matriz de leds de 8x8 y un chip MAX7219, lo que permite trabajar rápidamente con matrices led y utilizando solo 4 cables para la comunicación. Estos módulos se pueden conectar en cascada utilizando un solo bus SPI y mostrar textos o gráficos más grandes. (Fuente)

Con respecto al chip:

El chip MAX7219 puede controlar 64 leds de forma independiente (u 8 dígitos de 7-segmentos), incluye un decoder BCD, posee una memoria RAM estática interna de 8x8. Permite el control del brillo de forma digital y analógica. (Fuente)

Como se ve en el video en esta serie de proyectos vamos a probar la funcionalidad de este módulo. Cabe aclarar que se pueden conectar varios de estos en cascada (para mostrar texto por ejemplo) en este caso utilizaremos solamente uno.

Un excelente tutorial sobre desplazamiento lateral de mensajes utilizando una serie de estos módulos pueden encontrarse en este enlace.

Para el primer proyecto utilizaremos dos sensores tilt (KY-017) que mostrarán la imagen de una flecha según el lado en el que se incline la protoboard; en el segundo proyecto utilizaremos un potenciómetro para modificar el progreso de una barra; en el tercer y cuarto proyecto utilizaremos un pulsador para mostrar números y símbolos.

La conexión del módulo es muy sencilla:

Señal Pin
VCC 5V
GND GND
DIN D11
CS D10
CLK 13

En estos proyectos utilizaremos la librería LedControl.h que se puede encontrar en el IDE de Arduino. 

Como se ve en los sketch (ampliamente comentados, como siempre) esta librería es bastante sencilla de usar; existen otras un poco más complejas y bastante útiles si vamos a utilizar más módulos y queremos por ejemplo, mostrar texto.

MD_MAX72XX es una librería que sirve para tal fin y viene con varios ejemplos. Se puede descargar desde el IDE de Arduino o desde este link.

Recomiendo mucho la siguiente web: https://xantorohara.github.io/led-matrix-editor/ en esta vamos a poder crear de manera sencilla todo tipo de imágenes y caracteres que se nos ocurra. Fue la que utilicé para crear las flechas y los gráficos de barra para los primeros dos proyectos y de donde saqué los símbolos y números para los siguientes.

Para ir finalizando les dejo un par de links útiles:

El datasheet correspondiente al chip MAX7219:  

https://datasheets.maximintegrated.com/en/ds/MAX7219-MAX7221.pdf

El datasheet correspondiente a la matriz de led utilizada:  

https://cdn-shop.adafruit.com/datasheets/KWM-30881XVB.pdf

Finalmente les dejo el link al proyecto en GitHub donde se encuentran los 4 sketch utilizados y los diagramas de conexión:
https://github.com/mcattani/matrixLed_MAX7219

Si les gustó / interesó este proyecto por favor no olviden comentar y difundir.

Saludos!