Zapraszam na praktyczną prezentację i uruchomienie modułu Sipeed M1s Dock z kamerą 2MP o interfejsie MIPI CSI i 1.69-calowym wyświetlaczem 280x240 z pojemnościowym ekranem dotykowym, przeznaczonego do zastosowań AIoT. Moduł był już pokrótce prezentowany w temacie: Sipeed M1s i M0sense - niedrogie moduły AI oparte na BL808 i BL702
więc tu skupię się na pokazaniu jak wygląda on w praktyce.
Płytkę można kupić za nieco ponad 100 zł:
Ważne jest, abyśmy wybrali zestaw z kamerką i ekranikiem. Łatwo jest się nabrać na niższą cenę, gdzie w rzeczywistości kupujemy np. sam moduł lub obudowę. Trzeba dobrze sprawdzać co zamawiamy.
Co oferuje M1S?
Oddajmy głos specyfikacji od sprzedawcy:
Wyprowadzenia:
Można dokupić też obudowę, choć jej zamontowanie wymaga przełożenia kamerki na drugą stronę modułu:
Podstawą naszej pracy z tym modułem pewnie będzie dokumentacja z sipeed com:
https://wiki.sipeed.com/hardware/en/maix/m1s/m1s_dock.html
Sam też na tych materiałach bazowałem. Poniżej opis moich kroków, wraz z moimi uwagami i doświadczeniami.
Pierwsze uruchomienie
Podłączamy zasilanie do portu OTG i wciskamy przycisk RESET. Płytka powinna się wybudzić, uruchomi się ekran i kamera.
Opóźnienie z kamery nie jest odczuwalne, wszystko działa bardzo płynnie:
Na ekranie pojawia się również stan przycisków, w ramach demonstracji mogą one zmienić wartość liczby w prawym górnym rogu:
Dodatkowo nasz komputer rozpozna nowe urządzenie USB. To może posłużyć nam do wgrywania firmware.
W dokumentacji producenta pokazany jest tu dysk USB 3.73MB, u mnie rozmiar jest nieco większy. Czyżbym miał nowszą wersję z większą pamięcią?
Drugi slot USB C oferuje dostęp do portu szeregowego. Należy wybrać baud 2000000:
A właściwie - do portów szeregowych, bo są dwa:
Pierwszy to już pokazany log, drugi to linia komend.
Można wysyłać tam komendy, przykładowo help:
Demko lvgl_demo
Zapoznajmy się teraz z kilkoma przykładami z M1s_BL808_example. Na początek demo graficzne.
LVGL (Light and Versatile Graphics Library) to darmowa biblioteka open source przeznaczona do rysowania grafiki.
Skomplilowany przykład dostępny jest tutaj:
https://dl.sipeed.com/shareURL/MAIX/M1s/M1s_Dock/7_Firmware/demo_bin/lvgl_demo
Aby wgrać wsad, trzeba najpierw wprowadzić płytkę w stan wgrywania.
Naprawdę - to, że w trakcie działania demka płytka jest widoczna też jako urządzenie/pamięć flash, nie znaczy, że uda się coś wgrać.
Należy trzymać oba boczne przyciski a potem wcisnąć RESET, następnie zwolnić RESET i dopiero po nim zwolnić boczne przyciski.
Wtedy przeciągamy pobrany (bądź skompilowany przez nas) wsad na urządzenie przenośne:
Po chwili płytka powinna uruchomić się sama. Oto demko LVGL w akcji:
Pod koniec zostanie wyświetlone menu, na którym można też przetestować ekran dotykowy:
Przełożenie kamery na przód
Po zakupie otrzymamy moduł otrzymany w ten sposób, że kamera "patrzy" się w tę samą stronę co wyświetlacz. W pewnym stopniu utrudnia to testowanie.
Kamerę można przełączyć na drugą stronę, gdyż jej tasiemka przechodzi przez szczelinę w PCB:
Najpierw trzeba odpiąć tasiemkę (po drugiej stronie złącza ją odpinamy):
Wypięta kamerka:
Kamerkę możemy wpiąć tak, że będzie po drugiej stronie modułu, ale nie możemy odwrócić tasiemki, piny pierwszy (oznaczony 1) tasiemki musi być zgodny z pinem 1 na złączu:
Demo przetwarzania obrazów
Kolejne demko, image_processing_demo, przedstawia możliwość przetwarzania obrazów. Samo przetwarzanie jest dość proste, za pomocą przycisków wybieramy jedną z predefiniowanych masek i tak możemy obserwować efekty:
Demo rozpoznawania znaków?
Teraz uruchomimy demo tinymaix_mnist_demo.
TinyMaix to mała biblioteka sieci neuronowej do wnioskowania, stworzona specjalnie dla mikrokontrolerów (TinyML), umożliwiająca uruchamianie lekkich modeli uczenia maszynowego na dowolnym mikrokomputerze jednoukładowym.
Z tym demkiem nie miałem zbyt wiele szczęścia. W teorii ma to rozpoznawać liczby, ale u mnie często utykało na 8 lub rozpoznawało źle. Mogę tu dla porównania pokazać zrzut ekranu z dokumentacji producenta:
U mnie z kolei było... ciężko, tylko idealne cyfry przy idealnym oświetleniu są rozpoznawane:
Przy moim piśmie z painta program myli 1 z 7 a przy 5 nie radzi sobie wcale:
Język skryptowy PikaScript
Wśród gotowych przykładów jest też demo PikaScript. PikaScript to wieloplatformowy, wydajny język skryptowy oparty o Python.
Po wgraniu demka PikaScript, możemy wysyłać ten skrypt na płytkę przez UART, linia po linii. Oto przykład:
arc = lv.arc(lv.scr_act())
arc.set_end_angle(200)
arc.set_size(150, 150)
arc.center()
Przenalizujmy działanie tego skryptu krok po kroku. Pierwsza linia tworzy łuk/suwak, oto efekt po wykonaniu:
arc = lv.arc(lv.scr_act())
Linia z set_end_angle ustawia pozycję gałki:
arc.set_end_angle(200)
Można zmienić wartość jej argumentu, wtedy efekt będzie inny:
arc.set_end_angle(380)
Z kolei funkcja center centruje obiekt na ekranie:
arc.center()
Spróbujmy zrobić nieco więcej. Może taki skrypt:
# Create a screen
scr = lv.scr_act()
# Create a label widget
label = lv.label(scr)
label.set_text("Hello, PicaScript!")
label.align(lv.ALIGN.CENTER, 0, 0)
Rezultat:
Można też utworzyć przycisk:
# Create a button widget
btn = lv.btn(scr)
btn.align(lv.ALIGN.CENTER, 0, -20)
label = lv.label(btn)
label.set_text("Click Me!")
Rezultat:
Próbowałem też w tym języku napisać obsługę zdarzenia click dla przycisku, ale jeszcze nie udało mi się tego uruchomić.
Kompilacja źródeł przykładów
Na głównej stronie dokumentacji płytki jest też instrukcja kompilowania źródeł przykładów oraz pełne linki do SDK. Udało mi się je skompilować na wirtualnej maszynie z Ubuntu, nie było żadnych problemów, w związku z tym tego nie opisuję.
Podjąłem też próbę skompilowania ich na WSL, czyli na "Linuxowym środowisku na Windowsa", ale jeszcze nie udało mi się tego uruchomić.
Podsumowanie
To był tylko pierwszy rzut oka na tę płytkę. Jak na razie mi się spodobała.
Wgrywanie programów jest łatwe, a wyświetlacz i kamera mają dla mnie zadowalające parametry. Nie odczułem też opóźnień w obrazie, a to też dobrze wróży pod kątem przyszłych projektów.
W kolejnym temacie spróbuję skompilować, potestować i omówić inne jej przykłady z SDK, może też uda się je nieco zmodyfikować, np. zrobić prosty zegarek na wyświetlaczu dotykowym.
Oprócz tego w planach jest uruchomienie przykładu streamowania obrazu z kamerki na PC (jest praktycznie gotowy w SDK) oraz eksperymenty z TinyML.
Tymczasem zapytam - czy macie jakieś doświadczenia z tą płytką, widzicie dla niej potencjalne zastosowanie? A może uważacie, że to zbędny gadżet i lepiej po prostu sięgnąć po Raspberry? Zapraszam do dyskusji.
Fajne? Ranking DIY Pomogłem? Kup mi kawę.
