# main.py - Aangepast voor uw specifieke epd2in9.py driver
import network
import urequests
import ujson
import time
from machine import Pin, SPI
import framebuf
import epd2in9 # Uw specifieke driver
# --- CONFIGURATIE ---
API_KEY = "49ef8ce4d6a082af34fd1f41fbfbe03e3636d77320f92261"
API_ENDPOINT = "https://iotsolutions.be/api/iot/virus-data"
EPD_WIDTH = 128
EPD_HEIGHT = 296
# Pin configuratie (overgenomen uit uw diagram.json)
SCK_PIN = 18
MOSI_PIN = 23 # DIN
CS_PIN = 5
DC_PIN = 22
RST_PIN = 21
BUSY_PIN = 4
# --- HARDWARE SETUP ---
# SPI moet baudrate hebben in de aangepaste driver
spi = SPI(1, baudrate=2000000, polarity=0, phase=0, sck=Pin(SCK_PIN), mosi=Pin(MOSI_PIN))
epd = epd2in9.EPD(spi, cs=Pin(CS_PIN), dc=Pin(DC_PIN), rst=Pin(RST_PIN), busy=Pin(BUSY_PIN))
# --- FUNCTIES ---
def connect_wifi():
print("Verbinden met Wokwi-GUEST WiFi...")
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
if not sta_if.isconnected():
sta_if.connect("Wokwi-GUEST", "")
for _ in range(20):
if sta_if.isconnected(): break
time.sleep(1)
if sta_if.isconnected():
print("WiFi verbonden! IP:", sta_if.ifconfig()[0])
return True
else:
print("WiFi-verbinding mislukt.")
return False
def get_virus_data(station_name):
print(f"\nData ophalen voor station: '{station_name}'...")
if "PLAK_HIER" in API_KEY:
print("FOUT: API_KEY is niet ingevuld.")
return {"error": "API Key Fout"}
headers = {'X-API-KEY': API_KEY}
payload = {'station': station_name}
try:
response = urequests.post(API_ENDPOINT, headers=headers, json=payload, timeout=15)
if response.status_code == 200:
data = response.json()
response.close()
return data.get("data") if data.get("success") else {"error": data.get('error', 'API Fout')}
else:
code = response.status_code
response.close()
return {"error": f"HTTP Fout {code}"}
except Exception as e:
return {"error": "Netwerkfout"}
def draw_display(data):
# Maak een buffer (canvas) in het geheugen
buf = bytearray(EPD_WIDTH * EPD_HEIGHT // 8)
fb = framebuf.FrameBuffer(buf, EPD_WIDTH, EPD_HEIGHT, framebuf.MONO_HLSB)
fb.fill(0) # 0 = Wit, 1 = Zwart
if data is None or "error" in data:
error_msg = data.get("error", "Geen Data") if data else "Geen Data"
fb.text("Fout:", 10, 100, 1)
fb.text(error_msg, 10, 110, 1)
else:
fb.text("Sciensano Barometer", 0, 5, 1)
fb.hline(0, 18, EPD_WIDTH, 1)
station_name = data.get('station_name', '').replace('ë', 'e')
fb.text(station_name, 0, 25, 1)
covid_level = data.get("covid", {}).get("activity_level", "missing")
griep_level = data.get("influenza", {}).get("activity_level", "missing")
rsv_level = data.get("rsv", {}).get("activity_level", "missing")
draw_bar(fb, 20, 50, "COVID", covid_level)
draw_bar(fb, 20, 120, "GRIEP", griep_level)
draw_bar(fb, 20, 190, "RSV", rsv_level)
update_date = f"Update: {data.get('last_update', '')}"
fb.text(update_date, 0, EPD_HEIGHT - 10, 1)
print("Scherm bijwerken...")
epd.init()
# De driver heeft geen 'display' methode, maar 'display_framebuffer'
epd.display_framebuffer(buf)
# De driver heeft geen 'sleep' methode
print("Klaar.")
def draw_bar(fb, x, y, label, level):
bar_width = 80
bar_height = 50
fb.text(label, x, y, 1)
fb.rect(x, y + 10, bar_width, 20, 1)
fill_width = 0
if level == "low": fill_width = bar_width * 0.25
elif level == "moderate": fill_width = bar_width * 0.50
elif level == "high": fill_width = bar_width * 0.75
elif level == "very_high": fill_width = bar_width
if fill_width > 0:
fb.fill_rect(x + 2, y + 12, int(fill_width) - 4, 16, 1)
level_text = level.upper()
fb.text(level_text, x, y + 35, 1)
def clear_screen():
"""Maakt het scherm wit met de functies die de driver WEL heeft."""
print("Scherm wissen...")
buf = bytearray(EPD_WIDTH * EPD_HEIGHT // 8)
fb = framebuf.FrameBuffer(buf, EPD_WIDTH, EPD_HEIGHT, framebuf.MONO_HLSB)
fb.fill(0) # Vul de buffer met wit
epd.init()
epd.display_framebuffer(buf)
# --- HOOFDPROGRAMMA ---
if connect_wifi():
clear_screen() # Gebruik de nieuwe 'clear' functie
initial_data = get_virus_data("België")
draw_display(initial_data)
while True:
print("\n========================================")
print("Voer een stationsnaam in en druk op Enter:")
try:
requested_station = input()
if not requested_station: continue
new_data = get_virus_data(requested_station)
draw_display(new_data)
except (KeyboardInterrupt, EOFError):
break
print("\nSimulatie gestopt.")
else:
print("Kan niet doorgaan zonder WiFi.")
# Toon een foutmelding op het scherm
epd.init()
buf = bytearray(EPD_WIDTH * EPD_HEIGHT // 8)
fb = framebuf.FrameBuffer(buf, EPD_WIDTH, EPD_HEIGHT, framebuf.MONO_HLSB)
fb.fill(0)
fb.text("WiFi Fout", 20, 100, 1)
epd.display_framebuffer(buf)
Loading
epaper-2in9
epaper-2in9