Política, datos y programación
@LunesMarxista
🥠 Mensajes proletarios impresos en papel térmico
Los lunes es cuando más me conecto con mi condición proletaria. Me levanto temprano y me quiero morir. “Si fuera burguesa –pienso–, no tendría que vender mi fuerza de trabajo”.
El resto de la semana soy liberal y capitalista, pero los #LunesMarxista. Por eso creé @lunesmarxista, una cuenta de Instagram para socializar el infortunio de nuestra condición de proletarios.
El proyecto está desarrollado con una Raspberry Pi 5, código en Python, una impresora XP-58IIH tipo posnet y papel térmico de 58 mm (el más lumpen del mercado). ¡Y en este post te comparto todo lo que necesitás para hacer tus propias galletas del infortunio!
Desarrollo
El “cerebro” central del proyecto es una Raspberry Pi 5 que controla el periférico principal —la impresora térmica— y los componentes electrónicos conectados a través de los pines GPIO.
En términos de interfaz física, el sistema incluye un botón pulsador que, al ser presionado, activa el proceso de impresión de una galleta del infortunio. Para crear “atmósfera visual”, integré también una LED roja (¡obvio, camaradas!) que parpadea mientras se imprime el mensaje. Ambos elementos están montados sobre una protoboard: el botón está conectado al GPIO 17 de la Raspberry con una resistencia de 10kΩ a GND funcionando como pull-down, mientras que la LED se conecta al GPIO 27 con una resistencia de 220Ω.
El código del proyecto está escrito en Python y se apoya en varias librerías: RPi.GPIO
para gestionar los pines, python-escpos
y pyusb
para la comunicación con la impresora, y librerías estándar como random
, time
y textwrap
para funciones auxiliares.
El script principal “escucha” constantemente el estado del botón. Cuando se detecta una pulsación, selecciona aleatoriamente una frase desde un archivo de TextEdit llamado frases.txt
, imprime un pequeño logo en formato .bmp
, y luego la galleta junto a un footer.
# Librerías
import RPi.GPIO as GPIO
import time
import random
import textwrap
from escpos.printer import Usb
# Configuración de pines en la Raspberry
BOTON = 17
LED = 27
GPIO.setmode(GPIO.BCM)
GPIO.setup(BOTON, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
GPIO.setup(LED, GPIO.OUT)
# Configuración de la impresora
# Nota: el vendor y product ID es distinto para cada impresora.
# Para saber el VID y PID de tu impresora,
# abrí una terminal y ejecutá el comando 'lsusb'
p = Usb(0x0483, 0x070b, 0, 0x81, 0x02)
# Carga de datasets con frases
with open("frases.txt", "r", encoding = "latin1") as f:
frases = [line.strip() for line in f if line.strip()]
ultima_frase = None
# Impresión de mensajes
print("Esperando que aprietes el botón...")
try:
while True:
if GPIO.input(BOTON) == GPIO.HIGH:
# Selección random de frase
frase = random.choice(frases)
while frase == ultima_frase:
frase = random.choice(frases)
ultima_frase = frase
print("Imprimiendo:", frase)
# Configuración de luz LED roja
for _ in range(6):
GPIO.output(LED, GPIO.HIGH)
time.sleep(0.2)
GPIO.output(LED, GPIO.LOW)
time.sleep(0.2)
# Impresión de imagen de banner (opcional)
p.image("hoz.bmp")
# Charset para acentos y ñ
p._raw(b'\x1b\x74\x13')
# Configuración de título
p.set(align = "center", bold = True, width = 2, height = 2)
p.text("GALLETAS DEL INFORTUNIO\n\n")
# Configuración de subtítulo
p.set(align = "center", bold = False)
p.text("(edición #LunesMarxista)\n\n")
# Impresión de frase
lineas = textwrap.wrap(frase, width = 32)
for linea in lineas:
p.text(linea + "\n")
# Footer del mensaje
p.text("\n-----------------------\n")
p.text("Idea y programación:\n")
p.text("@LunesMarxista\n\n")
p.cut()
# Guardar la frase impresa en log
with open("log_frases.txt", "a", encoding = "utf-8") as log:
log.write(f"{time.strftime('%Y-%m-%d %H:%M:%S')} - {frase}\n")
# Esperar a que se suelte el botón
while GPIO.input(BOTON) == GPIO.HIGH:
time.sleep(0.1)
time.sleep(0.1)
except KeyboardInterrupt:
GPIO.cleanup()
Cada frase impresa queda registrada en un archivo de log automático (log_frases.txt
) que almacena la fecha, la hora y el contenido del mensaje para evitar repeticiones. Para completar la experiencia, configuré la Raspberry para que el script se ejecute automáticamente al iniciar el sistema, de modo que el dispositivo pueda funcionar sin monitor ni teclado, simplemente encendiéndolo y presionando el botón.
Bonus track
Mi primer profesor de Python fue Pedro, un desarrollador venezolano que me enseñó la mejor lección de todas: la forma más efectiva de aprender a programar es resolviendo problemas que te importan o desarrollando proyectos que realmente te entusiasman.
En su taller, cuando me preguntó cuál sería mi primer proyecto, le dije que quería hacer un conversor de calendario gregoriano a juche. Todavía recuerdo su cara: tiesa. Lo dejé sin palabras.
Me dijo que no sabía qué era eso. Tampoco sabía si era útil. Pero era mío, y eso alcanzaba.
Años después, sigo programando cosas inútiles pero que me apasionan. Como una Raspberry que imprime galletas del infortunio con frases marxistas. No cambian el mundo, claramente, pero hacen que mis lunes —y los lunes de otros proletarios— sean un poco más llevaderos.