Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Gartenautomation
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Deutsch
  • English
Menu

Raspberry Pi Pico W als WLAN-Hotspot mit Weboberfläche – Geräte im Netzwerk anzeigen

Posted on 27. Juni 202527. Juni 2025 by Stefan Draeger

Mit dem Raspberry Pi Pico W lassen sich erstaunlich vielseitige Projekte realisieren – und das trotz seiner geringen Größe und des günstigen Preises. In diesem Beitrag zeige ich dir, wie du den Mikrocontroller in einen eigenen WLAN-Hotspot verwandelst, über den sich andere Geräte verbinden können. Sobald ein Gerät mit dem Netzwerk verbunden ist, wird es in einer übersichtlichen Weboberfläche angezeigt.
Das Ganze wird komplett in MicroPython programmiert und kommt ohne zusätzliche Module oder Libraries aus – ideal also für Einsteiger und Bastler, die einen einfachen Einstieg in Netzwerkanwendungen mit dem Pico W suchen.

Raspberry Pi Pico W als WLAN-Hotspot mit Weboberfläche – Geräte im Netzwerk anzeigen
Dieses Video auf YouTube ansehen.

Hinweis aus der Community: Die Idee zu diesem Projekt stammt aus einem Kommentar von JoKa – vielen Dank an dieser Stelle für den spannenden Impuls!
Ich freue mich jederzeit über Feedback, Ideen oder Anregungen zu meinen Projekten. Du kannst mir gern einen Kommentar hinterlassen oder direkt ein Support-Ticket über Support-Anfragen & Rückmeldung erstellen – ich nehme Vorschläge gerne auf und lasse sie in zukünftige Beiträge einfließen.

Inhaltsverzeichnis

  • Ziel des Projekts
    • Was ist ein Access Point?
    • Was ist ein Webserver?
    • Grenzen des Projekts
  • Technische Daten des Raspberry Pi Pico W
    • Hinweis zum RP2350
  • Benötigte Bauteile
      • Du benötigst lediglich:
  • Firmware-Update des Raspberry Pi Pico W
    • Hinweis zur Firmware-Version (Stand: 25.06.2025)
  • Access Point mit dem Pico W einrichten
    • Beispielcode: AP mit SSID „PicoAP“ und einfachem Passwort
    • Webserver mit Liste der IP-Adressen
  • Geräte automatisch identifizieren per HTTP-Header
    • Beispielcode für die ESP32-CAM in der Arduino IDE
    • Auswertung im MicroPython-Code
  • Fertiger Code: Pico W als WLAN-Hotspot mit Geräteliste

Ziel des Projekts

In diesem Beitrag verwandle ich den Raspberry Pi Pico W in einen einfachen WLAN-Hotspot (Access Point) mit einer integrierten Weboberfläche, auf der du sehen kannst, welche Geräte sich mit dem Netzwerk verbunden haben.

PiPico2W - AccessPoint Weboberfläche mit Geräteliste
PiPico2W – AccessPoint Weboberfläche mit Geräteliste

Das Projekt eignet sich ideal als Grundlage für eigene Anwendungen – zum Beispiel zur Konfiguration von Geräten im lokalen Netz oder zur Visualisierung von Statusinformationen. Die Umsetzung erfolgt komplett in MicroPython, sodass du den Code leicht anpassen oder erweitern kannst.

Was ist ein Access Point?

Ein Access Point (AP) ist ein Gerät, das ein eigenes WLAN-Netzwerk bereitstellt, mit dem sich andere Geräte verbinden können – ähnlich wie ein Router, nur ohne Internetverbindung. In unserem Fall übernimmt der Pico W diese Rolle und ermöglicht es z. B. einem Smartphone oder einer ESP32-CAM, sich direkt mit ihm zu verbinden.

Was ist ein Webserver?

Ein Webserver stellt Inhalte – meist HTML-Seiten – über das Netzwerk zur Verfügung. In diesem Projekt zeigt der Pico W eine einfache Webseite an, sobald ein Gerät im Browser seine IP-Adresse aufruft. Diese Seite listet z. B. die IP-Adressen aller verbundenen Geräte auf.

Grenzen des Projekts

Auch wenn der Pico W erstaunlich viel kann, gibt es technische Einschränkungen, die man kennen sollte:

  • WLAN-Reichweite: Die integrierte Antenne des Pico W reicht in der Praxis nur für kurze Distanzen. Für größere Reichweiten ist ein WLAN-Router oder ein ESP32-Modul mit externer Antenne besser geeignet.
  • Datenübertragung: Der Pico W eignet sich nicht für große Datenmengen, er reicht aber für kleine Geräte wie einer ESP32-CAM.
  • Mehrere Verbindungen: Der Pico W kann nur eine begrenzte Anzahl an gleichzeitigen Clients verarbeiten – perfekt für kleine DIY-Projekte, aber nicht für ein ganzes Smarthome-Netzwerk.

Technische Daten des Raspberry Pi Pico W

Der Raspberry Pi Pico W basiert auf dem bewährten RP2040-Chip und ist dank integrierter WLAN-Funktion ideal für einfache IoT- und Netzwerkprojekte geeignet. Hier ein Überblick über die wichtigsten technischen Merkmale:

  • Mikrocontroller: RP2040 (Dual-Core ARM Cortex-M0+ @ 133 MHz)
  • RAM: 264 KB SRAM
  • Flash-Speicher: 2 MB
  • WLAN: 2,4 GHz WiFi (802.11n), integriert über CYW43439
  • GPIOs: 26 nutzbare Pins
  • Spannungsversorgung: 1,8–5,5 V über USB oder VSYS
  • Schnittstellen: I²C, SPI, UART, PWM, ADC, USB (Device)
Raspberry Pi Pico W verpackt
Raspberry Pi Pico W verpackt
Raspberry Pi Pico W
Raspberry Pi Pico W
Raspberry Pi Pico W
Raspberry Pi Pico W
Rückseite des Raspberry Pi Pico W
Rückseite des Raspberry Pi Pico W
WisdPi - ArduPico mit Raspberry Pi Pico W
WisdPi – ArduPico mit Raspberry Pi Pico W
DIY Extensionboard für den Raspberry Pi Pico
DIY Extensionboard für den Raspberry Pi Pico

Der Pico W eignet sich hervorragend für MicroPython-Projekte, bei denen WLAN eine Rolle spielt – z. B. als Access Point mit Weboberfläche, wie in diesem Beitrag gezeigt.

Hinweis zum RP2350

Die Raspberry Pi Foundation hat mit dem RP2350 einen Nachfolger des RP2040 vorgestellt. Erste Boards mit integriertem WiFi und dem neuen Chip sind inzwischen erhältlich.
Da sich der RP2350 in mehreren Punkten vom RP2040 unterscheidet, werde ich in einem separaten Beitrag ausführlich auf die technischen Unterschiede, Vorteile und Einsatzmöglichkeiten eingehen.

Benötigte Bauteile

Für dieses Projekt ist die Materialliste angenehm kurz, denn der Raspberry Pi Pico W bringt bereits alles mit, was wir brauchen – inklusive WLAN-Chip.

Du benötigst lediglich:

  • 1× Raspberry Pi Pico W*
  • 1× USB-Datenkabel* (USB-A auf Micro-USB) – wichtig: kein reines Ladekabel!
  • Die Entwicklungsumgebung Thonny zur Programmierung mit MicroPython

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

Die Einrichtung von Thonny sowie die ersten Schritte mit dem Raspberry Pi Pico habe ich bereits in einem separaten Beitrag beschrieben: 👉 Raspberry Pi Pico (1): Vorstellung und erste Schritte

Damit bist du bestens vorbereitet, um mit dem Projekt zu starten!

Firmware-Update des Raspberry Pi Pico W

Da ich meinen Pico W längere Zeit nicht verwendet habe, aktualisiere ich zunächst die MicroPython-Firmware – von Version 1.20.0 auf 1.25.0.
Ein Firmware-Update kann nicht nur neue Features mitbringen, sondern auch wichtige Bugfixes enthalten – daher ist es sinnvoll, vor Beginn eines neuen Projekts zu prüfen, ob eine aktuellere Version verfügbar ist.

aktualisieren der Firmware des Raspberry Pi Pico W mit der Thonny IDE
aktualisieren der Firmware des Raspberry Pi Pico W mit der Thonny IDE

Die aktuelle MicroPython-Firmware für den Raspberry Pi Pico W findest du hier:
👉 https://micropython.org/download/rp2-pico-w/ am einfachsten ist es jedoch wenn du die Thonny IDE verwendest, hier sind es nur wenige klicks.

Wichtiger Hinweis: Beim Flashen der Firmware wird der komplette Speicher des Boards gelöscht. Alle Programme, Dateien und Einstellungen auf dem Pico W gehen dabei verloren!
Stelle also sicher, dass du wichtige Skripte vorher gesichert hast.

Output MicroPython v1.25
Output MicroPython v1.25

Hinweis zur Firmware-Version (Stand: 25.06.2025)

Beim Test mit der Firmware v1.25.0 trat auf meinem Raspberry Pi Pico W der folgende Fehler auf:

[CYW43] Failed to start CYW43

In diesem Fall konnte der WLAN-Chip nicht korrekt initialisiert werden, wodurch sich der Access Point nicht starten ließ.
Nach einem Wechsel auf die Vorgängerversion v1.24.1 funktionierte alles problemlos, und der AP wurde wie erwartet erstellt.

👉 Mein Tipp: Wenn du diesen Fehler ebenfalls bekommst, probiere es mit der Firmware v1.24.1, die du ebenfalls auf der offiziellen MicroPython-Seite findest: https://micropython.org/download/rp2-pico-w/

Ich beobachte das Verhalten weiter und aktualisiere diesen Beitrag, sobald es dazu neue Erkenntnisse oder eine Lösung gibt.

Access Point mit dem Pico W einrichten

Nachdem alle Vorbereitungen abgeschlossen sind und die Firmware auf dem aktuellen Stand ist, können wir mit der eigentlichen Programmierung beginnen. Im ersten Schritt richten wir den Raspberry Pi Pico W als WLAN-Access Point (AP) ein. Dadurch erzeugt der Mikrocontroller ein eigenes WLAN, mit dem sich beispielsweise ein Smartphone oder ein anderes WLAN-fähiges Gerät verbinden kann.

Beispielcode: AP mit SSID „PicoAP“ und einfachem Passwort

import network
import time

# Access Point konfigurieren
ap = network.WLAN(network.AP_IF)
# SSID = PicoAP
# Passwort = 12345678 (muss min. 8 Zeichen enthalten!)
ap.config(essid='PicoAP', password='12345678')
ap.active(True)

# Warten bis aktiv
while not ap.active():
    print(".", end="")
    time.sleep(1)

print("Access Point aktiv!")
print("IP-Adresse:", ap.ifconfig()[0])

Wenn das kleine Script gestartet wird, wird ein AP mit dem Namen (SSID) PicoAP aufgebaut und man kann sich mit einem Handy, Table oder PC mit diesem verbinden.

aktiver AccessPoint vom Raspberry Pi Pico
aktiver AccessPoint vom Raspberry Pi Pico

Webserver mit Liste der IP-Adressen

Der folgende Code richtet einen einfachen Webserver im Access-Point-Modus ein. Er listet alle Geräte auf, die sich zumindest einmal mit dem WLAN verbunden und die IP-Adresse 192.168.4.1 im Browser aufgerufen haben.

Denn genau dann sendet das Gerät einen HTTP-Request
an den Pico W – und dieser wird vom Server erfasst.

Webseite mit IP-Adressen von verbundenen Geräten
Webseite mit IP-Adressen von verbundenen Geräten
import network
import socket
import time

# Access Point einrichten
ap = network.WLAN(network.AP_IF)
ap.config(essid='PicoAP', password='12345678')  # Passwort muss min. 8 Zeichen sein
ap.active(True)

while not ap.active():
    time.sleep(1)

print("Access Point aktiv. IP:", ap.ifconfig()[0])

# Set zur Speicherung der bekannten IP-Adressen
clients = set()

# Webserver starten
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
s = socket.socket()
s.bind(addr)
s.listen(1)
print("Webserver läuft auf Port 80...")

while True:
    conn, addr = s.accept()
    client_ip = addr[0]
    print("Verbindung von:", client_ip)
    clients.add(client_ip)

    # HTML-Inhalt generieren
    html = """<!DOCTYPE html>
<html>
<head><title>Pico W Access Point</title></head>
<body>
    <h1>Willkommen beim PicoAP</h1>
    <p><strong>Deine IP-Adresse:</strong> {}</p>
    <h2>Bekannte Geräte:</h2>
    <ul>
""".format(client_ip)

    for ip in clients:
        html += "        <li>{}</li>\n".format(ip)

    html += """    </ul>
</body>
</html>
"""

    # Antwort senden
    response = 'HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n' + html
    conn.send(response.encode('utf-8'))
    conn.close()

Geräte automatisch identifizieren per HTTP-Header

Wenn du Zugriff auf den Code eines Geräts hast – etwa bei einer ESP32-CAM, die sich mit dem Pico-WLAN verbindet – kannst du direkt nach der Verbindung automatisch einen HTTP-Request mit einem benutzerdefinierten Header absenden. Dieser Header enthält z. B. den Gerätenamen, den der Pico W auswerten und anzeigen kann.

Das hat den Vorteil, dass du auf dem Pico nicht nur die IP-Adresse des Geräts speichern kannst, sondern auch direkt einen zugeordneten Namen. So entsteht eine übersichtliche Geräteliste im Format:

Ausgabe - Verbundene Geräte
Ausgabe – Verbundene Geräte

Beispielcode für die ESP32-CAM in der Arduino IDE

Damit das funktioniert, musst du im Code der ESP32-CAM die Library HTTPClient einbinden und am Ende der setup()-Funktion einmalig einen HTTP-Request an den Pico W senden:

#include <HTTPClient.h>

void sendDeviceHeader() {
  HTTPClient http;
  // IP des Pico W
  http.begin("http://192.168.4.1/");
  // Gerätekennung
  http.addHeader("X-Device-Name", "ESP32-CAM");
  // Senden des Requests
  int httpCode = http.GET();
  // Verbindung schließen
  http.end();
}

void setup() {
   ...
  // Direkt nach erfolgreicher Verbindung aufrufen
  sendDeviceHeader();  
}

Auswertung im MicroPython-Code

Da du auf dem Webserver des Pico W ebenfalls den Code selbst kontrollierst, kannst du den Header sehr einfach im Request auslesen und zuordnen. In deinem Webserver prüfst du dazu jede eingehende Verbindung nach dem Header X-Device-Name:

for line in request.split("\r\n"):
    if line.startswith("X-Device-Name:"):
        device_name = line.split(":", 1)[1].strip()

Damit ordnest du der IP-Adresse zuverlässig den Gerätenamen zu – ideal für Projekte mit mehreren bekannten Teilnehmern wie Sensoren, Kameras oder Aktoren.

Fertiger Code: Pico W als WLAN-Hotspot mit Geräteliste

Im folgenden Abschnitt findest du den vollständig lauffähigen MicroPython-Code für dieses Projekt. Er verwandelt deinen Raspberry Pi Pico W in einen eigenen WLAN-Hotspot und stellt eine einfache Weboberfläche bereit.

PiPico2W - AccessPoint Weboberfläche mit Geräteliste
PiPico2W – AccessPoint Weboberfläche mit Geräteliste

Sobald sich ein Gerät mit dem WLAN verbindet und einen HTTP-Request an http://192.168.4.1 sendet (z. B. automatisch durch einen Mikrocontroller oder manuell im Browser), wird dessen IP-Adresse zusammen mit einem benutzerdefinierten Gerätenamen angezeigt. Der Gerätename wird dabei über den HTTP-Header X-Device-Name übermittelt.

# ------------------------------------------------------------
# Titel: Raspberry Pi Pico W – WLAN-Hotspot mit Weboberfläche
# Beschreibung:
# Dieser Code verwandelt den Raspberry Pi Pico W in einen Access Point (AP),
# der eine einfache Webseite ausliefert. Alle Geräte, die sich mit dem WLAN
# verbinden und einen HTTP-Request senden, werden mit ihrer IP-Adresse
# und einem benutzerdefinierten Gerätenamen (per HTTP-Header) geloggt
# und auf der Webseite angezeigt.
#
# Autor: Stefan Draeger
# Blogbeitrag:
# https://draeger-it.blog/raspberry-pi-pico-w-als-wlan-hotspot-mit-weboberflaeche-geraete-im-netzwerk-anzeigen/
# ------------------------------------------------------------

import network
import socket
import time

# WLAN Access Point konfigurieren
ap = network.WLAN(network.AP_IF)  # AP_IF = Access Point Interface
ap.config(essid='PicoAP', password='12345678')  # WLAN-Name und Passwort (mind. 8 Zeichen)
ap.active(True)  # AP aktivieren

# Warten, bis der Access Point aktiv ist
while not ap.active():
    time.sleep(1)

print("Access Point aktiv. IP:", ap.ifconfig()[0])

# Dictionary zur Speicherung von verbundenen Clients
# Format: { "IP-Adresse": "Gerätename" }
clients = {}

# Webserver einrichten
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]  # IPv4-Adresse, Port 80
s = socket.socket()
s.bind(addr)
s.listen(1)  # Max. 1 gleichzeitige Verbindung (ausreichend für einfache Anzeige)
print("Webserver läuft...")

# Endlosschleife zur Verarbeitung eingehender Verbindungen
while True:
    conn, addr = s.accept()  # Verbindung akzeptieren
    request = conn.recv(1024).decode()  # HTTP-Request empfangen
    ip = addr[0]  # IP-Adresse des Clients
    device_name = "Unbekannt"  # Standardwert

    # HTTP-Header nach dem benutzerdefinierten Feld "X-Device-Name" durchsuchen
    for line in request.split("\r\n"):
        if line.startswith("X-Device-Name:"):
            device_name = line.split(":", 1)[1].strip()
            break  # Nur ersten passenden Header verarbeiten

    # IP-Adresse und Gerätename im Dictionary speichern oder aktualisieren
    clients[ip] = device_name
    print("Verbindung von {} – Name: {}".format(ip, device_name))

    # Dynamisches HTML für die Antwort generieren
    html = """<!DOCTYPE html>
<html>
<head><title>Pico W Access Point</title></head>
<body>
    <h1>Ger&auml;teliste</h1>
    <ul>
"""
    # Alle bekannten Clients auflisten
    for ip, name in clients.items():
        html += "        <li>{}-{}<br></li>\n".format(ip, name)

    html += """    </ul>
</body>
</html>
"""

    # HTTP-Antwort senden (Statuscode 200 OK)
    response = 'HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n' + html
    conn.send(response.encode('utf-8'))  # Antwort übertragen
    conn.close()  # Verbindung schließen

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen
Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

link zu Fabook
link zu LinkedIn
link zu YouTube
link zu TikTok
link zu Pinterest
link zu Instagram
  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}