jueves, 20 de abril de 2023

Tira de LEDS elk-bledom. Bluetooth Control desde Debian 11

  Página principal

Tira de LEDS
elk-bledom bluetooth
Control desde Debian 11



El otro día me compré una tira de LEDS por 2€, no esperaba mucho.

Para hacerla funcionar debías instalar una aplicación en el teléfono.
Instalada la aplicación y alimentada la tira a un cargador, funcionaba bien.
Lo que más me sorprende en estas aplicaciones es que des permisos de ubicación.
Y esto fue lo que me indujo a crear una aplicación en Linux.

Buscando por internet encontré esta página:
https://linuxthings.co.uk/blog/control-an-elk-bledom-bluetooth-led-strip

Explicaba como funcionaba la comunicación entre el ordenador y la tira de LEDS mediante el bluetooth.
Probando todas la instrucciones conseguí manejar la tira de LEDS.

Como quería automatizar un poco el encendido y apagado de los LEDS me dispuse hacer una aplicación mediante comandos bash .
El primer problema es que debemos ser roor para mandar los datos mediante bluetooth.
Para arreglar esto hago lo siguiente:

chown root:root luces5
chown root:root bscan

chmod u+rwx,g+rx,o+rx bscan
chmod u+rwx,g+rx,o+rx luces5
chmod u+rwx,g+rwx tiraLed.py


Lo que hago es dar permisos de ejecución, pero no de escritura, de esta forma queda seguro el sistema, y podemos manejar los LEDS.

En realidad son 2 aplicaciones:
 La primera es bscan, que se encarga de scanear los dispositivos bluetooth existentes, para luego almacenar la dirección de ELK-BLEDOM en un fichero llamado blue.dat .
 La segunda es luces5, que se encarga de mandar los valores RGB a la tira con la dirección almacenada en
blue.dat .
Ejemplo:
    ./luces 255 0 0       Enciende luz roja

    ./luces 0 0 255       Enciende luz azul

Como me parecía poco interactivo, he realizado un pequeño programa en python para manejar los colores.


Espero que os sirva este artículo para vuestros proyectos.

VIDEO


PROGRAMA


Saludos.
Juan Galaz



Bibliografía:

https://linuxthings.co.uk/blog/control-an-elk-bledom-bluetooth-led-strip

jueves, 6 de abril de 2023

ESP32 Emulador ZX SPECTRUM - Vídeo PAL

  Página principal

ESP32
Emulador
ZX SPECTRUM - PAL


Cada uno tiene mitificado el ordenador en el cual empezó, y el mio es el ZX SPECTRUM.
Otro circuito que encontré para hacer con el ESP32 es un emulador de Spectrum.
    https://github.com/sdima1357/spectrum128_esp32_usb_host_pal_tv
Existe otro emulador pero la salida es por VGA, es mucha de mejor su calidad de video, pero no se podría conectar a televisiones antiguas.
El entorno de desarrollo es MX21, es una distribución basada en Debian, pero bastante mas actualizada, recomiendo que la probéis.

$ python3 --version
Python 3.9.2

$ uname -a
Linux mx21 6.0.0-6mx-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.0.12-1~mx21+1 (2022-12-15) x86_64 GNU/Linux

El primer paso es instalar el entorno de desarrollo ESP, esto me dio mucho trabajo, hasta que descubrí que con la última versión la 5, producía errores en la compilación, por lo que tuve que instalar la versión 4.4.4

mkdir -p ~/esp
cd ~/esp
git clone -b v4.4.4 --recursive https://github.com/espressif/esp-idf.git
cd ~/esp/esp-idf
./install.sh esp32

cd esp-idf/
. ./export.sh

Este último paso ./export.sh configura el entorno del terminal, si se cierra el terminal deberemos volver a ejecutarlo.

Ahora nos toca bajar el emulador desde la página del proyecto.

cd ..
git clone https://github.com/sdima1357/spectrum128_esp32_usb_host_pal_tv

No metemos en el directorio del proyecto y lo compilamos y grabamos el ejecutable en la ESP32 .

cd spectrum128_esp32_usb_host_pal_tv-main/
idf.py -p /dev/ttyUSB0 flash

Si todo fue bien, después de un rato de compilación, grabará los ficheros *.bin en el ESP32, para luego reiniciarse.
....
....
Writing at 0x000665df... (100 %)
Wrote 368880 bytes (223758 compressed) at 0x00010000 in 5.2 seconds (effective 567.4 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 103...
Writing at 0x00008000... (100 %)
Wrote 3072 bytes (103 compressed) at 0x00008000 in 0.1 seconds (effective 377.3 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...
Done

Si tenemos conectado la salida de vídeo a un televisor, veremos que arranca el emulador de el Spectrum.
Aconsejo que no conectéis la tarjeta SD la primera vez, de esta forma entraremos en el menú de selección de tipo 48K/128K
Tal y como compilamos las fuentes originales, el brillo es muy bajo, por lo que decidí estudiar el código.
En el fichero smain.c debemos retocar un poco el código para aumentar los niveles de salida de video.
Existen 2 líneas una comentada y otra descomentada, cambiarlas de forma que queden así.

//#define IRE(_x)            ((uint32_t)(((_x)+40)*255/3.3/147.5) << 8)   // 3.3V DAC
#define IRE(_x)          ((uint32_t)(((_x)+40)*255*2/3.3/147.5) << 8)   // 3.3V DAC

Esto lo que hace es cambiar los niveles iniciales de la señal de vídeo.
Ahora el nivel de brillo es bastante mejor, y aún se podría poner mejor, pero no he querido retocar el código original.

Las ROMS de programas del Spectrum deberán grabarse dentro de un directorio z48 si son del modelo 48K y en un directorio z128 si son del modelo de 128K.
Todo esto está documentado en el fichero README.md que se encuentra en las fuentes.
En este mismo fichero se explica la conexiones del ESP32 al teclado y a la SD.

1 Analog color PAL-TV 50 Hz output: (GPIO25)
2 Two  (bitband) USB-HID controllers (DP/DM) GPIO16/ GPIO17 - USB 1 GPIO18/ GPIO19 - USB 2
3 Emulation  AY-3-8910 (GPIO27)
4 SDCard control (.tap .z80 .sna) read pins:
    PIN_NUM_MISO 2
    PIN_NUM_MOSI 15
    PIN_NUM_CLK 14
    PIN_NUM_CS 13
5 Screen width F4/F5
6 Tape speed normal/fast F11/F12


Esquema de conexión.


He utilizado la placa de mi anterior montaje.


Menú de selección de ROMS


Jugando al JET PAC.


Muestra de una línea de la señal PAL.

Ya puedo jugar a mi juego preferido en el ZX Spectrum   PENETRATOR
Como podemos observar, la calidad del video compuesto no es el mejor, y sobre todo si utilizamos las pantalla planas, pero se puede jugar perfectamente.

Gracias Samsonov Dima


Saludos.
Juan Galaz



Bibliografía:

https://github.com/sdima1357
https://github.com/sdima1357/spectrum128_esp32_usb_host_pal_tv