Streamen Sie Sensordaten über WiFi mit Ihrem Raspberry Pi Pico W

Raspberry Pi Pico W-Tutorial Sensordaten streamen

Wollten Sie schon immer Sensordaten mit Ihrem Raspberry Pi Pico W streamen?

Eine der besten Anwendungen für den Raspberry Pi Pico W ist seine Fähigkeit, eine Webseite zu bedienen. Dies bedeutet, dass Sie es verwenden können, um Sensordaten von Ihrem Telefon zu überwachen, solange Sie in WiFi-Reichweite sind. Dieses Projekt bietet eine einfache Grundlage für die Überwachung von Beschleunigungsdaten und die Erstellung eines digitalen Würfels, der aktiviert wird, wenn Sie den ADXL343-Sensor antippen.

Raspberry Pi Pico W verbunden mit einem ADXL343

Video

Benötigte Teile

Was ist der ADXL343?

Der ADXL343 von Analog Devices ist ein Nachfolger seines Vorgängers, des ADXL345.

Der Sensor kann drei Achsen messen und hat vier Empfindlichkeitseinstellungen: +-2g, +-4g, +-8g oder +-16g. Der niedrigere Bereich bietet eine höhere Auflösung für langsame Bewegungen, der höhere Bereich ist gut für Hochgeschwindigkeits-Tracking.

Der ADXL343 verfügt auch über eine CircuitPython-Bibliothek, die wir in MicroPython verwenden können, was den Einstieg sehr erleichtert.

Um Sensordaten mit dem Pico W zu streamen, müssen Sie die Header sowohl an den ADXL343 als auch an den Pico W anlöten.

Anschluss des ADXL343 an den Pico W

Es gibt vier Pins, die Sie mit dem Raspberry Pi verbinden müssen.

Verbinden Sie die VIN Pin an eine 3,3V Ausgang auf Ihrem Raspberry Pi Pico W;

Verbinden Sie die GND mit einem Erdungsstift an Ihrem Pico W;

Verbinden Sie die SDA anstecken GPIO0;

Verbinden Sie die SCL anstecken GPIO1.

Flashen von MicroPython-Firmware für den Raspberry Pi Pico W

Zuerst müssen Sie die MicroPython-Firmware auf den Pico W flashen, falls Sie das noch nicht getan haben.

Sie können es hier herunterladen.

Halten Sie dann die BOOTSEL-Taste gedrückt und schließen Sie Ihren Pico an Ihren Computer an. Sie sollten ein neues Laufwerk sehen. Kopieren Sie die .UF2-Datei, die Sie heruntergeladen haben, auf dieses Laufwerk.

Thonny für den Raspberry Pi Pico W einrichten

Öffnen Sie Thonny. Falls Sie es noch nicht heruntergeladen haben, erhalten Sie es hier.

Setzen Sie den Interpreter auf MicroPython (Raspberry Pi Pico) unten links im Fenster der Thonny IDE.

Kopieren von Bibliotheken auf den Pico W

Laden Sie die Bibliotheken und Dateien hier aus unserem Github-Repository herunter.

Sie können eine ZIP-Datei herunterladen, indem Sie auf diesen Link gehen und auf das grüne "Code" und Klicken auf ZIP herunterladen.

Entpacken Sie die heruntergeladene Datei an einem Ort, den Sie sich merken können.

Klicken Sie dann in Ihrer Thonny-IDE auf Ansicht > Dateien um Ihr Dateisystem und das Dateisystem des Pico W zu sehen.

Navigieren Sie zu den entpackten Dateien und gehen Sie in den Ordner MicroPython > II Pico W Sensor Server. Kopieren Sie alles auf Ihren Pico W, indem Sie mit der rechten Maustaste auf die einzelnen Elemente klicken und auf "Hochladen nach /" klicken.

Ändern des Codes

Damit sich der Raspberry Pi Pico mit Ihrem WiFi-Netzwerk verbinden kann, müssen Sie Folgendes öffnen geheimnisse.py und ändern Sie die ssid und pwWert. Geben Sie in die erste Zeile die SSID (Name) Ihres Netzwerks und in die zweite Zeile das Passwort ein. Speichern Sie die Datei.

Die index.html ist die Webseite, die angezeigt werden soll. Die Zeile "<p>X AccX | Y AccY | Z AccZ</p>" und <p>Ergebnis DiceVal</p> wird bei der Ausführung des Projekts durch Sensordaten ersetzt.

Verbinden Sie Ihren Raspberry Pi Pico mit WiFi

Die main.py ist der Ort des Geschehens.

Diese Leitungen verbinden es mit Ihrem WiFi. Vergessen Sie nicht, die Zeichenfolge in rp2.land wenn Ihr Land nicht Deutschland (DE) ist.


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

Die integrierte LED blinkt dreimal, wenn eine WiFi-Verbindung erfolgreich war, dank dieser Codezeilen. Es wird auch eine Meldung und Ihre IP-Adresse ausgegeben, die in Thonny angezeigt werden kann. Diese IP-Adresse ist nützlich, um später auf den Server zugreifen zu können.

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

Liegt ein Fehler vor, blinkt die LED entsprechend dem Wert des Fehlercodes.

Fehler Bedeutungen

  • 0 = Link Down
  • 1 = Link Join
  • 2 = Link NoIp
  • 3 = Link Up
  • -1 = Link Fail
  • -2 = Verknüpfung NoNet
  • -3 = Link BadAuth

Pico W an ADXL343 anschließen

Diese Zeile initialisiert ein I2C-Objekt:

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

Mit diesen beiden Leitungen wird der Beschleunigungssensor erstellt und die Erkennung von Gewindegängen (zum Ablesen von Würfeln) ermöglicht.

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

accelerometer.enable_tap_detection()

Zeit für die Ausführung des Codes

Um den Code auszuführen, drücken Sie in Thonny auf die Schaltfläche Ausführen, das ist die Schaltfläche mit dem Abspielsymbol in einer grünen Schaltfläche in der oberen Symbolleiste.

Verbinden Sie sich dann mit der IP-Adresse Ihres Raspberry Pi Pico W. Wenn Sie die Shell von Thonny geöffnet haben, können Sie sie dort sehen. Oder Sie können sich bei Ihrem Router anmelden und die IP-Adresse des Pico W herausfinden.

Der Pico W betreibt einen HTTP-Server mit einer Socket-Verbindung und lauscht auf Verbindungen, die hier definiert sind:

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

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

Wenn Sie sich mit der IP-Adresse Ihres Pico W verbinden, wird dieser Code ausgelöst, der index.html jede Sekunde mit den neuesten Daten aktualisiert.

   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 ersetzt die Werte durch den aktuellen Messwert, wenn Sie sich mit dem Server des Pico W verbinden.

Wie Sie sehen können, werden AccX, AccY und AccZ durch die Daten Ihres Sensors ersetzt.

Wenn der Sensor angetippt wird, wird eine zufällige ganze Zahl von 1 bis 6 in den String "DiceVal" auf der HTML-Seite gedruckt.

Was kommt als Nächstes?

Dieses Tutorial stellt eine einfache Möglichkeit dar, mit dem Raspberry Pi Pico W Sensordaten an eine Webseite zu übertragen.

Diesen Code können Sie auch für andere Sensoren verwenden.

Die Methodik bleibt dieselbe. Sie müssen die richtigen Bibliotheken für Ihre Sensoren finden und dann die main.py und index.html ändern, damit sie die Sensordaten erhalten und die richtigen Werte auf die Webseite übertragen können.

Es gibt viele andere Projekte, die Sie in Angriff nehmen können, wie z. B. einen Temperatur- und Luftfeuchtigkeitssensor oder vielleicht ein Luftqualitätsprojekt mit einem DHT22 oder BME688oder einen Helligkeitssensor mit einem Lichtwiderstand.

7 Kommentare

  1. Veröffentlich von Ken Anderson am Juli 15, 2022 um 7:24 am

    Es wäre sicher schön, HTML5-Funktionen zu verwenden, damit wir sehen können, wie HTML5 gemacht wird.

  2. Veröffentlich von Terry Young am September 24, 2022 um 6:47 pm

    Könnten die Daten nicht einfach als Zeichenkette an einem Port per TCP/UDP und nicht in einem Webseitenformat ausgegeben werden, so dass sie von einem anderen Computer gelesen werden könnten (um Messgeräte oder ähnliches zu erstellen)?
    etwas wie
    192.168.1.24:9060
    AccX, 7.923, AccY, 1.093, AccZ, -5.452
    AccX, 6.423, AccY, 1.241, AccZ, -8.769

  3. Veröffentlich von Ingo am Januar 10, 2023 um 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, dass 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

    • Veröffentlich von raspi berry am Februar 4, 2023 um 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 gerne beratungstechnisch aktiv werden 🙂 .

  4. Veröffentlich von Luis am Januar 11, 2023 um 3:30 pm

    Wie kann ich diese Daten an Thinspeak übermitteln?

  5. Veröffentlich von Eddi Baars am März 18, 2023 um 1:02 pm

    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. Veröffentlich von andrew am Juli 19, 2023 um 10:31 pm

    kein Modul namens Netzwerk, wenn hinzufügen netwrk Modul von thonny es dann beschwert sich der kein Modul namens Socket lol

Hinterlassen Sie einen Kommentar