Przesyłanie danych z czujników przez WiFi z Raspberry Pi Pico W

Raspberry Pi Pico W podłączone do ADXL343

Jedno z najlepszych zastosowań Raspberry Pi Pico W wiąże się z jego zdolnością do serwowania stron internetowych.

Oznacza to, że możesz go używać do monitorowania danych z czujników z telefonu, o ile jesteś w zasięgu WiFi.

Ten projekt dostarczy prostych podstaw, jak można monitorować dane o przyspieszeniu, a także stworzyć cyfrową kostkę, która jest aktywowana po dotknięciu czujnika ADXL343.

Wideo

Potrzebne części

  • Tablica ogłoszeń
  • Przewody do zworki

Czym jest ADXL343?

ADXL343 firmy Analog Devices jest następcą swojego poprzednika, ADXL345.

Czujnik może mierzyć trzy osie pomiarowe i ma cztery ustawienia czułości,+-2g, +-4g, +-8g lub +-16g. Niższy zakres daje większą rozdzielczość dla powolnych ruchów, wyższy zakres jest dobry do śledzenia dużych prędkości.

ADXL343 posiada również bibliotekę CircuitPython, którą możemy wykorzystać w MicroPythonie, co znacznie ułatwia rozpoczęcie pracy.

Aby wykonać ten projekt, należy mieć przylutowane wyprowadzenia na ADXL343, jak również na Pico W.

Podłączenie układu ADXL343 do układu Pico W

Istnieją cztery piny, które należy podłączyć do Raspberry Pi.

Podłączyć VIN pinezka do Wyjście 3,3V na swoim Raspberry Pi Pico W;

Podłączyć GND do styku z masą w Pico W;

Podłączyć SDA wtyk do GPIO0;

Podłączyć SCL wtyk do GPIO1.

Flashowanie firmware MicroPython dla Raspberry Pi Pico W

Po pierwsze, trzeba będzie flashować firmware MicroPython na Pico W, jeśli jeszcze tego nie zrobiłeś.

Można go pobrać tutaj.

Następnie naciśnij i przytrzymaj przycisk BOOTSEL i podłącz swoje Pico do komputera. Powinieneś zobaczyć nowy napęd. Skopiuj pobrany plik .UF2 na ten dysk.

Konfiguracja Thonny dla Raspberry Pi Pico W

Otwórz Thonny. Jeśli jeszcze go nie pobrałeś, zdobądź go tutaj.

Ustawić interpreter na MicroPython (Raspberry Pi Pico) w lewej dolnej części okna Thonny IDE.

Kopiowanie bibliotek na Pico W

Pobierz biblioteki i pliki tutaj z naszego repo Github.

Możesz pobrać plik ZIP, wchodząc na ten link i klikając zielony "Kod" i klikając Pobierz ZIP.

Po pobraniu rozpakuj go gdzieś, gdzie będziesz pamiętał.

Następnie, w IDE Thonny, kliknij na Widok > Pliki aby zobaczyć swój system plików i system plików Pico W.

Przejdź do rozpakowanych plików i wejdź do folderu MicroPython > II Pico W Sensor Server. Skopiuj wszystko na swoje Pico W, klikając prawym przyciskiem myszy na każdym elemencie i klikając "Upload to /"

Modyfikacja kodu

Aby Raspberry Pi Pico połączyło się z Twoją siecią WiFi, musisz otworzyć sekrety.py i zmodyfikować ssid oraz pwwartość. W pierwszym polu wpisz SSID (nazwę) swojej sieci, a w drugim hasło. Zapisz plik.

Strona index.html to strona internetowa, która zostanie zaserwowana. Linia "<p>X AccX | Y AccY | Z AccZ</p>" oraz <p>Rezultat DiceVal</p> zostanie zastąpiony danymi z czujników podczas uruchamiania projektu.

Podłącz Raspberry Pi Pico do WiFi

Strona main.py to miejsce, gdzie dzieje się akcja.

Te linie łączą go z twoim WiFi. Nie zapomnij zmienić ciągu w rp2.kraj jeśli Twoim krajem nie są Niemcy (DE).


# Ustaw kraj, aby uniknąć ewentualnych błędów
rp2.country('DE')

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
# Jeśli chcesz wyłączyć tryb oszczędzania energii
# wlan.config(pm = 0xa11140)

# Zobacz adres MAC w chipie bezprzewodowym OTP
mac = ubinascii.hexlify(network.WLAN().config('mac'),':').decode()
print('mac = ' + mac)

# Inne rzeczy do odpytywania
# print(wlan.config('channel'))
# print(wlan.config('essid'))
# print(wlan.config('txpower'))

# Dla bezpieczeństwa wczytaj dane logowania z innego pliku
ssid = secrets['ssid']
pw = secrets['pw']

wlan.connect(ssid, pw)

Dzięki tym linijkom kodu dioda LED na płycie będzie migać trzy razy, jeśli połączenie WiFi się powiedzie. Wydrukuje również wiadomość i adres IP, który można zobaczyć w Thonny. Ten adres IP jest przydatny, aby później uzyskać dostęp do serwera.

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

Jeśli wystąpi błąd, dioda LED będzie migać w zależności od wartości kodu błędu.

Znaczenia błędów

  • 0 = Link Down
  • 1 = połączenie
  • 2 = Link NoIp
  • 3 = Połączenie w górę
  • -1 = Link Fail
  • -2 = połączenie NoNet
  • -3 = Link BadAuth

Podłącz Pico W do ADXL343

Ta linia inicjalizuje obiekt I2C:

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

Następnie te dwie linie tworzą akcelerometr i umożliwiają wykrywanie stuknięć (do odczytu kostek).

# Tworzenie obiektu akcelerometru
accelerometer = adafruit_adxl34x.ADXL343(i2c)

accelerometer.enable_tap_detection()

Czas na uruchomienie kodu

Aby uruchomić kod, należy w Thonny nacisnąć przycisk Run, czyli przycisk z ikoną gry w zielonym przycisku na górnym pasku narzędzi.

Następnie połącz się z adresem IP swojego Raspberry Pi Pico W. Jeśli masz otwartą powłokę Thonny, możesz ją tam podejrzeć. Albo inaczej, możesz zalogować się do swojego routera i dowiedzieć się, jaki jest adres IP Pico W.

Pico W uruchamia serwer HTTP z połączeniem gniazdowym i nasłuchuje połączeń, zdefiniowanych tutaj:

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

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

Kiedy połączysz się z adresem IP swojego Pico W, uruchomi on ten kod, który co sekundę odświeży index.html z najnowszymi danymi.

   cl, addr = s.accept()
        print('Klient połączony z', addr)
        cl_file = cl.makefile('rwb', 0)
        while True:
            line = cl_file.readline()
            if not line or line == b'\u0026.html:
                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]))
        jeśli stuknięty:
            dice_val = str(random.randint(1,6))
        response = response.replace('DiceVal', dice_val)
        
        cl.send('HTTP/1.0 200 OKContent-type: text/html')
        cl.send(response)
        cl.close()
main.py zastępuje wartości aktualnym odczytem, gdy połączysz się z serwerem Pico W.

Jak widać, zastępuje on AccX, AccY i AccZ danymi z twojego czujnika.

Jeśli czujnik zostanie dotknięty, to na stronie HTML zostanie wypisana losowa liczba całkowita od 1 do 6 do łańcucha "DiceVal".

Co dalej?

Ten tutorial przedstawia jeden prosty sposób na przesyłanie danych z czujników na stronę internetową.

W rzeczywistości jest to kod, który możesz wykorzystać również dla innych czujników.

Metodologia pozostaje taka sama. Musisz znaleźć odpowiednie biblioteki dla swoich czujników, a następnie zmodyfikować main.py i index.html, aby mogły one uzyskać dane z czujników i wypchnąć odpowiednie wartości na stronę internetową.

Istnieje wiele innych projektów, które możesz rozpocząć, takich jak projekt czujnika temperatury i wilgotności z DHT22 lub BME688, lub czujnik jasności z rezystorem światła.

Komentarzy: 1

  1. Ken Anderson lipiec 15, 2022 o 7:24 am

    Z pewnością byłoby miło użyć funkcji HTML5, abyśmy mogli zobaczyć jak HTML5 jest zrobiony

Pozostaw komentarz