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

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

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.
Z pewnością byłoby miło użyć funkcji HTML5, abyśmy mogli zobaczyć jak HTML5 jest zrobiony