Strömma sensordata över WiFi med din Raspberry Pi Pico W

Raspberry Pi Pico W handledning strömmar sensordata

Har du någonsin velat strömma sensordata med din Raspberry Pi Pico W?

En av de bästa användningsområdena för Raspberry Pi Pico W är dess förmåga att servera en webbsida. Det innebär att du kan använda den för att övervaka sensordata från din telefon så länge du befinner dig inom WiFi-räckvidd. Det här projektet kommer att ge en enkel grund för hur du kan övervaka accelerationsdata och även skapa en digital tärning, som aktiveras när du trycker på ADXL343-sensorn.

Raspberry Pi Pico W ansluten till en ADXL343

Video

Delar som behövs

Vad är ADXL343?

Analog Devices ADXL343 är en uppföljning av sin föregångare, ADXL345.

Sensorn kan mäta tre axlar och har fyra inställningar för känslighet: +-2g, +-4g, +-8g eller +-16g. Det lägre intervallet ger högre upplösning för långsamma rörelser, det högre intervallet är bra för spårning i hög hastighet.

ADXL343 har också ett CircuitPython-bibliotek som vi kan använda i MicroPython, vilket gör det mycket lättare att komma igång.

Du kommer att behöva lödda på ADXL343 och Pico W för att kunna strömma sensordata med din Pico W.

Anslutning av ADXL343 till Pico W

Det finns fyra stift som du måste ansluta till Raspberry Pi.

Anslut den VIN till en 3,3V utgång på din Raspberry Pi Pico W;

Anslut den GND till en jordstift på din Pico W;

Anslut den SDA till GPIO0;

Anslut den SCL till GPIO1.

Flashing MicroPython firmware för Raspberry Pi Pico W

Först måste du flasha MicroPythons firmware på Pico W, om du inte redan har gjort det.

Du kan ladda ner den här.

Håll sedan knappen BOOTSEL intryckt och anslut Pico till datorn. Du bör se en ny enhet. Kopiera UF2-filen som du laddade ner till den enheten.

Konfigurera Thonny för Raspberry Pi Pico W

Öppna Thonny. Om du inte har laddat ner det, köp den här.

Ställ in tolken på MicroPython (Raspberry Pi Pico) längst ner till vänster i Thonny IDE-fönstret.

Kopiera bibliotek till Pico W

Ladda ner biblioteken och filerna här från vår Github-repo.

Du kan ladda ner en ZIP-fil genom att gå till den länken och klicka på den gröna "Kod" och klicka på Ladda ner ZIP.

När du har laddat ner den, packa upp den någonstans där du kommer ihåg den.

I Thonny IDE klickar du sedan på Visa > Filer för att se ditt filsystem och Pico W:s filsystem.

Navigera till de uppackade filerna och gå in i mappen MicroPython > II Pico W Sensor Server. Kopiera allt till din Pico W genom att högerklicka på varje objekt och klicka på "Ladda upp till /".

Ändring av koden

För att få Raspberry Pi Pico att ansluta till ditt WiFi-nätverk måste du öppna secrets.py och ändra ssid och pwvärde. Skriv in nätverkets SSID (namn) i det första fältet och lösenordet i det andra. Spara filen.

The index.html är den webbsida som ska visas. Linjen "<p>X AccX | Y AccY | Z AccZ</p>" och <p>Resultat DiceVal</p> kommer att ersättas med sensordata när projektet körs.

Anslut din Raspberry Pi Pico till WiFi

The main.py Det är här som det händer saker och ting.

Dessa linjer ansluter den till ditt WiFi. Glöm inte att ändra strängen i rp2.land om ditt land inte är Tyskland (DE).


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

Den inbyggda lysdioden blinkar tre gånger om en WiFi-anslutning lyckades, tack vare dessa rader av kod. Den kommer också att skriva ut ett meddelande och din IP-adress som kan visas i Thonny. Denna IP-adress är användbar för att få tillgång till servern senare.

   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])

Om det finns ett fel blinkar lysdioden beroende på felkodens värde.

Betydelse av fel

  • 0 = Länken är nedlagd
  • 1 = Länkförbindelse
  • 2 = Länk NoIp
  • 3 = Länka upp
  • -1 = Länken misslyckas
  • -2 = Länk NoNet
  • -3 = Link BadAuth

Anslut Pico W till ADXL343

Den här raden initialiserar ett I2C-objekt:

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

Dessa två rader skapar accelerometern och aktiverar avläsningen av tryck (för avläsning av tärningar).

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

accelerometer.enable_tap_detection()

Dags att köra koden

För att köra koden trycker du på knappen Kör i Thonny, som är knappen med en uppspelningsikon i en grön knapp i den övre verktygsraden.

Anslut sedan till IP-adressen för din Raspberry Pi Pico W. Om du har Thonnys skal öppet kan du se det där. Annars kan du logga in på din router och ta reda på vad Pico W:s IP-adress är.

Pico W kör en HTTP-server med en socket-anslutning och lyssnar på anslutningar som definieras här:

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

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

När du ansluter till din Pico W:s IP-adress aktiveras denna kod som uppdaterar index.html med de senaste uppgifterna varje sekund.

   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 ersätter värdena med den aktuella avläsningen när du ansluter till Pico W:s server.

Som du kan se ersätter den AccX, AccY och AccZ med data från din sensor.

Om sensorn trycks på kommer den att skriva ut ett slumpmässigt heltal från 1 till 6 i strängen "DiceVal" på HTML-sidan.

Vad kommer härnäst?

Denna handledning visar ett enkelt sätt att strömma sensordata till en webbsida med din Raspberry Pi Pico W.

Det är faktiskt den här koden som du kan använda även för andra sensorer.

Metodiken är densamma. Du måste hitta rätt bibliotek för dina sensorer och sedan ändra main.py och index.html så att de kan hämta sensordata och skicka rätt värden till webbsidan.

Det finns många andra projekt som du kan ge dig i kast med, t.ex. en temperatur- och luftfuktighetssensor eller kanske ett luftkvalitetsprojekt med en DHT22 eller BME688, eller en ljushetssensor med ljusmotstånd.

7 Kommentarer

  1. Ken Anderson den juli 15, 2022 kl 7:24 f m

    Det skulle vara trevligt att använda HTML5-funktioner så att vi kan se hur HTML5 fungerar.

  2. Terry Young den september 24, 2022 kl 6:47 e m

    Kan data helt enkelt strömma ut som en sträng på en port via TCP/UDP i stället för i webbsidesformat, så att den kan läsas av en annan dator (för att göra mätare eller liknande)?
    Något i stil med
    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 den januari 10, 2023 kl 9:11 e m

    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?
    I din exempelkod är det så, att Pico W gör något, när den är anpassad till HTML. I mitt fall bräuchte ich sowas som 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.
    Hur skulle sowas vara möjligt?

    Bästa tack och hälsning
    Ingo

    • raspi berry den februari 4, 2023 kl 11:51 f m

      Den andra Pico skulle kunna vara i ett krångel, och de värden per REST API från den första Pico skulle kunna ifrågasättas?
      Ich verstehe die Problemstellung sonst vielleicht nicht ganz?

      Om det är ett kommersiellt projekt, kan vi gärna vara tekniskt rådgivande aktiva 🙂 .

  4. Luis den januari 11, 2023 kl 3:30 e m

    Hur kan jag överföra dessa uppgifter till Thinspeak?

  5. Eddi Baars den mars 18, 2023 kl 1:02 e m

    guten Tag, ich habe dasselbe Problem. Mit curl oder wget funktioniert es nicht. Ich möchte die Messwerte vom Pico auf meinem Raspi4 speichern und später grafisch darstellen und statistisch auswerten. ???

  6. andrew den juli 19, 2023 kl 10:31 e m

    ingen modul som heter nätverk om man lägger till en netwrk-modul från thonny klagar den sedan på att det inte finns någon modul som heter socket lol

Lämna en kommentar