Pantalla de estado OLED Pi-Hole

Esta publicación muestra cómo agregué una pantalla de estado OLED a mi sistema Pi-Hole basado en Raspberry Pi.

Pi-Hole es un bloqueador de anuncios de toda la red que puede ejecutar en una Raspberry Pi. Funciona bien en todos los modelos Pi y es un proyecto ideal para hardware antiguo. Puedes leer más sobre esto en el sitio oficial de Pi-Hole.

Habiendo configurado Pi-Hole en una Raspberry Pi B+, quería una forma de agregar una pantalla para poder verificar rápidamente que funcionaba. Así que agregué una pantalla OLED barata de 0.96 ″ y un interruptor momentáneo. El interruptor permite que la pantalla muestre detalles adicionales según sea necesario. El LED está ahí para agregar un bonito brillo de color a la caja pero, por supuesto, es opcional.

Configuración del hardware de la pantalla de estado OLED

Los requisitos de hardware son bastante básicos.

  • Raspberry Pi (cualquier modelo pero idealmente quieres un puerto Ethernet)
  • Tarjeta SD (se recomiendan 8 GB o más, pero 4 GB funcionarán)
  • Fuente de alimentación
  • Conexión de red
    • Cable de ethernet
    • o WiFi a bordo
    • o dongle WiFi USB
  • monitor (opcional)
  • Teclado (opcional)
  • Caja Pi (opcional)

La pantalla de estado y la actualización del interruptor requieren:

  • Pantalla OLED con interfaz I2C [eBay] [AliExpress]
  • interruptor momentáneo [eBay] [AliExpress]
  • Cables de puente para conectar la pantalla al cabezal GPIO
  • LED y resistencia (opcional)
  • Bisel o montura para pantalla (opcional)

Instalación y configuración de Pi-Hole

La instalación de Pi-Hole es bastante sencilla. Realmente no quiero replicar el procedimiento aquí. En su lugar, proporcionaré un resumen de lo que hice con enlaces apropiados a guías adicionales. Según sus preferencias, puede usar SSH o un teclado y un monitor para realizar la configuración.

  • Cree una tarjeta SD Raspbian nueva con la imagen «Raspbian Lite» y Etcher [guide]
  • Agregue un archivo de texto vacío llamado «ssh» a la partición de arranque para habilitar SSH [guide]
  • Encienda Pi con una nueva tarjeta SD
  • Cambie la contraseña predeterminada a algo sensato [guide]
  • Ejecute «sudo apt update» seguido de «sudo apt upgrade»
  • Obtenga la dirección IP de Pi ya sea:
    • ejecutando ifconfig en el Pi
    • buscando en la configuración de su enrutador
    • utilizando un escáner de red
  • (opcional) configure su enrutador para asignar siempre la misma dirección IP a su Raspberry Pi
  • Siga uno de los procedimientos de instalación descritos en la página de Pi-Hole GitHub. Utilicé la «Instalación automatizada de un solo paso»

Cableado de interruptores y pantallas

El interruptor se conectó directamente al encabezado GPIO mediante cables de puente y luego se pegó a la tapa con pegamento epoxi de dos partes.

La pantalla, el interruptor y el LED se conectaron como se muestra a continuación:

La pantalla se alimentaba con un pin de 3,3 V y el LED se alimentaba con un pin GPIO.

Configuración de pantalla OLED

Las pantallas OLED que usan el protocolo I2C son bastante fáciles de conectar, ya que puede usar cables de puente para conectarse directamente al encabezado GPIO. El procedimiento para agregar uno a su Pi e instalar las bibliotecas se puede encontrar en mi tutorial Cómo usar un módulo de pantalla OLED.

Asegúrese de que puede ejecutar los scripts de Python de ejemplo y que su pantalla funciona.

Hardware del interruptor

El interruptor se puede conectar directamente al encabezado GPIO. Lo conecté a través de GPIO21 (Pin 40) y Ground (Pin 39). El script define GPIO21 como «Alto» y se colocará en «Bajo» cuando se presione el interruptor.

Instalación de gpiozero

El script de Python usará gpiozero para controlar el LED y el botón. Asegúrese de que esté instalado ejecutando:

sudo apt install python3-gpiozero

Instalación de secuencias de comandos de Python

El script de Python utiliza la API de Pi-Hole. Esto permite que el script solicite los datos actuales de Pi-Hole y luego Python puede formatearlo para que se muestre en la pantalla.

Descargue el script de Python usando:

wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/pihole/stats.py

y obtenga el archivo de fuente requerido:

wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/pihole/VCR_OSD_MONO_1.001.ttf

Luego, haga que Pi lo ejecute al inicio editando cron usando:

crontab -e

y añadiendo la siguiente línea al final:

@reboot python3 /home/pi/stats.py &

Su archivo cron se verá así:

# For more information see the manual pages of crontab(5) and cron(8) # # m h  dom mon dow   command @reboot python3 /home/pi/stats.py &

Guarde y salga usando CTRL-X, Y y luego ENTER.

Reinicie el Pi y el script debería mostrar los datos de Pi-Hole en la pantalla después de 30 segundos. Este retraso le da tiempo a Pi para conectarse a la red antes de que intente pedirle datos a Pi-Hole. Al presionar el botón se desplazará un conjunto adicional de datos en la pantalla.

Bisel de pantalla OLED

El bisel negro de la pantalla se imprimió en 3D para encerrar la pantalla OLED y su PCB. Debido a las variaciones en el módulo OLED, el bisel permite un poco de ajuste. La pantalla tuvo que colocarse a mano y luego pegarse en su posición. El bisel se unió a la caja con cinta adhesiva de doble cara.

El archivo STL está disponible en mi canal Thingiverse.

Aquí hay una animación básica del bisel impreso en 3D:

Pantalla de estado Pi-Hole en acción

Las tres pantallas de estado disponibles se pueden ver a continuación:

Cada 30 segundos, la pantalla principal se desplaza y actualiza los datos. Esto da una buena indicación de que el script aún se está ejecutando sin necesidad de verificar nada más.

  • Pantalla 1 (Principal)
    • Porcentaje total bloqueado
    • Recuento total bloqueado
  • Pantalla 2
    • dirección IP
    • porcentaje bloqueado
    • Recuento total bloqueado
    • Número total de consultas
  • Pantalla 3
    • dirección IP
    • utilización de la CPU
    • Memoria en uso/Memoria total
    • Espacio en disco utilizado/Espacio total en disco

El estuche que estoy usando es un estuche «DesignSpark black» de RS Components.

Reflexiones sobre el bloqueo de anuncios

Decidí probar Pi-Hole porque, como padre, necesitaba poder demostrar que tenía el control total de mi red y que las reglas de Internet de mi hogar eran la ley. Esto generalmente tenía como objetivo garantizar la seguridad de los niños que usan mi WiFi en lugar de espiar a los adultos.

Esto fue especialmente cierto cuando los amigos de mi hijo traían dispositivos habilitados para Internet a mi casa. No quería negarles la capacidad de usar esos dispositivos, pero no tenía control sobre cómo estaban configurados. Los controles para padres o las aplicaciones sofisticadas pueden ayudar a sus propios hijos, pero no puede imponérselos a los visitantes.

El bloqueo de anuncios es un tema controvertido, especialmente entre aquellos que dependen de los anuncios para generar un flujo de ingresos. Esto es cierto para este sitio donde la publicidad ayuda a compensar los costos de hospedaje. Siempre he tenido dudas sobre si debería alentar a otros a ejecutar un sistema que elimine los anuncios de este sitio y los sitios de otros generadores de contenido. Entiendo por qué la gente quiere hacerlo, pero también siento que en este sitio los anuncios son un pequeño precio a pagar por el contenido que generalmente es útil para las personas.

Pero la elección es finalmente tuya.