Strömma sensordata via WiFi med Raspberry Pi Pico W

Raspberry Pi Pico W ansluten till en ADXL343

Ett av de bästa användningsområdena för Raspberry Pi Pico W är dess förmåga att visa en webbsida.

Det betyder att du kan använda den för att övervaka sensordata från din telefon så länge du befinner dig inom WiFi.

Det här projektet ger 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.

Video

Delar som behövs

  • Brädbräda
  • Jumperkablar

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 måste ljuda in huvudet på ADXL343 och Pico W för att kunna genomföra det här projektet.

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


# Ställ in land för att undvika eventuella fel
rp2.country('DE')

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
# Om du behöver inaktivera energisparläge
# wlan.config(pm = 0xa11140)

# Se MAC-adressen i det trådlösa chipet OTP
mac = ubinascii.hexlify(network.WLAN().config('mac'),':').decode()
print('mac = ' + mac)

# Andra saker att fråga om
# print(wlan.config('channel'))
# print(wlan.config('essid'))
# print(wlan.config('txpower'))

# Ladda inloggningsuppgifter från en annan fil av säkerhetsskäl.
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('Uppkopplad')
    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:

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

# Skapa accelerometerobjekt
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.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('Klient ansluten från', 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]))
        om den är avlyssnad:
            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\r\n')
        cl.send(svar)
        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?

Den här handledningen visar ett enkelt sätt att strömma sensordata till en webbsida.

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 påbörja, t.ex. en temperatur- och fuktighetssensor med en DHT22 eller BME688, eller en ljushetssensor med ett ljusmotstånd.

1 Kommentar

  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.

Lämna en kommentar