Popularna "malinka" (Rapsberry z ang. malina) od Rapsberry Pi Foundations jako jedna z pierwszych otwarła drogę dla komputerów typu SBC (Single Board Computer - komputer na jednej płytce drukowanej) pod domowe strzechy. Po części zawdzięczała swą popularność dającymi duże możliwości zasobami sprzętowymi oraz dedykowanym systemem operacyjnym opartym o jądro Linuxa. Drugim aspektem była niska cena. Powstało mnóstwo akcesoriów rozszerzających możliwości "malinki" w postaci dodatkowych modułów przypominających nieco shieldy znane z Arduino. RPi zauważając popularność swego tworu nie zasypiało gruszek w popiele i pojawiały się kolejne wersje SBC dające coraz to większe zasoby a jednak cechujące się nadal niską ceną. Czasami jednak potrzeba małego komputera o dużych możliwościach dla bardzo początkujących, w ten sposób w oparciu o RP2040 powstało Rapsberry Pi Pico.
Moduł wyglądem przypomina nieco przerośnięte ArduinoNano czy BluePill, używa jednak kontrolera RP2040 zaprojektowanego przez RPi.
Moduł przy wymiarach około 21x51mm jest stosunkowo luźno obsadzony, ale przyjrzyjmy się schematowi;
W zasadzie poza układem przetwornicy zapewniającej zasilanie oraz pamięci flash i samego RP2040 praktycznie nic tu nie ma! W czym zatem tkwi siła Pico?
Dzięki zastosowaniu układu przetwornicy RT6150B-33 możemy Pico Pi zasilać napięciem od 1,5 do 5,5V co daje duże możliwości w budowie przenośnych urządzeń. Pamięć NAND flash W25Q16 pełni rolę nośnika oprogramowania użytkownika co daje 2MB "przestrzeni dyskowej".
No dobrze, ale co tak naprawdę kryje się pod nazwą RP2040? Tu przychodzi z pomocą strona RPi;
Zaraz zaraz, dwa rdzenie? Oczywiście jest to prawda! Poza dwoma rdzeniami ARM Cortex M0+ do dyspozycji mamy pełny zestaw układów peryferyjnych;
Co dostajemy do dyspozycji?
• Rdzeń ARM Cortex-M0+ Dual-Core 133 MHz
• Pamięć Flash na module 2 MB
• Złącze 40-pin, 23 GPIO cyfrowe oraz 3 piny ADC
• Interfejsy,2x UART, 2x I2C, 2x SPI, oraz aż do 16 kanałów PWM!
• Logika I/O to 3,3V niestety (o tym trochę później)
Oraz wiele wiele innych, tu zapraszam do szczegółowego zbadania noty katalogowej RP2040. Możemy nieco się zdziwić. Poniżej krótkie porównanie Pico pi vs Arduino UNO/Nano.
Jak zacząć pracę z Pico Pi? Dla mniej zaawansowanych programistów oraz nowicjuszy (tak jak ja
) dobrym startem może być skorzystanie z Arduino IDE. Biblioteki oraz definicje płytek są dostępne, tu pod nazwą Arduino Mbed OS RP2040 Boards;
Pierwszy sketch czyli przykładowy blink (miganie LED) i Arduino IDE wyrzuca błąd;
Musimy uruchomić bootloader RP2040, aby to zrobić trzeba przytrzymać wciśnięty przycisk BOOTSEL w module i podłączyć USB. Dla mnie takie rozwiązanie jest nieco mało komfortowe gdyż trudno jest mi taką operację przeprowadzić jedną dłonią. Nie mniej po takim podłączeniu moduł zgłasza się w systemie jako dysk przenośny;
Dysk zawiera link do strony z dokumentacją Rapsberry oraz plik tekstowy z wersją bootloadera;
Tu jednak powstał mały problem, na warsztatowym PC mam Arduino IDE w wersji 1.8.19 oraz Win 7 32, problemem są sterowniki CDC. System wykrywał Pico jedynie jako zewnętrzny dysk (po wciśnięciu i przytrzymaniu przycisku oraz podłączeniu do USB) oraz sygnalizował w Menadżerze Urządzeń nowe urządzenia ale bez sterowników (wykrzyknik). Nawet po zainstalowaniu sterownika z tej strony https://learn.adafruit.com/welcome-to-circuitpython/windows-7-and-8-1-drivers, Arduino IDE nie "widziało" Pico Pi. Obszedłem ten problem w może mało wygodny lecz skuteczny sposób
. Po prostu skopiowałem skompilowany sketch z folderu tymczasowego (tam gdzie Arduino IDE przechowuje wyniki kompilacji) bezpośrednio do folderu głównego Pico;
Tu jeszcze pewne wyjaśnienie, kompilator tworzy kilka plików o różnych rozszerzeniach np. .hex dla AVR. Dla Pico gotowym plikiem jest ten z rozszerzeniem .uf2, bootloader uruchamia ten plik automatycznie po włączeniu zasilania;
Praktycznie choć są dwa pliki z takim rozszerzeniem to oba działają identycznie, a przynajmniej ja nie zauważyłem żadnych różnic. Na domowym laptopie z Win 10 64 oraz Arduino IDE w wersji 2.01 wszystko zadziałało "od strzała", dowodem jest poniższy film;
Tu dochodzimy do tego, dlaczego napisałem że RP2040 niestety dysponuje logiką 3,3V. Zajmuję się głównie techniką cyfrową z logiką TTL czyli 5V i poza kilkoma różnymi wyświetlaczami TFT nie dysponuję żadnymi peryferiami dającymi się bezpośrednio (bez konwertera poziomów) podłączyć do Pico. Pierwsze próby z wykorzystaniem TFT 320x240 ze sterownikiem ILI9341 spełzły na niczym, Arduino IDE mimo zainstalowanych odpowiednich bibliotek odmawiało współpracy. Tu nie jestem do końca przekonany czy to moje małe z nim doświadczenie czy po prostu jest to jeszcze niedopracowane dla Pico w tym środowisku.
Zaraz, przecież wcale nie muszę korzystać z Arduino IDE. RP2040 można programować w C, C++ (bardzo słabo znam) oraz w Pythonie. Ale co to jest ten Python?
Cytując za Wikipedią;
Grafika zaczerpnięta ze strony Adafruit
Python występuje w kilku wersjach zależnie od zastosowania, jedną z wersji jest CircuitPython który jest głównie przeznaczony do obsługi sprzętu. Jednym z darmowych edytorów/IDE jest Thonny, którego to postanowiłem zainstalować. Samo jednak zainstalowanie nic nam nie da, musimy wgrać również jego "jądro" do Pi Pico. Aby to zrobić kopiujemy plik z "jądrem" do Pico a wtedy po uruchomieniu Thonny i podłączeniu Pico do USB zgłasza się "Wąż" na nasze rozkazy
;
Oczywiście język interfejsu możemy wybrać;
Dobrze jest też ustawić autodetekcję podłączonego Pico;
Jądro Ciruit Python'a możemy pobrać stąd; https://circuitpython.org/board/raspberry_pi_pico/ a potrzebne biblioteki są tu; https://circuitpython.org/libraries. Szukając przykładowego programu korzystającego z wyświetlacza trafiłem na emulator on-line;
https://wokwi.com/ , https://wokwi.com/projects/309427357921313345
Po zbudowaniu na płytce stykowej układu testowego z wyświetlaczem OLED 128x32 opartym o kontroler SSD1306 i uruchomieniu programu jest sukces
;
Tu takie drobne wyjaśnienie, program uruchamiamy i zatrzymujemy niejako zdalnie. Program nie będzie uruchamiał się automatycznie po włączeniu zasilania, aby to nastąpiło należy zmienić nazwę pliku zawierającego nasz program w katalogu głównym na code.py lub main.py.
Domyślnie plik code.py zawiera tylko to; print("Hello World!"). Jeśli zmienimy nazwę naszego programu to wystartuje on automatycznie i będzie działać w pętli i o ile nie umieścimy w programie jakiejś funkcji zatrzymującej go (np. przez dodatkowy przycisk czy inny warunek) to stracimy dostęp do Pico z poziomu edytora Pythona na komputerze. Robimy tzw. bricka czyli cegiełkę. Tu nawet wgranie za pomocą bootloadera ponownie pliku .uf2 z jądrem Pythona czy skompilowanego w Arduino IDE szkicu nic nam nie da. Trzeba wgrać "czyściciela" pamięci flash, o czym wspomina dokumentacja Pico Pi;
Po prostu musimy wgrać plik flash_nuke.uf2, po tym zabiegu mamy czystą pamięć flash i możemy kontynuować nasze zabawy. Tu możemy być spokojni o uszkodzenie RP2040 w sposób programowy, sam bootloader jest zapisany w pamięci ROM i o ile nie uszkodziliśmy elektrycznie układu to nic złego się nie stanie
. Pewną ciekawą alternatywą dla początkujących i mniej wymagających użytkowników może być użycie MicroBlocks czyli tworzenie programu w sposób graficzny przy pomocy zdefiniowanych klocków.
Moduł Pico Pi uważam za świetną alternatywę dla innych płytek rozwojowych, duża ilość GPIO, stosunkowo szybki przetwornik 12-to bitowy ADC (~500ksps) w połączeniu z dwoma rdzeniami oraz całkiem przyzwoita ilość RAM daje bardzo duże możliwości. Rapsberry Pico Pi występuje w kilku wersjach różniących się nieco designem PCB oraz dodatkowo komunikacją WiFi;
Wersje od lewej;
• Rapsberry Pico Pi (prezentowana w tekście) - RP2040 na płytce ze złączami umożliwiającymi bezpośrednie lutowanie lub użycie goldpin
• Rapsberry Pico Pi H - jak wyżej z fabrycznie wlutowanymi goldpinami
• Rapsberry Pico Pi W - tak jak Pico Pi + komunikacja WiFi oparta o układ CYW43439
• Rapsberry Pico Pi WH - tak jak Pico Pi W z fabrycznie wlutowanymi goldpinami
Wersje z WiFi różnią się sekcją zasilania ze względu na dodatkowy pobór mocy przez kontroler sieci bezprzewodowej, zastąpiono RT6150 układem RT6154. Co ciekawe Rapsberry udostępnia dokumentację dla płytki rozszerzeń pod nazwą VGA Carrier Board dla KiCad która dysponuje dwoma wyjściami DAC (jedno PWM a drugie z przetwornika I2S/PCM) oraz wyjściem VGA a także slotem kart mikro SD, poniżej rendering płytki na moim warsztatowym PC;
Bardzo spodobało mi się Pico Pi
Pozostaje zdobyć jakieś peryferia i uczyć się uczyć... Kilka pomysłów na zastosowanie mam ale tu bez wiedzy oraz umiejętności trochę czasu może to zająć...
Moduł wyglądem przypomina nieco przerośnięte ArduinoNano czy BluePill, używa jednak kontrolera RP2040 zaprojektowanego przez RPi.
Moduł przy wymiarach około 21x51mm jest stosunkowo luźno obsadzony, ale przyjrzyjmy się schematowi;
Rapsberry Pi Pico schemat ideowy
W zasadzie poza układem przetwornicy zapewniającej zasilanie oraz pamięci flash i samego RP2040 praktycznie nic tu nie ma! W czym zatem tkwi siła Pico?
RT6150B-33 przetwornica buck-bost
Dzięki zastosowaniu układu przetwornicy RT6150B-33 możemy Pico Pi zasilać napięciem od 1,5 do 5,5V co daje duże możliwości w budowie przenośnych urządzeń. Pamięć NAND flash W25Q16 pełni rolę nośnika oprogramowania użytkownika co daje 2MB "przestrzeni dyskowej".
No dobrze, ale co tak naprawdę kryje się pod nazwą RP2040? Tu przychodzi z pomocą strona RPi;
Zaraz zaraz, dwa rdzenie? Oczywiście jest to prawda! Poza dwoma rdzeniami ARM Cortex M0+ do dyspozycji mamy pełny zestaw układów peryferyjnych;
Co dostajemy do dyspozycji?
• Rdzeń ARM Cortex-M0+ Dual-Core 133 MHz
• Pamięć Flash na module 2 MB
• Złącze 40-pin, 23 GPIO cyfrowe oraz 3 piny ADC
• Interfejsy,2x UART, 2x I2C, 2x SPI, oraz aż do 16 kanałów PWM!
• Logika I/O to 3,3V niestety (o tym trochę później)
Oraz wiele wiele innych, tu zapraszam do szczegółowego zbadania noty katalogowej RP2040. Możemy nieco się zdziwić. Poniżej krótkie porównanie Pico pi vs Arduino UNO/Nano.
Pinout Pico Pi oraz funkcje wyprowadzeń
Jak zacząć pracę z Pico Pi? Dla mniej zaawansowanych programistów oraz nowicjuszy (tak jak ja

Pierwszy sketch czyli przykładowy blink (miganie LED) i Arduino IDE wyrzuca błąd;
Musimy uruchomić bootloader RP2040, aby to zrobić trzeba przytrzymać wciśnięty przycisk BOOTSEL w module i podłączyć USB. Dla mnie takie rozwiązanie jest nieco mało komfortowe gdyż trudno jest mi taką operację przeprowadzić jedną dłonią. Nie mniej po takim podłączeniu moduł zgłasza się w systemie jako dysk przenośny;
Dysk zawiera link do strony z dokumentacją Rapsberry oraz plik tekstowy z wersją bootloadera;
Tu jednak powstał mały problem, na warsztatowym PC mam Arduino IDE w wersji 1.8.19 oraz Win 7 32, problemem są sterowniki CDC. System wykrywał Pico jedynie jako zewnętrzny dysk (po wciśnięciu i przytrzymaniu przycisku oraz podłączeniu do USB) oraz sygnalizował w Menadżerze Urządzeń nowe urządzenia ale bez sterowników (wykrzyknik). Nawet po zainstalowaniu sterownika z tej strony https://learn.adafruit.com/welcome-to-circuitpython/windows-7-and-8-1-drivers, Arduino IDE nie "widziało" Pico Pi. Obszedłem ten problem w może mało wygodny lecz skuteczny sposób

Tu jeszcze pewne wyjaśnienie, kompilator tworzy kilka plików o różnych rozszerzeniach np. .hex dla AVR. Dla Pico gotowym plikiem jest ten z rozszerzeniem .uf2, bootloader uruchamia ten plik automatycznie po włączeniu zasilania;
Praktycznie choć są dwa pliki z takim rozszerzeniem to oba działają identycznie, a przynajmniej ja nie zauważyłem żadnych różnic. Na domowym laptopie z Win 10 64 oraz Arduino IDE w wersji 2.01 wszystko zadziałało "od strzała", dowodem jest poniższy film;
Tu dochodzimy do tego, dlaczego napisałem że RP2040 niestety dysponuje logiką 3,3V. Zajmuję się głównie techniką cyfrową z logiką TTL czyli 5V i poza kilkoma różnymi wyświetlaczami TFT nie dysponuję żadnymi peryferiami dającymi się bezpośrednio (bez konwertera poziomów) podłączyć do Pico. Pierwsze próby z wykorzystaniem TFT 320x240 ze sterownikiem ILI9341 spełzły na niczym, Arduino IDE mimo zainstalowanych odpowiednich bibliotek odmawiało współpracy. Tu nie jestem do końca przekonany czy to moje małe z nim doświadczenie czy po prostu jest to jeszcze niedopracowane dla Pico w tym środowisku.
Zaraz, przecież wcale nie muszę korzystać z Arduino IDE. RP2040 można programować w C, C++ (bardzo słabo znam) oraz w Pythonie. Ale co to jest ten Python?
Cytując za Wikipedią;
Quote:Python – język programowania wysokiego poziomu ogólnego przeznaczenia, o rozbudowanym pakiecie bibliotek standardowych, którego ideą przewodnią jest czytelność i klarowność kodu źródłowego. Jego składnia cechuje się przejrzystością i zwięzłością.
Oswajamy węża, czyli pierwsze kroki
Grafika zaczerpnięta ze strony Adafruit
Python występuje w kilku wersjach zależnie od zastosowania, jedną z wersji jest CircuitPython który jest głównie przeznaczony do obsługi sprzętu. Jednym z darmowych edytorów/IDE jest Thonny, którego to postanowiłem zainstalować. Samo jednak zainstalowanie nic nam nie da, musimy wgrać również jego "jądro" do Pi Pico. Aby to zrobić kopiujemy plik z "jądrem" do Pico a wtedy po uruchomieniu Thonny i podłączeniu Pico do USB zgłasza się "Wąż" na nasze rozkazy

Oczywiście język interfejsu możemy wybrać;
Dobrze jest też ustawić autodetekcję podłączonego Pico;
Jądro Ciruit Python'a możemy pobrać stąd; https://circuitpython.org/board/raspberry_pi_pico/ a potrzebne biblioteki są tu; https://circuitpython.org/libraries. Szukając przykładowego programu korzystającego z wyświetlacza trafiłem na emulator on-line;
https://wokwi.com/ , https://wokwi.com/projects/309427357921313345
Po zbudowaniu na płytce stykowej układu testowego z wyświetlaczem OLED 128x32 opartym o kontroler SSD1306 i uruchomieniu programu jest sukces

Tu takie drobne wyjaśnienie, program uruchamiamy i zatrzymujemy niejako zdalnie. Program nie będzie uruchamiał się automatycznie po włączeniu zasilania, aby to nastąpiło należy zmienić nazwę pliku zawierającego nasz program w katalogu głównym na code.py lub main.py.
Domyślnie plik code.py zawiera tylko to; print("Hello World!"). Jeśli zmienimy nazwę naszego programu to wystartuje on automatycznie i będzie działać w pętli i o ile nie umieścimy w programie jakiejś funkcji zatrzymującej go (np. przez dodatkowy przycisk czy inny warunek) to stracimy dostęp do Pico z poziomu edytora Pythona na komputerze. Robimy tzw. bricka czyli cegiełkę. Tu nawet wgranie za pomocą bootloadera ponownie pliku .uf2 z jądrem Pythona czy skompilowanego w Arduino IDE szkicu nic nam nie da. Trzeba wgrać "czyściciela" pamięci flash, o czym wspomina dokumentacja Pico Pi;
Po prostu musimy wgrać plik flash_nuke.uf2, po tym zabiegu mamy czystą pamięć flash i możemy kontynuować nasze zabawy. Tu możemy być spokojni o uszkodzenie RP2040 w sposób programowy, sam bootloader jest zapisany w pamięci ROM i o ile nie uszkodziliśmy elektrycznie układu to nic złego się nie stanie

Widok edytora MicroBlocks z programem dla dziesięciu mrugnięć wbudowanego w Pico Pi LED
Moduł Pico Pi uważam za świetną alternatywę dla innych płytek rozwojowych, duża ilość GPIO, stosunkowo szybki przetwornik 12-to bitowy ADC (~500ksps) w połączeniu z dwoma rdzeniami oraz całkiem przyzwoita ilość RAM daje bardzo duże możliwości. Rapsberry Pico Pi występuje w kilku wersjach różniących się nieco designem PCB oraz dodatkowo komunikacją WiFi;
Wersje od lewej;
• Rapsberry Pico Pi (prezentowana w tekście) - RP2040 na płytce ze złączami umożliwiającymi bezpośrednie lutowanie lub użycie goldpin
• Rapsberry Pico Pi H - jak wyżej z fabrycznie wlutowanymi goldpinami
• Rapsberry Pico Pi W - tak jak Pico Pi + komunikacja WiFi oparta o układ CYW43439
• Rapsberry Pico Pi WH - tak jak Pico Pi W z fabrycznie wlutowanymi goldpinami
Wersje z WiFi różnią się sekcją zasilania ze względu na dodatkowy pobór mocy przez kontroler sieci bezprzewodowej, zastąpiono RT6150 układem RT6154. Co ciekawe Rapsberry udostępnia dokumentację dla płytki rozszerzeń pod nazwą VGA Carrier Board dla KiCad która dysponuje dwoma wyjściami DAC (jedno PWM a drugie z przetwornika I2S/PCM) oraz wyjściem VGA a także slotem kart mikro SD, poniżej rendering płytki na moim warsztatowym PC;
Bardzo spodobało mi się Pico Pi

Cool? Ranking DIY