···
logger = logging.getLogger('camera_server')
···
PHOTO_DIR = "/home/kierank/photos"
PHOTO_RESOLUTION = (2592, 1944)
···
GPIO.setup(Config.BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
48
+
# WebSocket clients set
49
+
connected_clients = set()
# Create a simple HTML gallery template - using triple quotes properly
HTML_TEMPLATE = """<!DOCTYPE html>
···
.photo img {{ width: 100%; height: auto; }}
.photo a {{ display: block; text-align: center; margin-top: 5px; }}
66
+
const ws = new WebSocket('ws://' + window.location.hostname + ':8765');
67
+
ws.onmessage = function(event) {{
68
+
if(event.data === 'reload') {{
69
+
window.location.reload();
<h1>Inkpress: Gallery</h1>
···
121
+
async def websocket_handler(websocket, path):
122
+
connected_clients.add(websocket)
124
+
await websocket.wait_closed()
126
+
connected_clients.remove(websocket)
128
+
async def notify_clients():
129
+
if connected_clients:
130
+
await asyncio.gather(
131
+
*[client.send('reload') for client in connected_clients]
Captures a photo using the Raspberry Pi camera.
···
picam2.capture_file(filename)
logger.info("Photo taken successfully")
158
+
# Notify websocket clients to reload
159
+
asyncio.run(notify_clients())
logger.error(f"IO Error while taking photo: {str(e)}")
···
179
+
# Start HTTP server
server = socketserver.TCPServer(("", Config.WEB_PORT), PhotoHandler)
server_thread = threading.Thread(target=server.serve_forever, daemon=True)
184
+
# Start WebSocket server
185
+
ws_server = websockets.serve(websocket_handler, "0.0.0.0", Config.WS_PORT)
186
+
asyncio.get_event_loop().run_until_complete(ws_server)
187
+
ws_thread = threading.Thread(
188
+
target=asyncio.get_event_loop().run_forever,
previous_state = GPIO.input(Config.BUTTON_PIN)