annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
1 import asyncio
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
2 import pygame
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
3 import aiomqtt
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
4 import struct
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
5
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
6 WIDTH = 320
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
7 HEIGHT = 320
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
8
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
9 pygame.init()
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
10 screen = pygame.display.set_mode((WIDTH, HEIGHT))
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
11 clock = pygame.time.Clock()
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
12
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
13
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
14 async def on_message(client, userdata, message):
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
15 payload = bytes(message.payload)
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
16 x, y, w, h = struct.unpack("HHHH", payload[:8])
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
17 buf = payload[8:]
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
18 for dy in range(h):
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
19 for dx in range(w):
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
20 off = w * dy + dx
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
21 r, g, b = buf[off * 3 : off * 3 + 3]
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
22 screen.set_at((x + dx, y + dy), (r, g, b))
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
23
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
24
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
25 async def main():
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
26 async with aiomqtt.Client("mqtt2.bigasterisk.com") as client:
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
27 client.on_message = on_message
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
28 await client.subscribe('display/squib/updates')
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
29
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
30 while True:
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
31 for event in pygame.event.get():
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
32 if event.type == pygame.QUIT:
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
33 raise SystemExit
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
34
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
35 await client.loop_read()
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
36 pygame.display.flip()
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
37 clock.tick(60)
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
38
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
39
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
40 asyncio.run(main())