Een webserver draaien op je Raspberry Pi Pico W
Dit project kan worden beschouwd als de 'Hallo Wereld' van de Pico W. Het laat zien hoe je verbinding kunt maken met Wi-Fi, hoe je een HTTP webserver kunt laten draaien op de Pico W en hoe je de GPIO-pinnen kunt aansturen.
Als je op zoek bent naar een snel en gemakkelijk project om met je Pico aan de slag te gaan, dan is dit echt iets voor jou!
Stappen om LED te laten knipperen via WiFi op Pico W
Er zijn drie overkoepelende thema's om dit voor elkaar te krijgen.
MicroPython instellen
Eerst moet u MicroPython instellen. Download het UF2 bestand hier die speciaal bedoeld is voor de Pico W.
Houd de BOOTSEL knop ingedrukt en sluit uw Pico W aan via USB.
Zodra het gemount is, kopieer het UF2 bestand dat je net gedownload hebt naar de Pico.
Gebruik Thonny om Pico W te programmeren
Thonny maakt het gemakkelijk om de Pico W te programmeren en het komt voorgeïnstalleerd op het Raspberry Pi OS. U kunt ook download het hier voor Windows, Mac en Linux.
Zorg ervoor dat uw interpreter is ingesteld op MicroPython (Raspberry Pi Pico).
Thonny zal verbinding maken met de Raspberry Pi Pico W en u kunt commando's uitvoeren in de shell (het onderste segment van de Thonny IDE).
Voer een netwerkscan uit om te controleren of de draadloze Pico W werkt
In de Shell kunt u deze code uitvoeren om te testen of uw draadloze chip werkt.
Gebruik deze code om alle beschikbare draadloze netwerken in uw omgeving af te drukken.
import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
print(wlan.scan())
Programmeer de webserver
Maak een woordenboek genaamd secrets.py en gebruik de volgende inhoud, waarbij u de waarde voor ssid en pw vervangt door uw netwerk.
secrets = {
'ssid': 'Replace-this-with-your-Wi-Fi-Name',
'pw': 'Replace-this-with-your-Wi-Fi-Password'
}
Maak dan main.py die uw hoofdcode zal hosten. Aangezien de code vele regels lang is, u kunt het hier vinden in onze Github.
Maak de HTML pagina die geserveerd zal worden
Het volgende bestand wordt het HTML-bestand dat wordt geserveerd wanneer u het IP-adres van de Pico W laadt. Sla het op als index.html
Het is een eenvoudige pagina met twee knoppen waarmee u de LED van de Pico W kunt in- en uitschakelen.
<!DOCTYPE html>
<html>
<head>
<title>Pico W</title>
</head>
<body>
<h1>Pico W</h1>
<p>Control the onboard LED</p>
<a href=\"?led=on\"><button>ON</button></a>
<a href=\"?led=off\"><button>OFF</button></a>
</body>
</html>
Tijd om het allemaal te doen
Klik op de run knop in Thonny, dat is een groene knop met een play symbool.
U ziet het IP adres van de Pico W. Kopieer dat in uw web browser die verbonden is met hetzelfde draadloze netwerk.
Klik op de knoppen en u zou de verandering moeten zien.
U kunt de Github repo hier die alle bestanden heeft.
Onze YouTube-video voor dit project gaat ook dieper in op details zoals code-uitleg.
En als je op zoek bent naar meer projecten om je te inspireren, bekijk dan onze serie Paragon-projecten hier.
Fout gevonden toen ik het probeerde.
%Run -c $EDITOR_CONTENT
Traceback (meest recente oproep laatst):
Bestand "", regel 1, in
ImportError: geen module met de naam 'network'
Hoi Pablo - zorg ervoor dat je het nieuwste UF2-bestand voor de Pico W gebruikt (niet alleen de Pico) - hier te vinden. https://www.raspberrypi.com/documentation/microcontrollers/micropython.html
De netwerkmodule zit er standaard in!
In regel 100 gebruik je get_html() functie. Wanneer ik je code uitvoer krijg ik een 'get_html' is niet gedefinieerd foutmelding.
De zoekfunctie geeft ook een waarde terug als bijv. de referrer de string 'led=xx' bevat. Dus zowel led_on als led_off krijgen tegelijkertijd een positieve waarde en de LED wordt weer uitgeschakeld, terwijl het de bedoeling was dat hij aan zou gaan. Om dit te ondervangen moet het if statement worden uitgebreid om te controleren op een kleine indexwaarde (ik heb als vuistregel slechts 20 gebruikt):
als (led_on > -1 en led_on -1 en led_off < 20):
Nu werkt het zoals verwacht.
J'ai résolu le problème en ajoutant la ligne :
r = r[:50]
avant
led_on = r.find('?led=on')
led_off = r.find('?led=off')
Cela retire les caractères superflus de la requête
Ik probeerde commentaar te geven, maar op de een of andere manier komt het commentaar niet goed...