''' Raumklima Create a webpage access point to show sensor data Hardware: ESP32 (sensor chip temperature) DS18B20 temperature sensor Sensirion SCD41 CO2 sensor MicroPython v1.26.1 on 2025-09-11; Generic ESP32 module with ESP32 External libraries: https://microdot.readthedocs.io/en/latest/intro.html https://github.com/peter-l5/MicroPython_SCD4X 2026-01-20 mchris ''' import network import uasyncio as asyncio from microdot import Microdot import esp32 import machine import onewire import ds18x20 import scd4x import gc import time gc.collect() async def ap_mode(ssid, password): print("Free heap before init:", gc.mem_free()) # DS18B20 on GPIO 4 dat = machine.Pin(4) ds = ds18x20.DS18X20(onewire.OneWire(dat)) ds_sensors = ds.scan() print('DS18B20 sensors:', ds_sensors) gc.collect() # SCD41 I2C i2c = machine.I2C(1, scl=machine.Pin(22), sda=machine.Pin(21), freq=100000) scd = scd4x.SCD4X(i2c) print('SCD41 init...') scd.start_periodic_measurement() await asyncio.sleep(5) print('SCD41 ready') gc.collect() print("Free heap before WiFi:", gc.mem_free()) # WiFi AP ap = network.WLAN(network.AP_IF) ap.active(True) ap.config(essid=ssid, password=password) while not ap.active(): await asyncio.sleep(0.1) print('AP IP:', ap.ifconfig()[0]) print("Free heap after WiFi:", gc.mem_free()) app = Microdot() app.ds_sensors = ds_sensors app.ds_device = ds app.scd_device = scd @app.route('/') async def index(request): html = ''' Raumklima