''' Wetterstation V0.1 Webserver Access Point Hardware: ESP32, DS18b20 OneWire Temperature Sensor MicroPython v1.26.1 on 2025-09-11; Generic ESP32 module with ESP32 2025-01-19 mchris ''' import network import uasyncio as asyncio from microdot import Microdot import esp32 import machine import onewire import ds18x20 import time async def ap_mode(ssid, password): # Setup DS18B20 on GPIO 4 dat = machine.Pin(4) ds = ds18x20.DS18X20(onewire.OneWire(dat)) sensors = ds.scan() print('Found DS18B20 sensors:', sensors) if not sensors: print("No DS18B20 found on GPIO 4!") ap = network.WLAN(network.AP_IF) ap.config(essid=ssid, password=password) ap.active(True) while not ap.active(): await asyncio.sleep(0.1) print('AP Active. IP:', ap.ifconfig()[0]) app = Microdot() app.counter = 0 app.reset_count = 0 app.ds_sensors = sensors # Store sensor ROMs app.ds_device = ds # Store DS18B20 object @app.route('/') async def index(request): html = """ Wetterstation

Wetterstation

ESP32 intern:
-- C
DS18x20:
-- C
Alive Counter: --
Resets: --
""" return html, 200, {'Content-Type': 'text/html'} @app.route('/data') async def get_data(request): # Internal ESP32 temperature temp_raw = esp32.raw_temperature() internal_temp = round((temp_raw - 32) * 5/9, 1) # External DS18B20 temperature external_temp = -99 # Error value if app.ds_sensors: try: app.ds_device.convert_temp() await asyncio.sleep_ms(750) # DS18B20 conversion time external_temp = round(app.ds_device.read_temp(app.ds_sensors[0]), 1) except: external_temp = -99 app.counter += 1 return { 'internal': internal_temp, 'external': external_temp, 'counter': app.counter, 'resets': app.reset_count }, 200, {'Content-Type': 'application/json'} @app.route('/reset', methods=['POST']) async def reset_handler(request): app.counter = 0 app.reset_count += 1 return {'status': 'reset'}, 200, {'Content-Type': 'application/json'} await app.start_server(port=80) asyncio.run(ap_mode('pipico', '12345678'))