sábado, 19 de diciembre de 2020

Temp2LCD (Gambas + Arduino)

Como muestra el video se trata de una pequeña aplicación hecha en Gambas y un sketch para el Arduino.

Para este ejemplo estaré usando un Arduino UNO.

La aplicación transmite las temperaturas del CPU y el GPU hacia el Arduino vía el puerto USB.
Para que funcione correctamente es necesario tener instalado lm-sensors y nvidia-smi.

Por el momento la aplicación solo funciona con tarjetas NVIDIA.

Para obtener la temperatura del CPU la aplicación utiliza un script que encontré en https://stackoverflow.com/questions/50686262/how-to-get-average-cpu-temperature-from-bash.
Lo interesante del script es que devuelve un promedio de temperatura de todos los cores disponibles. Alteré levente el script para que solo devuelva el valor numérico y la unidad en grados celsius.
Hay muchos comentarios en el código fuente del programa por si les interesa ver como funciona paso a paso.
Respecto del sketch del Arduino, es bastante sencillo. Recibe la información enviada por la aplicación y la muestra en un display LCD (16x2) conectado de la siguente manera:

LCD PIN Arduino
VCC 5V
GND GND
SCL A5
SDA A4

También hay conectado un LED en el Pin 13 (recuerden que este pin ya cuenta con una resistencia). Se puede prescindir del mismo. El led se enciende cada vez que se produce el evento Serial.available(), por lo que se encenderá cuando reciba o envíe información.
El sketch también reenvía los datos recibidos a la aplicación. Me fué bastante útil esto para observar como era transmitida la información, por eso lo dejé.
Tuve al algunos problemas al principio, la información no llegaba correctamente al Arduino y los ejemplos que encontraba en internet no eran de mucha utilidad.
Leyendo algunas entradas en el el sitio de Arduino me pareció que la solución más sencilla era enviar desde la aplicación toda la información seguida de la cadena ‘\n’ y recibir la información en el Arduino utilizando el evento Serial.readStringUntil(‘\n’).

Espero que tanto la aplicación y el stetch les sirvan de ejemplo si están investigando o quieren observan como es la comunicación entre el Arduino y la PC.
Seguramente estaré haciendo más aplicaciones parecidas probando a la inversa (recibir información del Arduino).

Dejo el link al repositorio de GitHub para bajar el instalador en formato debian, el código fuente del programa y el sketch para Arduino:
https://github.com/mcattani/temp2lcd

Saludos y si les interesó por favor dejen un comentario!.

martes, 8 de diciembre de 2020

RamDrive

 

En esta oportunidad les presento una pequeña APP que hice para poder crear unidades con memoria RAM (o RAM DRIVES).
Trabajar con estas unidades tiene sus ventajas y desventajas.

  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).

Normalmente estas unidades se crean mas o menos así:

mkdir /RUTA/CARPETA ( ej. /mnt/ramdisk)
mount -t [TYPE] -o size=[SIZE] [FSTYPE] [MOUNTPOINT]

Existen dos tipos de unidades.

  • ramfs
  • tmps

No voy a explicar las diferencias entre una y otra. Para el que le interese acá hay una una buena explicación de las diferencias. El programa usa por defecto tmps.

Esta pequeña APP permite crear este tipo de unidades; asignándoles tamaño y montándolas.

Estas unidades son muy útiles para realizar ciertos trabajos “pesados”, si cuentan con una buena cantidad de memoria RAM, prueben compilar un kernel alojado en una de estas unidades, ahí se va a notar mucho la diferencia de velocidad. Lo mismo si tienen que encodear un video, por ej.

Uno de los usos típicos que aparecen en internet es la de crear una de esta unidades y utilizarlas para almacenar el caché del navegador que estemos usando. De esa manera, con cada reinicio se limpia el caché y segundo, la “velocidad de navegación aumenta“, dado que tenemos guardadas la caché en una unidad de acceso veloz.

Vale la pena probar.

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

saludos!