In diesem Beitrag zeige ich dir, wie du eine Webseite des Raspberry Pi Pico W ins Internet veröffentlichen kannst.
Dem Raspberry Pi Pico W habe ich bereits einige Beiträge gewidmet wie zbsp.:
Dort habe ich dir gezeigt, wie du eine Webseite auf dem Mikrocontroller erstellst und in dein lokales Wi-Fi-Netzwerk einbindest. Nun soll es darum gehen, wie du diese ins Internet veröffentlichst.
Der Einfachheit möchte ich nur eine einfache Webseite mit der Zeichenkette “Hello World!” veröffentlichen. Du kannst dieses aber auch auf andere, komplexere Webseiten adaptieren.
Warum kann ich nicht direkt auf den Pi Pico zugreifen?
Dazu muss man erkennen, dass es zwei getrennte Netzwerke gibt, zum einen das Internet welches hinter einem Router (FritzBox!, SpeedPort, etc.) und das interne Wi-Fi, LAN Netzwerk welches in der Wohnung / im Haus zu erreichen ist.
Der Router übernimmt dabei die Schnittstelle zwischen diesen beiden Netzwerken. Im normalen Zustand können wir von jedem Gerät aus unserem internen Wi-Fi oder LAN Netzwerk auf das Internet zugreifen. Jedoch können wir nicht andersherum aus dem Internet auf ein Gerät zugreifen (das ist auch gut so).
Wenn wir nun den Raspberry Pi Pico W für den Zugriff aus dem Internet berechtigen wollen, müssen wir im Router einige Einstellungen für diesen treffen.
Zum einen muss der Mikrocontroller immer dieselbe IP-Adresse erhalten und der Port, über welchen dieser kommunizieren soll, muss geöffnet werden.
Achtung: ein geöffneter Port kann eine potenzielle Schwachstelle zum eigenen Netzwerk sein, daher sollte diese Freigabe nur solange existieren wie nötig. Und vor allem sollte nur ein Port geöffnet werden, keine Range!
Benötigte Ressourcen für dieses Projekt
Für den Nachbau benötigst du:
- einen Raspberry Pi Pico W,
- ein Micro-USB-Datenkabel
Da ich hier nur eine einfache Seite ohne Sensordaten etc. ausliefern möchte, benötigen wir nur den Mikrocontroller mit einem passenden USB-Kabel.
Aufbau der Verbindung und Webseite
Hier das kleine MicroPython Programm mit der ebenso einfachen Webseite.
Du musst an diesem Skript noch deine Daten (SSID und Passwort) in den entsprechenden Feldern eintragen.
import network import socket import time from machine import Pin ssid = '*****' password = '******' wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect(ssid, password) html = '<!DOCTYPE html><html><head><title>Raspberry Pi Pico W</title></head><body><h1>Hello World!</h1></body></html>' print('waiting for connection...') max_wait = 10 while max_wait > 0: if wlan.status() < 0 or wlan.status() >= 3: break max_wait -= 1 print('.', end='') time.sleep(1) print('') if wlan.status() != 3: raise RuntimeError('network connection failed') else: print('connected') status = wlan.ifconfig() print('ip = ' + status[0]) addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1] s = socket.socket() s.bind(addr) s.listen(1) print('listening on', addr) while True: try: cl, addr = s.accept() print('client connected from', addr) cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n') cl.send(html) cl.close() except OSError as e: cl.close() print('connection closed')
Wenn wir dieses Programm nun auf dem Mikrocontroller starten, dann wird eine Verbindung aufgebaut und die IP-Adresse in der Konsole angezeigt.
MicroPython v1.19.1-88-g74e33e714 on 2022-06-30; Raspberry Pi Pico W with RP2040
Type "help()" for more information.
>>> %Run -c $EDITOR_CONTENT
waiting for connection...
.......
connected
ip = 192.168.178.70
listening on ('0.0.0.0', 80)
Diese IP-Adresse können wir nun im Browser eingeben und erhalten unsere kleine Zeichenkette “Hello World!”.
Erstellen eines DynDNS Accounts
Unser Router erhält nach 24h eine neue IP-Adresse, dieses bedeutet, dass wir, um sicher auf den Mikrocontroller zugreifen können immer erst diese IP-Adresse ermitteln müssen um dann die URL zu bilden. Das ist recht umständlich und daher nutzt man dazu einen DynDNS Service wie http://freedns.afraid.org/.
Ein Überblick zu den kostenfreien DynDNS Anbieter findest du unter https://www.ionos.de/digitalguide/server/tools/dyndns-anbieter-im-ueberblick/
In meinem Fall erstelle ich einen Account beim Dienst freedns.afraid.org. Dieser Dienst ist kostenfrei und recht gut dokumentiert.
Wenn du alles ausgefüllt und eine E-Mail mit dem Aktivierungslink erhalten hast, dann kannst du aus dem Dashboard deine erste Subdomain erstellen.
Fritz!Box einrichten
Im Nachfolgenden zeige ich dir, wie du eine Subdomain für diesen Dienst auf deiner Fritz!Box einrichtest.
Öffne dazu zunächst dein Dashboard der Fritz!Box unter fritz.box und klicke dich durch den Pfad “Internet” > “Freigaben” und wähle dort den Reiter “DynDNS”.
Zunächst musst du den Haken bei “DynDNS benutzen” aktivieren und wählst aus der Auswahlliste “DynDNS-Anbieter” den letzten Eintrag “Benutzerdefiniert” aus.
Die benötigten Daten für die Felder findest du auf der Seite “Dynamic DNS“.
Auf der geöffneten Seite scrollen wir bis nach unten, wählen unserer zuvor erstellten Subdomain den Link “Direct URL” (1) und öffnen das Kontextmenü mit der rechten Maustaste. Aus diesem Menü wählen wir den Eintrag “Adresse des Links kopieren” (2) aus und kehren zurück zur Seite der Fritz!Box.
In das Feld “Update URL” fügen wir den Link aus der Zwischenablage mit Strg+V ein.
Das Feld “Domainname” wird mit der URL unserer erstellten Domain befüllt.
Die beiden Felder “Benutzername” & “Kennwort” werden jeweils mit “guest” befüllt.
Portfreigabe
Im letzten Schritt müssen wir nun die Portfreigabe in der Fritz!Box für den Raspberry Pi Pico W einrichten.
Dazu wechseln wir in den Reiter “Portfreigaben” (1) und wählen dort die Schaltfläche “Gerät für Freigaben hinzufügen” (2).
Im neuen Fenster wählen wir nun aus der Liste der Geräte den Eintrag “PYBD” aus (PYBD > PiBoard).
Es sollten nun die Felder “IPv4-Adresse” & “MAC-Adresse” vorbelegt werden.
Nun müssen wir noch den Port definieren, dazu klicken wir auf die Schaltfläche “Neue Freigabe” unten rechts im Fenster.
Im neuen Dialog wählen wir zunächst den Punkt “Portfreigabe” aus. Danach können wir aus der Auswahlliste “Anwendung” den Eintrag “HTTP-Server” auswählen und die Schaltfläche “OK” betätigen.
Wenn wir nun auf die Übersichtsseite “Portfreigaben” zurückkehren, dann sollten wir einen neuen aktiven Eintrag auffinden.
Die kleine grüne Lampe dient dabei zum Erkennen, ob der Mikrocontroller aktiv und somit erreichbar ist.
Testen der Konfiguration im Browser
Wenn wir nun die Adresse im Browser öffnen, dann wird uns die Zeichenkette “Hello World!” angezeigt.
Fazit & Ausblick
Die Einrichtung eines DynDNS Accouns in der Fritz!Box ist recht einfach, zum Problem wird hier nur einen zuverlässigen Dienst zu finden.
Wir haben nun eine Adresse im Internet mit einem Zugriff auf den Raspberry Pi Pico W, da diese Seite jeder sehen kann, welcher die Adresse kennt, wollen wir im nächsten Schritt ein Login Dialog mit Benutzername & Passwort einbauen.
Gibt es schon den nächsten Schritt:
“ein Login Dialog mit Benutzername & Passwort einbauen.” ?
Danke und Viele Grüße