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.

Pico W Bootsel knop

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 IDE met Micropython

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

Thonny IDE voert een wlan-scan uit

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

Pico W webserver

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

Pico W webserver

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.

6 Opmerkingen

  1. Pablo op juli 13, 2022 op 4:31 pm

    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'

  2. Charles op oktober 25, 2022 op 8:51 pm

    In regel 100 gebruik je get_html() functie. Wanneer ik je code uitvoer krijg ik een 'get_html' is niet gedefinieerd foutmelding.

  3. Gunther op november 28, 2022 op 12:51 am

    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.

    • Tonton op augustus 1, 2024 op 4:09 pm

      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

  4. Gunther op november 28, 2022 op 12:53 am

    Ik probeerde commentaar te geven, maar op de een of andere manier komt het commentaar niet goed...

Laat een reactie achter