Condolasa Arroz

Política & datos %>% filter(random == ¡muy random!)

Imagen desarrollada con ChatGPT
Imagen desarrollada con ChatGPT 4o

Política, datos y programación

@LunesMarxista

🥠 Mensajes proletarios impresos en papel térmico

María de los Ángeles Lasa
Condolasa Arroz
Published in
4 min readApr 9, 2025

--

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.

Galletas del infortunio de @LunesMarxista

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.

--

--

Condolasa Arroz
Condolasa Arroz

Published in Condolasa Arroz

Política & datos %>% filter(random == ¡muy random!)

María de los Ángeles Lasa
María de los Ángeles Lasa

Written by María de los Ángeles Lasa

Politóloga. Docente Universitaria. TEDxSpeaker. Experta en Corea del Norte. Mis ideas y proyectos en marialasa.ar

No responses yet