Monitor nawyków
Miałem przyjemność poprowadzenia warsztatu wprowadzającego w budowanie urządzeń z wykorzystaniem Raspberry Pico i języka Micropython. Pretekstem do zajęć było skonstruowanie prostego urządzenia wspomagającego budowanie pozytywnych nawyków - wciśnięcie prawego dolnego przycisku po realizacji monitorowanej czynności wysyła informację do serwisu Pixe.la, a na ekranie wyświetla się kolorowy kwadrat. Im więcej razy danego dnia się powtórzy czynność tym ciemniejszy kolor kwadratu. Nawigując z pomocą joysticka możliwe jest sprawdzenia statusu z ostatnich 5 dni.
Lista komponentów potrzebnych do realizacji
- Rasberry Pico 2 W
- LCD 0.96" Waveshare 19653
- przewód micro usb
- gwintowane wkładki M3 (krótkie, o zewnętrznej średnicy 4.2mm)
- śrubki M3 12mm
Narzędzia:
- lutownica
- PC
- drukarka 3d (lub dostęp do niej - do druku obudowy)
Przygotowanie środowiska dla Rasberry Pico i Micropython-a
- Pobierz firmware z micropythonem (plik u2f)
https://micropython.org/download/RPI_PICO2_W/
- Wciśnij i przytrzymaj przycisk na pico i podłącz go do komputera - zawartość pico powinna pokazać się jako nowy dysk
- Skopiuj plik .u2f na dysk pico - urządzenie powinno się zrestartować (zniknie dysk). Od tego momentu jest gotowe na programowanie z pomocą Micropython-a.
- Zainstaluj Thonny
- Uruchom Thonny. W View zaznacz wyświetlanie panelu z plikami (“Files” - powinien być zaznaczony “ptaszkiem”)
![]()
- Wejdź w Tools -> Options -> Interpreter. Z rozwijanej listy wybierz “MicroPython (Raspberry Pi Pico)”
![]()
- Edytor powinien teraz automatycznie wykryć podpięte Pico - będzie widoczne w prawym dolnym rogu edytora.
![]()
- Po wybraniu Pico w panelu z plikami powinno pokazać się to urządzenie (zawartość na początku może być pusta), a w sekcji “Shell” powinien pokazać się ekran powitalny interpretera MicroPython.
![]()
Uruchomienie wyświetlacza Waveshare 19653
- Połącz Pico z ekranem uważając na orientację pinów (ułatwia to oznaczenie na ekranie pokazujące po której stronie powinien znaleźć się port usb pico). Jeśli dysponujesz ekspanderem i jest ci wygodniej z nim pracować wepnij Pico i ekran w ekspander.
![]()
- Pobierz oprogramowanie od Waveshare
https://files.waveshare.com/wiki/common/Pico_code.7z
- Rozpakuj pobrane archwium .7z
- Odszukaj katalog Pyhon/Pico-LCD-0.96
- Otwórz zawarty w nim plik
pico-lcd-0.96.pyw Thonny. Zawiera on podstawowe funkcje do obsługi ekranu i proste demo.
![]()
- Uruchom ten kod z pomocą zielonego przycisku “Play”. Powinno to uruchomić to program demonstacyjny - wyświetli on ekran powitalny, następnie siatkę kwadratów po której możemy poruszać się z pomocą joysticka (z kolei przycisk A umożliwi zamalowanie kwadratu, B wyczyści ekran).
![]()
![]()
- Program można zatrzymać czerwonym przyciskiem “Stop”
![]()
- Skopiuj zawartość tego pliku
pico-lcd-0.96.pyi wklej go do plikuLCD_0inch96.pyna urządzeniu (trzeba go utworzyć)
Pixela
Pixela to serwis na którym będzie przechowywany graf z danymi - to z nim będzie się łączyć monitor nawyków.
- Załóż konto w Pixe.la
curl -X POST https://pixe.la/v1/users -d '{"token":<HASŁO>, "username":<NAZWA_UŻYTKOWNIKA>, "agreeTermsOfService":"yes", "notMinor":"yes"}'
Podmień to co jest w sekcji token i username na własne wartości (np. "token": "tomojesuperhaslo").
W wyniku tej operacji powinien się wyświetlić komunikat w stylu:
{"message":"Success.","isSuccess":true}
- Stwórz graf
curl -X POST https://pixe.la/v1/users/<NAZWA_UŻYTKOWNIKA>/graphs -H 'X-USER-TOKEN:<HASŁO>' -d '{"id":"<NAZWA_GRAFU>","name":"<NAZWA_GRAFU>","unit":"commit","type":"int","color":"shibafu"}'
- Graf możesz obejrzeć poprzez stronę
https://pixe.la/v1/users/<NAZWA_UŻYTKOWNIKA>/graphs/<NAZWA_GRAFU>
- Wartości można wstawiać poprzez:
curl -X POST https://pixe.la/v1/users/<NAZWA_UŻYTKOWNIKA>/graphs/<NAZWA_GRAFU> -H 'X-USER-TOKEN:<HASŁO>' -d '{"date":"<YYYYMMDD>","quantity":"1"}'
- Odczytać wartość z konkretnego dnia:
curl -X GET https://pixe.la/v1/users/<NAZWA_UŻYTKOWNIKA>/graphs/<NAZWA_GRAFU>/<YYYYMMDD> -H 'X-USER-TOKEN:<HASŁO>'
Wgranie kodu do monitora nawyków
- Pobierz kod monitora:
https://github.com/Pshemas/habit_tracker
- Przenieś wszystkie pliki na Pico
- Utwórz plik
.pixelai uzupełnij go danymi do Twojego grafu w serwisie Pixela. Zawartość powinna przestrzegać schematu:
PUT_PIXELA_USER_TOKEN_HERE
PUT_PIXELA_USERNAME_HERE
https://pixe.la/v1/users
PUT_PIXELA_GRAPH_NAME_HERE
- Utwórz plik
.wifii wprowadź w nim dane sieci wifi do którego urządzenie ma mieć dostęp.
PUT_WIFI_NAME_HERE
PUT_WIFI_PASSWORD_HERE
W tym momencie urządzenie powinno już działać po wystartowaniu.
Montaż
- Wydrukuj obudowę. Pliki z modelami są w podanym wyżej repozytorium na Github-ie.
- Użyj lutownicy aby wtopić wkładki M3 w otwory w górnej części obudowy:
![]()
Wkładki powinny być krótkie o zewnętrznej średnicy 4.2mm.
- Wklej małe przyciski na górną część obudowy.
- Pico połączone z ekranem umieść w dolnej części obudowy.
- Nałóż nakładkę na joystick.
- Nałóż górną część obudowy i skręć całość śrubami M3 12mm.
![]()
![]()
… zrobione :) .
Użytkowanie
Nawigacja po kwadratach odbywa się z pomocą joysticka. Górny prawy przycisk służy do odświeżenia danych (synchronizacji z serwerem Pixela), dolny do dodania +1 w dniu wciśnięcia przycisku.
W górnej części ekranu można zobaczyć wyniki aktualnie podświetlonego kwadratu, w dolnym status.
Modyfikacje
Kod do tej aplikacji nie jest “piękny”. Ma też celowo zostawione pewne “mankamenty” - do wyeliminowania przez uczestników warsztatów. Z rzeczy, które można zrobić:
- nie podobają ci się kolory? Zmień je. W pliku
colorset.pyznajdziesz przykładowe schematy oraz funkcję umożliwiającą konwersję standardowych kolorów RGB (888) na format przyjmowany przez ekran. - błąd w kodzie / pracy urządzenia wyświetla komunikat na ekranie. Warto by było przypisać w takiej sytuacji jeden z przycisków do resetu (
machine.reset()w micropythonie). - czasami po wciśnięciu przycisku rejestrującego wykonanie czynności (dodającego +1 w serwisie Pixela) nic się nie stanie. Wynika to z tego, że Pixala odrzuca 25% zapytań na darmowych kontach. To samo jest w przypadku odczytywania danych - ale w tym wypadku napisana przeze mnie funkcja podejmuje do 5 prób ponowienia działania. Spróbuj to samo wdrożyć w funkcji do wysyłania danych.
- może wolisz, żeby urządzenie wyświetlało więcej kwadratów na raz? Pokombinuj z funkcją wyświetlania i wielkością struktury danych odpowiedzialnej za ich przechowywania (lub wręcz zmień ją na inną)