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.


# Stel land in om mogelijke fouten te voorkomen
rp2.country('DE')

wlan = netwerk.WLAN(netwerk.STA_IF)
wlan.active(True)
# Als u de energiebesparende modus wilt uitschakelen
# wlan.config(pm = 0xa11140)

# Bekijk het MAC-adres in de draadloze chip OTP
mac = ubinascii.hexlify(network.WLAN().config('mac'),':').decode()
print('mac = ' + mac)

# Andere dingen om te vragen
# print(wlan.config('kanaal'))
# print(wlan.config('essid'))
# print(wlan.config('txpower'))

# Laad login-gegevens uit een ander bestand om veiligheidsredenen
ssid = secrets['sid']
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)
    voor i in range(wlan.status()):
        led.on()
        time.sleep(0.2)
        led.uit()
        tijd.sleep(0.2)
    print('Verbonden')
    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:

# Initialiseren 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).

# Accelerometer object maken
versnellingsopnemer = 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 verbonden van', addr)
        cl_file = cl.makefile('rwb', 0)
        terwijl waar:
            line = cl_file.readline()
            indien niet line of line == b'\n':
                break
            
        antwoord = get_html('index.html')
        data = accelerometer.acceleratie
        getikt = accelerometer.events['tik']
        response = response.replace('AccX', str(data[0]))
        response = response.replace('AccY', str(data[1]))
        response = response.replace('AccZ', str(data[2]))
        indien getikt:
            dice_val = str(random.randint(1,6))
        antwoord = antwoord.replace("DiceVal", dice_val)
        
        cl.send('HTTP/1.0 200 OKOnderhoudstype: tekst/html')
        cl.send(antwoord)
        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.

1 Commentaar

  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

Laat een reactie achter