Internet Rzeczy w pomiarach środowiskowych (16). Detekcja pożaru z płytką Raspberry Pi Pico 2 w języku Python

Internet Rzeczy w pomiarach środowiskowych (16). Detekcja pożaru z płytką Raspberry Pi Pico 2 w języku Python

Celem projektu było opracowanie inteligentnego urządzenia wykrywającego pożar. Zostały zastosowane: język MicroPython, płytka RPi Pico 2 i czujnik BME688. Monitorowane parametry środowiska są na bieżąco przetwarzane przez płytkę RPi Pico 2 i pokazywane na wyświetlaczu e-paper. Do wykrywania pożaru został wytrenowany model regresji logistycznej w oparciu o sigmoidalny klasyfikator.

Autorzy składają podziękowania p. Maciejowi Michnie z Centrum Badań i Rozwoju Nordic Semiconductor w Krakowie za udostępnienie zestawów sprzętowych Power Profiler Kit II (PPK2).

Wprowadzenie wymogu instalowania czujki dymu w – w zasadzie wszystkich – gospodarstwach domowych stwarza konieczność szerszego spojrzenia na zagadnienie. Bo właściwie co powinna monitorować czujka? Czy tylko dym? A co z samym pożarem, który praktycznie nie wytwarza dymu, tli się albo pali za ścianą?

W projekcie została podjęta próba zastosowania do tego zagadnienia nowoczesnego czujnika parametrów środowiska BME688 firmy Bosch [3]. Są doniesienia o użyciu go do wykrywania pożaru w lesie – czujnik reaguje na gazy wytwarzane przez ogień, czyli bada parametr, który nie jest uwzględniany w tradycyjnych czujkach dymu. Jest zatem nadzieja, że takie rozwiązanie może w istotny sposób poprawić jakość działania czujnika pożaru.

Udostępniona niedawno płytka Raspberry Pi Pico 2, o sporych możliwościach obliczeniowych, stwarza możliwość wykonania w sposób łatwy (i za rozsądną cenę) urządzenia typu proof-of-concept do wykonania eksperymentów.

Płytka RPi Pico2 firmy Raspberry Pi

Mikrokontroler RP2350 zawiera dwa rdzenie Arm Cortex-M33 @ 150 MHz z obsługą obliczeń zmiennoprzecinkowych i DSP oraz dwa rdzenie RISC-V Hazard 3 (także 150 MHz). Nowe płytki Pico 2 i Pico 2 W firmy Raspberry Pi (z procesorem RP2350A) są zgodne elektrycznie z płytkami Pico z pierwszej serii (Pico/Pico W). Dokładny opis jest zamieszczony w artykule „Płytka Raspberry Pi Pico 2/2 W z procesorem RP2350” [8].

Pico 2 ma wbudowaną przetwornicę buck-boost, która dostarcza napięcie 3,3 V (do zasilania RP2350 i obwodów zewnętrznych) z szerokiego zakresu napięć wejściowych (1,8 do 5,5 V). Daje to znaczną elastyczność w zasilaniu urządzenia z różnych źródeł, takich jak pojedyncze ogniwo litowo-jonowe lub 3 ogniwa AA połączone szeregowo. Najprostszym sposobem zasilania Pico 2 jest podłączenie kabla do gniazdka micro-USB. W nocie katalogowej Pico 2/2 W jest pokazane, jak poprzez dodanie tranzystora MOS można zrealizować potrzymanie bateryjne zasilania płytki [2].

Akumulator Li-Ion

W projekcie zastosowano akumulator Li-Ion AKY0926 typu 18650 o nominalnym napięciu 3,6 V i pojemności 3200 mAh. Maksymalne napięcie ładowania wynosi 4,2 V, a napięcie odcięcia to 2,75 V. Akumulator nie ma zabezpieczenia przed przeładowaniem i głębokim rozładowaniem. Do ładowania należy zatem stosować ładowarki procesorowe z odcięciem przy napięciu 4,2 V.

Moduł BME688 Breakout Board firmy pi3g

Moduł BME688 Breakout Board firmy pi3g zawiera układ BME688 firmy Bosch, skonfigurowany do pracy z szyną I²C [3]. Układ scalony BME688 jest zamontowany daleko od złączy płytki, co pozwala na poprawną pracę czujnika z daleka od źródeł ciepła. Moduł pobiera prąd na poziomie 50 mA. Złącze X1 ma wyprowadzone sygnały SCL, SDA oraz masę i zasilanie 3,3 V w sposób kompatybilny ze złączem GPIO płytki Raspberry Pi Pico. Wystarczy wyrównać pozycje 3,3 V na obydwu złączach. Pico ma dwa wyprowadzenia I2C1 (master) na GP27 (SCL) i GP26 (SDA).

Pico Inky Pack – moduł z wyświetlaczem e-Paper

Pico Inky Pack (PIM634) firmy Pimoroni to moduł z czarno-białym wyświetlaczem e-Paper o przekątnej 2,9” i rozdzielczości 296×128 pikseli, przeznaczony do użycia z płytkami z serii Raspberry Pi Pico. Ma wbudowany kontroler, który realizuje komunikację za pomocą interfejsu SPI. Wyświetlacze e-Paper cechują się wysokim kontrastem wyświetlanego obrazu i pobierają prąd tylko podczas zmiany wyświetlanej treści. Moduł ma wbudowane trzy przyciski. Jest zasilany z szyny 3V3 modułu Pico.

Pico Graphics to zunifikowana biblioteka graficzna firmy Pimoroni, umożliwiająca sterowanie wyświetlaczami z Pico w języku MicroPython [5]. Udostępnione są również przykłady.

Ekspander szyny Pico

Ekspandery szyny Pico firmy Pimoroni są przeznaczone do płytek z serii Raspberry Pi Pico. Wyposażone zostały w dwa standardowe złącza żeńskie do bezpośredniego wpięcia płytki serii Pico oraz zestawy męskich listew 2×20 pinów, które umożliwiają podłączenie dodatkowych modułów rozszerzeń. Etykiety pinów, umieszczone na górnej stronie płytki, znacznie ułatwiają prototypowanie. Ekspander Pico Decker (Quad Expander) (PIM555) ma cztery zestawy męskich listew, a Pico Omnibus (Dual Expander) PIM556 – dwa zestawy.

Dołączanie elementów do płytki RPi Pico 2

Układ został skompletowany z użyciem płytki Raspberry Pi Pico 2, modułu BME688 Breakout Board, ekspandera szyny Pico Omnibus, wyświetlacza e-Paper typu Pico Inky Pack, akumulatora Li-Ion typu 18650 oraz płytki z regulatorem LDO typu LT3045 i tranzystora MOSFET typu IRF7425 (fotografia tytułowa).

Układ może być zasilany przez gniazdko microUSB płytki Pico 2. W celu zapewnienia autonomicznej pracy, docelowym źródłem zasilania układu jest jeden akumulator typu 18650. Podłączenie tranzystora P-MOSFET typu IRF7425 (drain – do akumulatora, gate – do VBUS, source – do WSYS) umożliwia automatyczne przełączanie na akumulator w przypadku braku zasilania z gniazdka microUSB [2].

Do płytki Raspberry Pi Pico 2 można wlutować złącza goldpin. Najlepiej zastosować złącza z dłuższymi pinami [8]. Wtedy po wpięciu płytki do ekspandera (Pico Omnibus) jest dodatkowo zachowany pełny dostęp do wszystkich zasobów płytki. Bezpośrednio do męskich listew ekspandera został dołączony moduł Pico Inky Pack.

Moduł z czujnikiem BME688 został dołączony do ekspandera z zastosowaniem standardowych kabelków BLS. Linie I²C modułu wpięto do szyny I2C0 płytki Pico 2 (GP0 SDA, GP1 SCL).

Początkowo zasilanie modułu BME688 Breakout Board było dołączone do szyny 3V3 na płytce Pico 2 (masa do masy), jednak w trakcie eksperymentów okazało się, że silne zakłócenia na tej szynie zasilania (13 mVrms) powodują bardzo dużą zmienność wartości odczytywanych parametrów. Dlatego do szyny VSYS (12 mVrms) został dołączony regulator LDO (LT3045), który daje na wyjściu czyste napięcie 3,3 V (79 μVrms) do zasilania układu BME688. W wyniku tej modyfikacji uzyskano ponad dziesięciokrotną poprawę jakości pomiarów.

Druga płytka Pico/Pico 2 jako konwerter USB – UART

Jeśli płytka Pico 2 nie jest dołączona kablem USB do komputera, to nie ma połączenia komunikacyjnego z programem Thonny (ani zasilania 5 V) – energia jest wtedy pobierana z akumulatora, jednak brakuje możliwości podglądu pracy programu głównego. Można jednak zastosować drugą płytkę Pico (lub Pico 2) jako konwerter USB – UART. Trzeba, zgodnie z opisem w [10], pobrać kod debugprobe_on_pico.py ze strony [9] i zapisać go do pamięci płytki. Teraz ta płytka Pico, nazwijmy ją „Pico A”, pracuje jako debugger sprzętowy.

Dołączamy ją do płytki Pico 2 projektu („Pico2 B”) w następujący sposób:

  • Pico A GND -> Pico2 B GND
  • Pico A GP2 -> Pico2 B SWCLK
  • Pico A GP3 -> Pico2 B SWDIO
  • Pico A GP4/UART1 TX -> Pico2 B GP5/UART1 RX
  • Pico A GP5/UART1 RX -> Pico2 B GP4/UART1 TX

Obie płytki muszą mieć wspólne zasilanie, dlatego należy połączyć linie Pico A VSYS -> Pico2 B VSYS.

Płytkę Pico A trzeba połączyć z komputerem kablem USB z rozłączonym przewodem zasilania 5 V. Niestety, nie ma gotowych takich kabli z wtyczką microUSB, więc trzeba go wykonać samemu.

Przygotowanie środowiska programowego

Opracowany kod źródłowy pozwala na:

  • wykonywanie pomiarów czujnikiem Bosch BME688 i zapis wyników do pliku *.csv,
  • trening czujnika pod kątem klasyfikacji zdarzeń (pożar lub brak pożaru),
  • pracę czujnika z algorytmem wykrywania pożaru i wyświetlanie informacji na wyświetlaczu Pico Inky Pack.

Interpreter MicroPython firmy Pimoroni dla Pico 2 zawiera dodatkowo sterowniki wielu czujników oraz wyświetlaczy, w tym BME688 i Pico Inky Pack [1].

  1. Zmontuj elementy zgodnie z opisem.
  2. Pobierz najnowszy interpreter MicroPythona w pliku pico2-v0.0.12-pimoroni-micropython.uf2 ze strony firmy Pimoroni [1].
  3. Trzymając wciśnięty biały przycisk BOOTSEL podłącz Raspberry Pi Pico2 do komputera kablem microUSB.
  4. Skopiuj pobrany plik .uf2 na Raspberry Pi Pico2. Jest ono widoczne jako dysk RP2350 w eksploratorze plików Windows.
  5. W komputerze zainstaluj najnowszą wersję programu Thonny.
  6. Uruchom program Thonny.
  7. Kliknij na ikonkę trzech linii w prawym dolnym rogu i wybierz „Configure interpreter”.
  8. Ustaw typ interpretera na „MicroPython (Raspberry Pi Pico)”.
  9. Z menu w prawym dolnym rogu wybierz MicroPython (Raspberry Pi Pico) · Board CD @COMxx. Interpreter w polu Shell z wyświetli informację o wersji: MicroPython feature/psram-and-wifi, pico2 v0.0.12 on 2025-02-28; Raspberry Pi Pico2 with RP2350
  10. Pobierz folder code, zawierający kod aplikacji, z repozytorium dostępnego pod adresem: https://ep.com.pl/files/kcq/13725-code.zip.
  11. Otwórz w oknie Files folder code.
  12. Otwórz plik main.py w edytorze.
  13. Kliknij prawym klawiszem myszy plik main.py i wybierz Upload to.

Zbieranie danych treningowych

Pierwszym krokiem w celu umożliwienia pracy z czujnikiem służącym jako wykrywacz pożaru jest zebranie danych treningowych. Służy do tego plik bme_data_to_csv_collector.py, który wykonuje pomiary z czujnika BME688 i zapisuje je do pliku *.csv.

W ramach zbierania danych treningowych zostały wykonane pomiary:

  • w warunkach pokojowych (oznaczone później flagą „0”, sygnalizującą brak pożaru),
  • w warunkach symulujących pożar: czujnik ogrzewany był zapalniczką, a dym wytworzono z palącego się kadzidełka zapachowego (oznaczone później flagą„1”, sygnalizującą pożar).

Przygotowane dane, znajdujące się w pliku /code/data/full_data.csv, były następnie użyte do treningu czujnika.

Model ML

W projekcie zastosowano model regresji logistycznej z biblioteki scikit-learn [6], powszechnie używany w zadaniach klasyfikacji binarnej. Model oblicza prawdopodobieństwo przynależności do jednej z klas na podstawie funkcji sigmoidalnej opisanej wzorem:

gdzie z = coefficients X + intercept

X jest wektorem kolumnowym zawierającym klasyfikowane cechy wejściowe (dane z czujników). Wektor wierszowy coefficients, zawierający wagi modelu, a także stała intercept wyznaczane są podczas treningu.

Do trenowania modelu, czyli obliczenia wektora coefficients i stałej intercept, przeznaczony jest kod w pliku sk_train.py. Jest to program w języku Python3, do uruchomienia w standardowym interpreterze Pythona. Do poprawnego działania wymaga zainstalowanego pakietu pandas i scikit-learn (np. komendą pip install pandas scikit-learn). Dane treningowe powinny być umieszczone w podkatalogu data, w pliku data_train.csv (każdy wiersz zawiera oddzielną próbkę danych pomiarowych, ostatnia kolumna jest etykietą – zero oznacza brak pożaru, zaś jedynka – pożar).

Wyniki wykonania sk_train.py na przykładowych danych pokazane są na rysunku 1.

Rysunek 1. Rezultat wykonania z użyciem skryptu sk_train.py na przykładowych danych

Program do wykrywania pożaru

Algorytm wykrywania pożaru jest zaimplementowany w programie głównym main.py. Obliczone parametry modelu trzeba umieścić w pliku głównym projektu main.py, w miejscu oznaczonym: ### Model weights ###. Za klasyfikację odpowiedzialna jest funkcja predict. Argumentami wejściowymi są: zmienna features, zawierająca dane pomiarowe oraz zmienne coefficients i intercept, których wartości zostały wyznaczone w fazie trenowania. Wartością wyjściową funkcji jest 1 w przypadku wykrycia pożaru lub 0 w przypadku jego braku.

*Inicjalizacja:

  • Sprawdzanie obecności czujnika na szynie I²C
  • Ustawianie wartości początkowych zmiennych: previous_temperature = None, trigger_temperature = None (temperatura podczas ostatniej zmiany stanu statusu), pozar_triggered = False, normal_triggered = False oraz threshold = 15 (próg zmian temperatury).

*Główna pętla programu:

  • Sprawdzanie połączenia z czujnikiem – jeśli czujnik jest odłączony, program oczekuje na ponowne połączenie i wtedy inicjalizuje czujnik.
  • Odczyt danych z czujnika: temperatura [°C], ciśnienie [Pa], wilgotność [%] oraz rezystancja czujnika gazu [Ohm].
  • W przypadku utraty połączenia z czujnikiem jest wyświetlana i wysyłana informacja debugowa, a program oczekuje na przywrócenie połączenia.
  • Obliczenie różnicy temperatury – jeśli jest dostępna poprzednia temperatura previous_temperature, obliczana jest różnica: temp_diff = temperature − previous_temperature.

Logika wykrywania pożaru lub powrotu do stanu normalnego:

  • Jeśli pożar został wykryty (pozar_triggered = True), status zmienia się z „POŻAR” na „NORMAL” tylko wtedy, gdy temperatura spadnie o threshold względem trigger_temperature.
  • Jeśli pożar jest aktualnie wykrywany (normal_triggered = True): status zmienia się z „NORMAL” na „POŻAR” tylko, jeśli temperatura wzrośnie o threshold względem trigger_temperature.
  • Jeśli żaden z powyższych warunków nie jest spełniony to status, jest ustalany na podstawie wyniku predykcji modelu predict().

Wyświetlanie danych pomiarowych odbywa się na wyświetlaczu Pico Inky Pack przy zastosowaniu biblioteki PicoGraphics [5].Wyświetlane są dane: temperatura, wilgotność, ciśnienie atmosferyczne, pomiar gazu oraz status pomiaru: „NORMAL” lub „POŻAR”.

Status i parametry pomiarowe są wysyłane do konsoli przez port UART. Przykład typowych wartości pokazano na listingu 1. Pomiar gazów jest wykonywany trzykrotnie. Dla każdego pomiaru wyświetlany jest status zwracany przez czujnik BME688. Co prawda status drugiego pomiaru wskazuje stabilną pracę, jednak dynamiczny pomiar poboru prądu przez czujnik, pokazany dalej, wykazuje nie do końca poprawne funkcjonowanie – dlatego do analizy brany jest pod uwagę trzeci pomiar.

Sensor connected to I²C bus.
Temperature, Pressure, Humidity, Gas
Status1: Unstable, Status2: Stable, Status3: Stable
21.68c, 101675.09Pa, 49.36%, 15636.45 Ohm, Heater: Stable Status: NORMAL
Status1: Unstable, Status2: Stable, Status3: Stable
21.68c, 101675.09Pa, 49.22%, 16280.84 Ohm, Heater: Stable Status: NORMAL
Status1: Unstable, Status2: Stable, Status3: Stable
21.68c, 101675.16Pa, 49.26%, 17021.28 Ohm, Heater: Stable Status: NORMAL
Status1: Unstable, Status2: Stable, Status3: Stable
21.68c, 101675.16Pa, 49.27%, 17787.66 Ohm, Heater: Stable Status: NORMAL
Status1: Unstable, Stattus2: Stable, Staus3: Stable
21.68c, 101675.16Pa, 49.27%, 18465.09 Ohm, Heater: Stable Status: NORMAL

Listing. 1 Typowe wartości pomiarowe na początku pracy układu

Po rozpoczęciu pomiarów wartość odczytu gazu (rezystancja) czujnika BME688 szybko rośnie i utrzymuje się na wysokim poziomie (rysunek 2). W przypadku wystąpienia gazów typowych dla pożaru (związki siarki) rezystancja szybko maleje do niskiej wartości (typowo około 2000).

Z uwagi na to, że powstawanie pożaru jest zwykle dosyć wolnym zjawiskiem, zdecydowano się na realizację pomiarów w 5...10 sekundowych odstępach czasu.

Testy wykonywane były przy prowizorycznym, sztucznym pożarze. Wykazały one istotną zmianę temperatury, a także widoczne zmiany ciśnienia, wilgotności stężenia gazu (rezystancji czujnika). Eksperyment pokazał, że każda ze zmierzonych wartości może mieć znaczenie przy wykrywaniu pożaru.

Rysunek 2. Typowe wartości odczytu gazu (rezystancja) czujnika BME688 (dane za okres ok. 2 godzin)

Pomiary zasilania

Do dynamicznego pomiaru prądu zasilania bardzo dobrze nadaje się zestaw Power Profiler Kit II (PPK2) firmy Nordic Semiconductor. Jest to samodzielny układ, który bez zewnętrznego sprzętu może mierzyć i dostarczać prądy od poniżej 1 μA do 1 A. Praktyka pokazuje, że zakres pracy rozciąga się do ok. 2 A, symaga to jednak dołączenia dodatkowego portu USB do drugiego gniazdka PPK2. Bardzo przydatne jest osiem kanałów cyfrowych, próbkowanych synchronicznie z prądem. Dokładny opis PPK2 zamieszczono w artykule „Profilowanie mocy z zastosowaniem Power Profiler Kit II” [4].

Pomiary zasilania wykonano przy zasilaniu szyny VSYS płytki napięciem 4,118 V (typowym dla akumulatora Li-Po), bez dołączonego do płytki kabla USB i płytki debugprobe. Pobór prądu w trakcie pierwszego bloku pomiarowego (po uruchomieniu programu) pokazano na rysunku 3. Kanały cyfrowe sygnalizują czas wykonywania operacji (poziom wysoki): CH0 – pomiar i odczyt czujnika BME688, CH1 – przetwarzanie i wyświetlanie danych. Dla pierwszego i drugiego pomiaru wykonywanego przez czujnik BME688 prąd grzania nie jest stabilny. Status odczytów temperatury grzejnika czujnika pokazuje niestabilność pierwszego pomiaru i stabilność dwóch następnych. Wygląda na to, że w przypadku drugiego pomiaru nie jest to do końca prawdziwe – niestabilność występuje wtedy, gdy czas grzania nie jest wystarczający do osiągnięcia wymaganej temperatury, lub gdy żądaną temperaturę ustawiono na wartość nieosiągalnie wysoką.

Rysunek 3. Prąd zasilania układu detektora

Przy włączeniu zasilania płytki Pico 2 występuje przez 0,88 ms prąd rozruchowy o maksymalnej wartości 0,61 A. Może to stwarzać problemy w przypadku źródeł zasilania niskiej mocy (np. odnawialnych).

Średni poziom poboru prądu przez układ podczas operacji pomiaru i odczytu czujnika BME688 wynosi 28,04 mA, przy czym prąd fazy grzania dochodzi do ok. 32,46 mA. Przy średnim poborze prądu przez procesor na poziomie 16,72 mA daje to wynik dla czujnika (w czasie pomiaru) ok. 11,32 mA oraz w czasie grzania: 15,74 mA (ok. 100 ms). Średni pobór prądu całego układu wynosi ok. 17,44 mA przy powtarzaniu bloku pomiaru co ok. 15,74 s. Przy użyciu akumulatora o pojemności 3200 mAh energii wystarczy na około 183 godziny użytkowania, co jest równe ponad 7 dniom ciągłej pracy. Wyraźnie brakuje tutaj funkcji usypiania procesora podczas oczekiwania na następny pomiar. Dodanie obsługi komunikacji USB oraz portu USB tylko minimalnie zwiększa pobór prądu.

Podsumowanie

Zastosowanie płytki Raspberry Pi Pico 2 do obsługi czujnika BME688 okazało się trafionym pomysłem. Jednak dopiero użycie dodatkowego regulatora LDO, który daje czyste napięcie 3,3 V do zasilania układu BME688, przyniosło ponad dziesięciokrotną poprawę jakości pomiarów. Sporo informacji o poprawności pracy czujnika BME688 dał dynamiczny pomiar prądu zasilania z zastosowaniem zestawu Power Profiler Kit II (PPK2) firmy Nordic Semiconductor.

W próbach został zastosowany jeden rdzeń Arm Cortex-M33 mikrokontrolera RP2350, programowany w MicroPythonie. Jednak usypianie rdzenia ARM Cortex-M33 pomiędzy pomiarami okazało się niemożliwe z poziomu tej platformy.

Jest to pierwsze podejście do zagadnienia i wymaga przeprowadzenia szerszych badań, zaczynając już od zbierania wiarygodnych danych w stanie „normalnym” oraz w sytuacji pożaru. Obecne rozwiązanie bazuje przede wszystkim na detekcji szybkiego wzrostu temperatury i pomocniczym zastosowaniu wnioskowania ML. Ale już na tak wczesnym etapie zostały ukazane ciekawe zmiany poziomu ciśnienia i wilgotności w pomieszczeniu z otwartym ogniem.

Opis i realizacja oprogramowania bazuje na projekcie „Praca rdzeni Arm Cortex-M33 płytki Raspberry Pi Pico 2”, wykonanego w ramach przedmiotu „Systemy dla Internetu Rzeczy” na Wydziale Elektroniki i Technik Informacyjnych Politechniki Warszawskiej przez zespół w składzie: Sebastian Albowicz, Aleksander Bujnowski, Vladyslav Kyryk i Wiktor Niemirski.

Podziękowania dla Zbigniewa Szymańskiego za wsparcie w dziedzinie sztucznej inteligencji.

Henryk A. Kowalski
Instytut Informatyki
Politechnika Warszawska

Bibliografia:

  1. Pimoroni Pico MicroPython for RP2350/Pico2 boards https://github.com/pimoroni/pimoroni-pico-rp2350
  2. Raspberry Pi Pico 2, Datasheet, 2024-10-15, Raspberry Pi https://datasheets.raspberrypi.com/pico/pico-2-datasheet.pdf
  3. Czujnik gazu Bosch BME688 ze sztuczną inteligencją, EP 11/2021, https://ep.com.pl/kursy/15078-systemy-dla-internetu-rzeczy-54-bosch-bme688-czujnik-gazu-ze-sztuczna-inteligencja
  4. Profilowanie mocy z zastosowaniem Power Profiler Kit II, EP 5/2022, https://ep.com.pl/kursy/15267-systemy-dla-internetu-rzeczy-60-profilowanie-mocy-z-zastosowaniem-power-profiler-kit-ii
  5. Pico Graphics, Pimoroni, https://github.com/pimoroni/pimoroni-pico/tree/main/micropython/modules/picographics
  6. Scikit-learn: Machine Learning in Python, F. Pedregosa i in., Journal of Machine Learning Research 12 (2011), https://www.jmlr.org/papers/volume12/pedregosa11a/pedregosa11a.pdf
  7. BME68X, Pimoroni, https://github.com/pimoroni/pimoroni-pico/tree/main/micropython/examples/breakout_bme68x
  8. Pytka Raspberry Pi Pico 2/2W z procesorem RP2350, EP 3/2025, https://ep.com.pl/projekty/moduly-w-aplikacjach/16453-internet-rzeczy-w-pomiarach-srodowiskowych-15-plytka-raspberry-pi-pico-2-2w-z-procesorem-rp2350
  9. Pico 2 family, Raspberry Pi Pico 2, https://www.raspberrypi.com/documentation/microcontrollers/pico-series.html#pico-2-family
  10. Getting Started with Pico-series Microcontrollers. 2024-10-15, Raspberry Pi, https://datasheets.raspberrypi.com/pico/getting-started-with-pico.pdf
Artykuł ukazał się w
Elektronika Praktyczna
kwiecień 2025
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik listopad 2025

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio listopad - grudzień 2025

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje listopad - grudzień 2025

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna listopad 2025

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich grudzień 2025

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów