annotate lcd_simulator.py @ 14:899f12179b85

upgrade lit
author drewp@bigasterisk.com
date Thu, 06 Jun 2024 17:51:38 -0700
parents 47795c3121f1
children
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 struct
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
3
5
drewp@bigasterisk.com
parents: 4
diff changeset
4 import aiomqtt
drewp@bigasterisk.com
parents: 4
diff changeset
5 import pygame
4
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
6
8
47795c3121f1 bufferless updates! mqtt message is sent over SPI and everything works
drewp@bigasterisk.com
parents: 5
diff changeset
7 screen = pygame.display.set_mode((320, 480))
4
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
8 clock = pygame.time.Clock()
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
9
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
10
5
drewp@bigasterisk.com
parents: 4
diff changeset
11 async def on_message(client):
drewp@bigasterisk.com
parents: 4
diff changeset
12 await client.subscribe('display/squib/updates')
drewp@bigasterisk.com
parents: 4
diff changeset
13 async for message in client.messages:
drewp@bigasterisk.com
parents: 4
diff changeset
14 payload = bytes(message.payload)
drewp@bigasterisk.com
parents: 4
diff changeset
15 head, x, y, w, h = struct.unpack("HHHHH", payload[:10])
drewp@bigasterisk.com
parents: 4
diff changeset
16 buf = payload[10:]
drewp@bigasterisk.com
parents: 4
diff changeset
17 pygame.draw.rect(screen, (255, 255, 0), (x, y, w, h))
drewp@bigasterisk.com
parents: 4
diff changeset
18 pygame.display.flip()
drewp@bigasterisk.com
parents: 4
diff changeset
19 await asyncio.sleep(.02)
drewp@bigasterisk.com
parents: 4
diff changeset
20 for dy in range(h):
drewp@bigasterisk.com
parents: 4
diff changeset
21 for dx in range(w):
drewp@bigasterisk.com
parents: 4
diff changeset
22 off = w * dy + dx
drewp@bigasterisk.com
parents: 4
diff changeset
23 r, g, b = buf[off * 3:off * 3 + 3]
drewp@bigasterisk.com
parents: 4
diff changeset
24 screen.set_at((x + dx, y + dy), (r, g, b))
drewp@bigasterisk.com
parents: 4
diff changeset
25 pygame.display.flip()
4
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
26
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
27
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
28 async def main():
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
29 async with aiomqtt.Client("mqtt2.bigasterisk.com") as client:
5
drewp@bigasterisk.com
parents: 4
diff changeset
30 asyncio.create_task(on_message(client))
4
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
31
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
32 while True:
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
33 for event in pygame.event.get():
5
drewp@bigasterisk.com
parents: 4
diff changeset
34 pass
drewp@bigasterisk.com
parents: 4
diff changeset
35 await asyncio.sleep(1 / 30)
4
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
36
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
37
e273cc60b389 draft of web-to-lcd and simulator
drewp@bigasterisk.com
parents:
diff changeset
38 asyncio.run(main())