Mercurial > code > home > repos > front-door-display
diff lcd_simulator.py @ 4:e273cc60b389
draft of web-to-lcd and simulator
author | drewp@bigasterisk.com |
---|---|
date | Tue, 05 Mar 2024 18:12:15 -0800 |
parents | |
children | d97a5930db7e |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lcd_simulator.py Tue Mar 05 18:12:15 2024 -0800 @@ -0,0 +1,40 @@ +import asyncio +import pygame +import aiomqtt +import struct + +WIDTH = 320 +HEIGHT = 320 + +pygame.init() +screen = pygame.display.set_mode((WIDTH, HEIGHT)) +clock = pygame.time.Clock() + + +async def on_message(client, userdata, message): + payload = bytes(message.payload) + x, y, w, h = struct.unpack("HHHH", payload[:8]) + buf = payload[8:] + for dy in range(h): + for dx in range(w): + off = w * dy + dx + r, g, b = buf[off * 3 : off * 3 + 3] + screen.set_at((x + dx, y + dy), (r, g, b)) + + +async def main(): + async with aiomqtt.Client("mqtt2.bigasterisk.com") as client: + client.on_message = on_message + await client.subscribe('display/squib/updates') + + while True: + for event in pygame.event.get(): + if event.type == pygame.QUIT: + raise SystemExit + + await client.loop_read() + pygame.display.flip() + clock.tick(60) + + +asyncio.run(main())