tech explorers, welcome!

Categoría: Raspberry Pi

Configuración de ventilador con indicador de estado para Raspberry Pi 5 con Ubuntu

El calor ha llegado de nuevo y notaba mi Raspberry Pi demasiado caliente teniendo en cuenta que tiene el ventilador oficial incrustado, con temperaturas que fácilemnte superaban los 60ºC.

Desde que le instalé Ubuntu, el ventilador no parecía funcionar bien, pero parece que es algo que se ha resuelto con las versiones más recientes del kernel.

Así que aquí os traigo una configuración del ventilador para Ubuntu y una visualización de su estado.

Comprobación del ventilador

Primero comprobemos que el ventilador funciona correctamente accionándolo manualmente.

Actualiza tu sistema operativo para contar con los últimos parches que arreglan el funcionamiento del ventilador. Mi última versión es Ubuntu Linux 24.04.2.

Ahora deberías ser capaz de encender el ventilador manualmente introduciendo el siguiente comando en la terminal:

echo 4 | sudo tee /sys/class/thermal/cooling_device0/cur_state

Un valor de 4 encenderá el ventilador a sus máximas revoluciones. Puedes cambiar este valor entre 0 y 4.

Si lo anterior funcionó correctamente oirás bastante ruido del ventilador. Ahora puedes apagarlo cambiando el valor del comando anterior a 0:

echo 0 | sudo tee /sys/class/thermal/cooling_device0/cur_state

Verás que cambiando el valor del archivo cur_sate manualmente se cambia la velocidad del ventilador. Eso es exactamente lo que ahce el demonio automáticamente con el ventilador, una vez configurado. Así que monitorizaremos este valor más tarde para averiguar si el ventilador está funcionando (valor devuelto != 0):

cat /sys/class/thermal/cooling_device0/cur_state

Configuración del ventilador

El ventilador no viene preconfigurado en las versiones anteriores del kernel de Ubuntu para Raspberry Pi y no sé si lo hace ahora por defecto.

Comprobémoslo editando el archivo config.txt ubicado en /boot/firmware buscando unas líneas similares a las siguientes:

dtparam=fan_temp0=58000
dtparam=fan_temp0_hyst=10000
dtparam=fan_temp0_speed=200

Si no las encuentras, añádelas justo al final del archivo.

Si quieres puedes editar los valores libremente teniendo en cuenta que:

fan_temp0=58000 indica la temperatura de activación que enciende el ventilador

fan_temp0_hyst se refiere a la reducción de temperatura que apaga el ventilador respecto a la de activación (10000 por debajo de 58000 = 48000)

fan_temp0_speed indica la velocidad del ventilador de 0 a 255

Así que dejamos nuestro ventilador configurado para encenderse a 200rpm si la temperatura supera 58ºC y apagarse cuando baje 10ºC (~48ºC).

Ahora para aplicar estos cambios debemos reiniciar el sistema.

Monitorizar el ventilador

Ya monitorizaba ciertas variables de mi Raspberry Pi 5 usando una pantalla OLED, como explicaba en este post:

https://theroamingworkshop.cloud/b/2683/carcasa-pantalla-oled-con-panel-de-estado-para-raspberry-pi

Ahora vamos a añadir un indicador del estado del ventilador!

He añadido un par de líneas al script de python para obtener el estado del ventilador usando el comando que vimos anteriormente:

#Fan ON/OFF
cmd = "cat /sys/class/thermal/cooling_device0/cur_state"
Fan = subprocess.check_output(cmd, shell=True).decode("utf-8")

Un poco más abajo leo una imagen .png para dibujar el ventilador:

fan_img=Image.open("~/Documents/OLED/fan-icon.png")
fan_img = fan_img.resize((30, 30), Image.BICUBIC)
fan-icon.png

Y justo a la hora de mostrar todo en pantalla, añado el icono del ventilador si detectamos que está encendido (distinto de 0):

if int(Fan)!=0:
    bg.paste(fan_img,(90,55))

Todos estos cambios están actualizados en el repositorio de Github repository:

https://github.com/TheRoam/RaspberryPi-SSD1351-OLED

Y ese es un indicador bastante chulo para tu Raspberry!

Nos vemos! 👋

🐦 @RoamingWorkshop

Carcasa + pantalla OLED con panel de estado para Raspberry Pi

Estaba tentado de intercambiar la carcasa de mi Raspberry Pi 4 a la Pi 5, pero mírala…

  • 16×2 pantalla LCD de un Arduino Starter Kit
  • Programa en C++ con la librería WiringPi
  • Carcasa casera

Estaba realmente orgulloso de ella en su momento y fue un buen aprendizaje allá por 2020, pero seguro que lo podía hacer mejor. Seguro que me podía currar un pedazo panel de estado!!

Componentes

  • Raspberry Pi (probablemente sirva en cualquiera de ellas)
  • Pantalla OLED (RGB de 1.5 pulgadas es ideal)
  • PCB placa de prototipos
  • Cables
  • Material de soldadura
(cortesía del modelo epiCRealism en ComfyUI)
  • Carcasa (impresa en 3D o elaborada a mano)

Configuración de software

Configuraré la Raspberry para interactuar con la pantalla usando python, mediante la librería de Adafruit Circuitpython para el controlador SSD1351 de la pantalla:
https://learn.adafruit.com/adafruit-1-5-color-oled-breakout-board/python-wiring-and-setup#setup-3042417

Es tan simple como instalar Circuitpython con el siguiente comando:

sudo pip3 install --upgrade click setuptools adafruit-python-shell build adafruit-circuitpython-rgb-display

Si tienes problemas con tu versión de python para encontrar Circuitpython, incluye --break-system-packages al final. (No romperá nada hoy, pero no te acostumbres a ello...)

sudo pip3 install --upgrade click setuptools adafruit-python-shell build adafruit-circuitpython-rgb-display --break-system-packages

Cableado

Ahora conectaremos la pantalla según las indicaciones del fabricante. La mía es esta de BuyDisplay:

https://www.buydisplay.com/full-color-1-5-inch-arduino-raspberry-pi-oled-display-module-128x128

OLED DisplayRaspberry Pi (pin #)
GNDGND (20)
VCC3V3 (17)
SCLSPI0 SCLK (23)
SDASPI0 MOSI (19)
RESGPIO25 (22)
DCGPIO 24 (18)
CSSPI0 CE0 (24)

Usa un sitio como pinout.xyz para encontrar una configuración adecuada para tu cableado.

Estás listo para hacer algunos tests antes de mover tu diseño a la PCB.

Configuración de script

Puedes probar el script demo de Adafruit. Solo asegúrate de escoger la pantalla adecuada y actualiza los cambios en la asignación de pines (usa los números/nombres IO en lugar de los números físicos del pin):

# Configuration for CS and DC pins (adjust to your wiring):
cs_pin = digitalio.DigitalInOut(board.CE0)
dc_pin = digitalio.DigitalInOut(board.D24)
reset_pin = digitalio.DigitalInOut(board.D25)

# Setup SPI bus using hardware SPI:
spi = board.SPI()

disp = ssd1351.SSD1351(spi, rotation=270,                         # 1.5" SSD1351
    cs=cs_pin,
    dc=dc_pin,
    rst=reset_pin,
    baudrate=BAUDRATE
)

Ensamblaje

Aquí están los archivos STL en 3D para este diseño de carcasa:

Ahora pongámoslo todo junto:

  1. Atornilla el marco a la pantalla
  2. Suelda los 7 pines de la pantalla a los 7 cables a través de la PCB
  3. Cablea todas las conexiones a la Raspberry Pi
  4. Atornilla las partes superiores e inferiores de la carcasa entre sí
  5. Coloca la pantalla sobre el soporte

Resultado final

He compartido el script que se ve en las imágenes a través de github:

https://github.com/TheRoam/RaspberryPi-SSD1351-OLED

Actualmente muestra:

  • Fecha y hora
  • Estadísticas del sistema (SO, uso del disco y temperatura de CPU)
  • Tiempo local de la World Meteorological Organization (actualizado cada hora)

Y así es como acaba quedando. Mucho mejor verdad?

Como siempre, disfruta cacharreando, y hazme llegar tus comentarios o dudas a través de Twitter!

🐦 @RoamingWorkshop

Copia tu Raspberry Pi a una nueva tarjeta SD

Hay muchas explicaciones tediosas en la red de cómo clonar un SO Linux a un nuevo dispositivo, pero me topé con esta genial herramienta on mi Raspberry que reduce todo a unos pocos minutos y sin necesidad apenas de teclear.

Es el programa «SD Card Copier» que puedes usar de manera regular para hacer copias de seguridad de tu SO, o trasladar tu sistema de archivos a un dispositivo de mayor almacenamiento, como es mi caso.

1. Requisitos y configuración.

Quiero mover mi Raspbian OS de mi actual tarjeta SD a una mayor y más rápida, por lo que debo poder acceder a ambas tarjetas simultáneamente. Por ello, he seguido esta configuración:

  • Raspberry Pi 4B.
  • Tarjeta SD de 32Gb en la ranura de la Raspberry con Raspbian 10 Buster.
  • Tarjeta SD rápida de 128Gb (nueva y vacía) conectada mediante adaptador USB a la Raspberry.
    • Opcionalmente, puedes transferir todo el sistema de archivos a un tercer USB para recuperar los ficheros en caso de fallo.
  • Además, instalaremos piclone si no tenemos el programa SD Card Copier por defecto en nuestro SO.
sudo apt-get update

sudo apt-get install piclone

[No comprobado!] Piclone debería funcionar en otras distribuciones de Linux, si tienes la habilidad suficiente de montar todas las dependencias que requiere. En ese caso, puedes seguir las instrucciones que se detallan en su propio github:

https://github.com/raspberrypi-ui/piclone

2. Transferir tu SO via piclone.

  • Abrimos el SD Card Copier asegurándonos que tenemos permisos de superusuario:
sudo piclone

El programa es muy sencillo y se ve así:

This image has an empty alt attribute; its file name is piclone1.png
  • Selecciona cada dispositivo de los desplegables y clicka "Start".
  • Después de un rato, tendrás una copia ejeutable de tu SO en el nuevo dispositivo.

La documentación menciona unos 10-15 minutos de espera, pero tardará más según el tamaño del almacenamiento. En mi caso tardó bastante más.

3. Lanzar el nuevo SO.

Por último:

  • apaga la Raspberry,
  • introduce la nueva tarjeta en la ranura SD de la Raspberry,
  • enciende la Raspberry,
  • comprueba que están todas las aplicaciones corriendo,
  • y el almacenamiento ha aumentado.
This image has an empty alt attribute; its file name is piclone3.png
Uso de GParted para comprobar los detalles de la nueva partición.

Spotify para Raspberry sin Premium

Página de bloqueo al acceder a Spotify desde Firefox ESR o Chromium

Pensarías (yo al menos) que podías enchufar tu Raspberry a un monitor y poner un poco de música de fondo en Spotify con el navegador, como siempre, desde open.spotify.com. Bueno, lo más probable es que te haya salido el mensaje de arriba, hayas buscado innumerables soluciones en la web, hasta que has llegado aquí. Encantado de ayudar!

El aumento de la seguridad en Spotify solo lo hace disponible en versión web para navegadores Chrome, Firefox y Edge en dispositivos de 64bits, dificultando el hacking o el streaming fraudulento sin cuenta premium.

Con Premium.

Si tienes suscripción Premium, puedes tomar un atajo y simplemente usar una de las apps que te dan acceso desde tu Raspberry como Raspicast (que sincroniza desde el smartphone), Raspotify o spotify-qt, y te darán acceso a tu música con muy poca configuración.

This image has an empty alt attribute; its file name is spotify-qt.png
spotify-qt de snapcraft.io

Sin Premium.

Para los que adoramos escuchar anuncios (y no pagar), el camino no es tan arduo. Solo debemos instalar la librería Widevine:

sudo apt-get install libwidevinecdm0

A continuación, reiniciamos el sistema y accedemos a open.spotify.com mediante Chromium.

Iniciamos sesión en nuestra cuenta, y deberíamos estar dentro de Spotify con su interfaz habitual, y sin el mensaje que nos salía anteriormente.

Por último, podemos instalar un acceso directo a Spotify en Chromium mediante el botón que aparece en la barra de navegación. Y listo! A disfrutar de Spotify en tu Raspberry!

Spotify web en Chromium Browser para Raspberry Pi

Cualquier duda o comentario, envíamela por Twitter 🐦! Hasta pronto!

🐦 @RoamingWorkshop