Sensorgegevens streamen over WiFi met Raspberry Pi Pico W

Raspberry Pi Pico W aangesloten op een ADXL343

Een van de beste toepassingen van de Raspberry Pi Pico W is de mogelijkheid om een webpagina te serveren.

Dit betekent dat u het kunt gebruiken om sensorgegevens van uw telefoon te controleren, zolang u zich binnen WiFi-bereik bevindt.

Dit project zal een eenvoudige basis bieden voor het monitoren van versnellingsgegevens en ook een digitale dobbelsteen maken, die geactiveerd wordt als je op de ADXL343 sensor tikt.

Video

Benodigde onderdelen

  • Breadboard
  • Jumper draden

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.

U moet de headers op zowel de ADXL343 als de Pico W gesoldeerd hebben om dit project te kunnen doen.

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 handleiding geeft een eenvoudige manier om sensorgegevens naar een webpagina te streamen.

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 vele andere projecten die u kunt uitvoeren, zoals een temperatuur- en vochtigheidssensor project met een DHT22 of BME688, of een helderheidssensor met een lichtweerstand.

5 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

    Mal angenommen man hätte einen Pico W, der in einer Dauerschleife läuft und Messwerte erfasst; wie können diese Messwerte von einem anderen Pico W über WLAN abgefragt werden?
    In deinem Beispielcode ist es so, das der Pico W etwas macht, wenn er über HTML angesprochen wird. In meinem Fall bräuchte ich sowas wie eine
    “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

      Der andere Pico könnte in einer Schleife laufen, und die Werte per REST API vom ersten Pico abfragen?
      Ich verstehe die Problemstellung sonst vielleicht nicht ganz?

      Wenn es ein kommerzielles Projekt ist, können wir gern consulting-technisch aktiv werden 🙂

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

    cómo puedo mandar esos datos a thinspeak

Laat een reactie achter