Sensorgegevens streamen via WiFi met je Raspberry Pi Pico W

Raspberry Pi Pico W tutorial sensorgegevens streamen

Heb je ooit sensorgegevens willen streamen met je Raspberry Pi Pico W?

Een van de beste toepassingen voor de Raspberry Pi Pico W is de mogelijkheid om een webpagina te serveren. Dit betekent dat je het kunt gebruiken om sensorgegevens van je telefoon te monitoren zolang je binnen WiFi-bereik bent. Dit project biedt een eenvoudige basis voor het monitoren van versnellingsgegevens en het maken van een digitale dobbelsteen, die wordt geactiveerd wanneer je de ADXL343 sensor aanraakt.

Raspberry Pi Pico W aangesloten op een ADXL343

Video

Benodigde onderdelen

Wat is de ADXL343?

De ADXL343 van Analog Devices is een opvolger van zijn voorganger, de ADXL345.

De sensor kan drie assen meten en heeft vier gevoeligheidsinstellingen,+-2g, +-4g, +-8g of +-16g. Het lagere bereik geeft meer resolutie voor langzame bewegingen, het hogere bereik is goed voor het volgen van hoge snelheden.

De ADXL343 heeft ook een CircuitPython bibliotheek die we kunnen gebruiken in MicroPython, wat het een stuk gemakkelijker maakt om aan de slag te gaan.

Je moet de headers zowel op de ADXL343 als op de Pico W hebben gesoldeerd om sensorgegevens met je Pico W te kunnen streamen.

Aansluiten van de ADXL343 op de Pico W

Er zijn vier pinnen die u op de Raspberry Pi moet aansluiten.

Verbind de VIN pin naar een 3.3V uitgang op uw Raspberry Pi Pico W;

Verbind de GND naar een aardingspen op uw Pico W;

Verbind de SDA pin naar GPIO0;

Verbind de SCL pin naar GPIO1.

Flashing MicroPython firmware voor de Raspberry Pi Pico W

Eerst moet je de MicroPython firmware op de Pico W flashen, als je dat nog niet gedaan hebt.

U kunt het hier downloaden.

Houd vervolgens de BOOTSEL-knop ingedrukt en sluit uw Pico aan op uw computer. Je zou een nieuwe drive moeten zien. Kopieer het .UF2 bestand dat je gedownload hebt naar die schijf.

Thonny instellen voor de Raspberry Pi Pico W

Open Thonny. Als je het nog niet gedownload hebt, haal het hier.

Stel de tolk in op MicroPython (Raspberry Pi Pico) linksonder in het venster van de Thonny IDE.

Bibliotheken kopiëren naar de Pico W

Download de bibliotheken en bestanden hier van onze Github repo.

U kunt een ZIP-bestand downloaden door naar die link te gaan en op de groene "Code" knop en klik op ZIP downloaden.

Eenmaal gedownload, pak het uit op een plaats die u niet vergeet.

Dan, in uw Thonny IDE, klik op Beeld > Bestanden om uw bestandssysteem en het bestandssysteem van de Pico W te zien.

Navigeer naar de uitgepakte bestanden en ga naar de map MicroPython > II Pico W Sensor Server. Kopieer alles naar uw Pico W door rechts te klikken op elk item en te klikken op "Uploaden naar /"

Wijziging van de code

Om de Raspberry Pi Pico verbinding te laten maken met uw WiFi-netwerk, moet u het volgende openen secrets.py en wijzig de ssid en pw's waarde. Voer de SSID (naam) van uw netwerk in de eerste en het wachtwoord in de tweede. Sla het bestand op.

De index.html is de webpagina die zal worden geserveerd. De regel "<p>X AccX | Y AccY | Z AccZ</p>" en <p>Resultaat DiceVal</p> zullen worden vervangen door sensorgegevens wanneer het project loopt.

Sluit uw Raspberry Pi Pico aan op WiFi

De main.py is waar de actie gebeurt.

Deze lijnen verbinden het met uw WiFi. Vergeet niet de string te veranderen in rp2.land als uw land niet Duitsland (DE) is.


# Set country to avoid possible errors
rp2.country('DE')

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
# If you need to disable powersaving mode
# wlan.config(pm = 0xa11140)

# See the MAC address in the wireless chip OTP
mac = ubinascii.hexlify(network.WLAN().config('mac'),':').decode()
print('mac = ' + mac)

# Other things to query
# print(wlan.config('channel'))
# print(wlan.config('essid'))
# print(wlan.config('txpower'))

# Load login data from different file for safety reasons
ssid = secrets['ssid']
pw = secrets['pw']

wlan.connect(ssid, pw)

De onboard LED zal drie keer knipperen als een WiFi verbinding succesvol was, dankzij deze regels code. Er wordt ook een bericht afgedrukt en je IP adres kan worden bekeken in Thonny. Dit IP adres is handig om later toegang te krijgen tot de server.

   led = machine.Pin('LED', machine.Pin.OUT)
    for i in range(wlan.status()):
        led.on()
        time.sleep(0.2)
        led.off()
        time.sleep(0.2)
    print('Connected')
    status = wlan.ifconfig()
    print('ip = ' + status[0])

Als er een fout is, zal de LED knipperen op basis van de waarde van de foutcode.

Fout betekenissen

  • 0 = Verbinding verbroken
  • 1 = Link Join
  • 2 = Link NoIp
  • 3 = Link Up
  • -1 = Link mislukt
  • -2 = Link NoNet
  • -3 = Link BadAuth

Pico W aansluiten op ADXL343

Deze regel initialiseert een I2C-object:

# Initialize I2C
# busio.I2C(SCL, SDA)
i2c = busio.I2C(board.GP1, board.GP0)

Dan, deze twee lijnen creëert de versnellingsmeter en maakt tapdetectie mogelijk (voor het aflezen van dobbelstenen).

# Create Accelerometer object
accelerometer = adafruit_adxl34x.ADXL343(i2c)

accelerometer.enable_tap_detection()

Tijd om de code uit te voeren

Om de code uit te voeren, druk op de Uitvoeren knop in Thonny, dat is de knop met een afspeel icoon in een groene knop op de bovenste werkbalk.

Maak dan verbinding met het IP adres van je Raspberry Pi Pico W. Als je Thonny's shell open hebt, kun je het daar bekijken. Of anders kun je inloggen op je router en uitvinden wat het IP adres van de Pico W is.

De Pico W draait een HTTP server met een socket verbinding en hij luistert naar verbindingen, hier gedefinieerd:

addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]

s = socket.socket()
s.bind(addr)
s.listen(1)

Wanneer je verbinding maakt met het IP adres van je Pico W, zal het deze code triggeren die index.html elke seconde zal verversen met de laatste gegevens.

   cl, addr = s.accept()
        print('Client connected from', addr)
        cl_file = cl.makefile('rwb', 0)
        while True:
            line = cl_file.readline()
            if not line or line == b'\r\n':
                break
            
        response = get_html('index.html')
        data = accelerometer.acceleration
        tapped = accelerometer.events['tap']
        response = response.replace('AccX', str(data[0]))
        response = response.replace('AccY', str(data[1]))
        response = response.replace('AccZ', str(data[2]))
        if tapped:
            dice_val = str(random.randint(1,6))
        response = response.replace('DiceVal', dice_val)
        
        cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n')
        cl.send(response)
        cl.close()

main.py vervangt de waarden door de huidige meting wanneer je verbinding maakt met de server van de Pico W.

Zoals u kunt zien, vervangt het AccX, AccY en AccZ door de gegevens van uw sensor.

Als de sensor wordt aangetikt, dan wordt een willekeurig getal van 1 tot 6 afgedrukt in de "DiceVal" string op de HTML-pagina.

Wat is het volgende?

Deze tutorial toont een eenvoudige manier om sensorgegevens naar een webpagina te streamen met je Raspberry Pi Pico W.

In feite is dit de code die je ook voor andere sensoren kunt gebruiken.

De methodologie blijft hetzelfde. Je moet de juiste bibliotheken voor je sensoren vinden, dan de main.py en index.html aanpassen zodat ze de sensor data kunnen krijgen en de juiste waarden naar de webpagina kunnen sturen.

Er zijn nog veel meer projecten waar je aan kunt beginnen, zoals een temperatuur- en luchtvochtigheidssensor of misschien een luchtkwaliteitsproject met een DHT22 of DHT22. BME688of een helderheidssensor met een lichtweerstand.

7 Opmerkingen

  1. Ken Anderson op juli 15, 2022 op 7:24 am

    Het zou leuk zijn om HTML5-functies te gebruiken, zodat we kunnen zien hoe HTML5 wordt gemaakt

  2. Terry Young op september 24, 2022 op 6:47 pm

    Kunnen de gegevens gewoon worden gestreamd als een string op een poort via TCP/UDP in plaats van in een webpaginaformaat, zodat ze door een andere computer kunnen worden gelezen (om meters of zo te maken)?
    zoiets als
    192.168.1.24:9060
    AccX, 7.923, AccY, 1.093, AccZ, -5.452.
    AccX, 6.423, AccY, 1.241, AccZ, -8.769.

  3. Ingo op januari 10, 2023 op 9:11 pm

    Men heeft een Pico W, die in een huiskamer is geplaatst, en er worden berichten uitgewisseld; hoe kunnen die berichten van een andere Pico W over WLAN worden uitgewisseld?
    In de Beispielcode is het zo, dat de Pico W veel macht heeft, als hij op HTML is gebaseerd. In mijn geval maakte ik zoiets als een
    "getvaluefromotherpico(192.178.2.44, variablename)" - sprich er soll immer in seiner Schleife laufen und die per WLAN angefragten Anfragen nebenher bedienen, z.B. per Interrupt.
    Wie wäre sowas möglich?

    Besten Dank und Gruß
    Ingo

    • raspi berry op februari 4, 2023 op 11:51 am

      De andere Pico kan in een andere omgeving werken, en die Werte per REST API van de eerste Pico abfragen?
      Ich verstehe die Problemstellung sonst vielleicht nicht ganz?

      Als het een kommerzielles Projekt is, kunnen wij gern consulting-technisch aktiv worden 🙂

  4. Luis op januari 11, 2023 op 3:30 pm

    hoe kan ik deze gegevens naar thinspeak sturen?

  5. Eddi Baars op maart 18, 2023 op 1:02 pm

    guten Tag, Ich habe dasselbe Problem. Met curl of wget werkt het niet. Ik wil de gegevens van de Pico op mijn Raspi4 bekijken en daarna grafisch weergeven en statistisch berekenen. ???

  6. andrew op juli 19, 2023 op 10:31 pm

    geen module met de naam network als je netwrk module toevoegt van thonny dan klaagt het over geen module met de naam socket lol

Laat een reactie achter