6 de enero de 2021

Conectar y programar una Pantalla LCD 20x4 en RPi4 con Python

Protocolo:

1) Activar I2C en RPi4

    $ sudo raspi-config

        3- Interface Options

        P5 I2C Enable/disable automatic loading of I2C Kernel Module

        Yes

 

2) Conectar el LCD +I2C al Gpio del RPi:

    I2C        Gpio RPi

    VCC    -    3.3V

    GND   -    GND

    SDA    -    #2 SDA

    SCL     -    #3 SCL

 

3) Instalar I2C-Tools y SMBUS:

    # aptitude install i2c-tools python3-smbus

 

4) Detectar el I2C

    $ sudo i2cdetect -y 1

         0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    00:          -- -- -- -- -- -- -- -- -- -- -- -- --
    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- --
    30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    70: -- -- -- -- -- -- -- --   

Vemos que en mi caso el I2C este en la dirección 27, esto lo utilizaremos en el siguiente paso.

 

 5) Descargar Librerías

Descargar las librerías lcd_display.py e i2c_lib.py de la dirección: https://github.com/paulbarber/raspi-gpio

 

    $ wget https://raw.githubusercontent.com/paulbarber/raspi-gpio/master/i2c_lib.py

    $ wget https://raw.githubusercontent.com/paulbarber/raspi-gpio/master/lcd_display.py


6) Modificar la librería lcd_display.py:

Modificación 1:

    $ nano  lcd_display.py

        ...
        # LCD Address
        ADDRESS = 0x27 <--- Modificar esto poniendo la direccion I2C

        ...

Modificación 2:

Para utilizar un display de 20×4 es necesario hacer algunas modificaciones adicionales,

Buscar las líneas (sobre la linea 90):

    """display a string on the given line of the display, 1 or 2, string is truncated to 16 chars and centred"""
    centered_string = string.center(16)
    if line == 1:
      self.write(0x80)
    if line == 2:
      self.write(0xC0)


y cambiarlas por:

    """display a string on the given line of the display, 1 or 2, string is truncated to 16 chars and centred"""
    centered_string = string.center(20)
    if line == 1:
      self.write(0x80)
    if line == 2:
      self.write(0xC0)
    if line == 3:
      self.write(0x94)
    if line == 4:
      self.write(0xD4)

Con esto se ha adaptado para un display con 20 caracteres horizontales y 4 líneas.

 

7) Probar el lcd: Script en python3:

#!/usr/bin/python3
from lcd_display import lcd
from time import sleep

lcd = lcd()

t = 0.4

while True:
    lcd.display_string("Hello World Display",1)
    sleep(t)
    lcd.display_string("Hello World Display",2)
    sleep(t)
    lcd.display_string("Hello World Display",3)
    sleep(t)
    lcd.display_string("Hello World Display",4)
    sleep(t)
    lcd.clear()
    sleep(t)

 

Bibliografía:

https://openhardware.pe/contactando-un-display-lcd-de-20x4-a-rasperrt-pi-mediante-i2c-i2c-iii/


Update:

La librería para programar el LCD es muy limitada. Hay otra mas completa en:

https://pypi.org/project/RPLCD/

https://rplcd.readthedocs.io/en/stable/usage.html#writing-to-display

RPi4 System monitoring with python3 in lcd display 20x4

Python3 script:

#!/usr/bin/python3

#Librerias
from time import sleep
from lcd_display import lcd
from gpiozero import CPUTemperature

import psutil

lcd = lcd()

temp1 = str(CPUTemperature())
temp2 = temp1.split("=")     
temp3 = "CPU.temp: "+temp2[1][:-1] + " C"

cpu1 = "CPU.load: " + str(psutil.cpu_percent()) + " %"
ram1 = "RAM.use: " + str(psutil.virtual_memory().percent) + " %"


while True:
    #print ("temp:",temp3)
    #print ("cpu: ", cpu1)
    #print ("ram: ", ram1)
    #print ("------------------")
    lcd.clear()
    sleep(0.3)
    lcd.display_string("--- RPi4.monitor ---",1)
    lcd.display_string(temp3,2)
    lcd.display_string(cpu1,3)
    lcd.display_string(ram1,4)
    sleep(15)

  

Bibliografía:

https://raspberrypi.stackexchange.com/questions/85415/how-to-directly-get-cpu-temp-in-python

https://stackoverflow.com/questions/276052/how-to-get-current-cpu-and-ram-usage-in-python

2 de diciembre de 2020

Instalar DNIe en Linux Mint 20 Ulyana

Para poder rusar el DNI electrónico en Linux necesitas un lector de tarjetas y el DNIe activado.

1) Descargar software oficial de la web de la policía.

https://www.dnielectronico.es/PortalDNIe/PRF1_Cons02.action?pag=REF_1112

2) Instalar el software en Linux Mint.

3) Conectar el lector de tarjetas a un puerto usb.

4) Comprobar que reconoce el lector:     

    # lsusb

5) Instala paquetes para interpretar el chip del DNIe con el lector) y herramientas para el manejo del lector:

        # aptitude install  pcscd pcsc-tools

6) Poner el DNIe en el lector y comprobar que lo reconoce:

        # pcsc_scan

7) Instalar la libreria de soporte para tarjetas opensc-pkcs11:

        # aptitude install opensc-pkcs11

8) localizar la ruta del archivo: opensc-pkcs11.so en el directorio pkcs11:

        # updatedb

        # locate opensc-pkcs11.so

            /usr/lib/x86_64-linux-gnu/onepin-opensc-pkcs11.so
            /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so
            /usr/lib/x86_64-linux-gnu/pkcs11/onepin-opensc-pkcs11.so
     --->   /usr/lib/x86_64-linux-gnu/pkcs11/opensc-pkcs11.so

 9) Abrir Firefox:

            Preferencias/Privacidad &Seguridad/Dispositivos de seguridad/Cargar
            Ponle un nombre representativo (DNIe)
            Pega la ruta (/usr/lib/x86_64-linux-gnu/pkcs11/opensc-pkcs11.so)     
            [ Aceptar ]
 
     Aparecerá el nuevo dispositivo que has creado en la lista de la izquierda.

 10) Descargar el certificado pkcs1-sha256WithRSAEncryption de la pagina oficial del DNIe:

https://www.dnielectronico.es/PortalDNIe/PRF1_Cons02.action?pag=REF_077 

 
11) Guarda el archivo .ZIP y des-comprímelo
 
12) En Firefox:
        Preferencias/Privacidad &Seguridad/Certificados/Importar
 
        Carga el archivo CRT que has descomprimido.
        Tras importar el certificado, acepta las dos casillas.
 
13)Reinicia Firefox con el lector de DNIe conectado
 
14)  Accede a la FNMT para verificar el funcionamiento del certificado:
 

Ref.:

https://lasegundapuerta.com/index.php/informatica/linux-y-software-libre/2422-instalar-dni-e-dni-electronico-en-ubuntu-18-04-y-20-04

 

7 de junio de 2020

Linux Mint 19.3 Tricia y Window10 con UEFI dual boot

Los sistemas de arranque con UEFI en general me han dado problemas de configuración.

Como norma es mejor instalar primero Windows10 y después el sistema linux ya este ultimo suele reconocer los sistemas previos instalados y configura grub2 para multi-boot system.

Pero esto no es siempre así !!!, especialmente con sistemas UEFI de arranque.



Protocolo:

0) Acceder a la BIOS del ordenados y activar el sistema de arranque EFI.


1) Con un USB de rescate Instalar Win10

2) Arrancar equipo con Usb-Live Linux Mint 19.3

3) En el espacio libre dejado por Win10 hacer una partición con gparted


4) Instalar Linux Mint en la partición creada para ello.

7) Queda un espacio al final del disco duro para Datos: crearemos aquí una partición desde Win10 para que sea NTFS y lo reconozcan los dos sistemas.



Así es como han quedado las particiones en mi sistema.


8) Para acceder a la partición de datos NTFS desde linux hay que desactivar el Inicio rápido de Win10.





27 de abril de 2020

Netflix en RPi3 con Raspbian Buster

Al intentar ver Netflix en mi RPI3 con Raspbian Buster esto es lo que NO me ha funcionado:

   - firefox-esr
   - instalar ultima versión de firefox con snap
   - Ad-on de Netflix en Kodi ...

Después de probar varias cosas ... finalmente esta es la que me ha funcionado con el navegador Chromium v78 instalado por defecto en RPI3 con raspbian:

lsb_release -a
No LSB modules are available.
Distributor ID:    Raspbian
Description:    Raspbian GNU/Linux 10 (buster)
Release:    10
Codename:    buster



- Instalar widevine: (permite ver contenido DRM)
    - descargar
    - descomprimir
    - instalar
    - copiar al dir de chromiun ...

- Cambiar el user gent por uno de Chrome de la version 78.
   (sin este paso no funcionaba)


Aquí se describe todo el proceso:
https://raspberryparanovatos.com/tutoriales/drm-navegador-raspberry-pi/

10 de abril de 2020

Reducir tamaño de fichero de un video con ffmpeg


Varias pociones:

1) La optimización que hace ffmpeg puede ser suficiente para reducir el tamaño del archivo mp4 de forma significativa.

ffmpeg -i file_inicial.mp4 file_final.mp4



2) Utilizando opciones mas avanzadas:


ffmpeg -i input.mp4 -vcodec libx264 -crf 27 -preset veryfast -c:a copy -s 960x540 output.mp4



Ref.:
https://stackoverflow.com/questions/39473434/ffmpeg-command-for-faster-encoding-at-a-decent-bitrate-with-smaller-file-size/39475766

Copiar archivos desde el Host a a la VM en VirtualBOx sin GuestAdditions

Una vía de intercambiar archivoe entre la máquina anfitrión y la virtualizada mediante las carpetas comprtidas. Para ellos hay que configurarlas y es necesario tener instalado el GuestAdditions en la máquina virtual. Esto NO es posible agunas veces y es entoinces cuando transferir archivos del anfitrión a la máuina virtual es un problema.
Una forma que me ha funcionado es crear un .iso con los ficheros a trasferir y montarlo en la maquina virtual.

9 de abril de 2020

Aumentar el sonido de un video con ffmpeg

Para aumentar el volumen de sonido de un video desde linux se puede hacer con ffmpeg:

ffmpeg -i inputfile -vcodec copy -af "volume=2" outputfile

El valor de "volume=" indica el aumento del volumen de la pista original de audio: 2 = x2, 0.5, etc.


https://trac.ffmpeg.org/wiki/AudioVolume

8 de abril de 2020

Grep recursivo

Algunos ejemplos avanzados de grep:

# Buscar en los todos los archivos recursívamente:
grep -rl "texto a buscar" [ruta de inicio de búsqueda]

# Búsqueda recursiva de los archivos del tipo indicado:
grep -ri --include=*.txt "texto a buscar" [*]

# Búsqueda recursiva de todos los archivos menos los binarios
grep -rI "TEXTtoSEARCH" [.]

22 de diciembre de 2016

hdparm: setting HD standby after 30 minutes of inactivity

El comando es:

Resultado de imagen de linux sleep# hdparm -S 241 /dev/disk/by-uuid/0df03-8gtg-4808-9abbb3f910a7bd83

Cambiando el UUID por el del disco duro correspondiente.

Lo he puesto en el archivo /etc/rc.local para que se ejecute al inicio del sistema.

Funciona también con HD externos USB.