Przejdź do głównej zawartości

Donkiszotyzm to moje drugie imię

Jakiś czas temu wpadłem na szatański pomysł, by kupić sobie OrangePi PC i kombinować z tym SBC. Szybko okazało się to straceńczą eskapadą, ale po dłuższym czasie udało mi się znaleźć sensowne wykorzystanie tego czegoś i nie jest przyciskiem do papieru. Jak się okazuje, niczego się nie nauczyłem.

Minęło kilka miesięcy, rozwinąłem trochę moje umiejętności oprogramowywania mikrokontrolerów i niestety przy jednej większej robótce natrafiłem na ścianę - popularne Arduino UNO przestało wystarczać zasobowo, ESP8266 również miało trochę czegoś tam za mało w każdej swej edycji, musiałem się rozejrzeć za MCU który uciągnie ethernet i komunikację po HTTP, rozparsowanie jakiegoś formatu serializacji danych (najchętniej JSON), wyświetlacz znakowy 20x4 z menu roboczym i obsługę inputu z keypada i/lub joysticka. Teoretycznie mogłoby być Arduino MEGA, ale ta cena, $10 za jedną płytkę, która dodatkowo jest taka wielka, jakby miała napędzać komputer ENIAC. Niezawodny chiński portal natychmiast udzielił mi odpowiedzi: płytka z STM32F103C8T6! Patrzę na specyfikację: ARM Cortex-M3 72MHz, 20KB RAM, 64KB FLASH, dobra nasza, a jak cena wynosi $2 za sztukę, to grzech nie brać, furda tam że trzeba sobie samemu piny polutować. I zacząłem się rozglądać jak to oprogramować.

Szczęśliwy traf czy wtopa na całego?

STM Cube F1 odpadło od razu, nie jestem masochistą. Jak również ChibiOS (do tego może dojdę później). Jest niby jakaś platforma hardware do Arduino, ale nie wspierana oficjalnie i nawet w menedżerze płytek jej nie ma. No i jest framework, w założeniu podobny do Arduino, podobnie jak i ten dający pewną warstwę abstrakcji od żywego żelaza, tylko dla ARM, nazywa się mbed i jest oficjalnie wspierany przez wielkie tuzy typu ST Microelectronics, Texas Instruments czy Atmel. Czy ja śnię? Enter the hell of mbed (classic).

Zacznijmy od tego, że mbed oficjalnie nie wspiera tej płytki (gwoli ścisłości - żadnej płytki z tym MCU), ponieważ polityką wydawcy jest "oficjalne wsparcie dla oficjalnych płytek", a jak można się domyślić żadna szopa w Shenzen nie dostąpiła zaszczytu nominowania na "oficjalnego dostawcę". Trzeba będzie kombinować ze zbliżonymi płytkami.

Do prostego znakowego wyświetlacza LCD 8 bibliotek, ale po bliższym przyjrzeniu się 6 z nich to forki jednej lub forki innego forka tej jednej. Po jeszcze dokładniejszych poszukiwaniach znalazłem kolejne kilkadziesiąt forków (czyżby po jednym dla każdej wspieranej płytki?), ale czym się różnią to się nie dowiem, chyba że sklonuję każde repo i sobie zrobię ręcznego diffa. Ostatnia aktywność rok temu lub dawniej, żadnych pull requestów, w większości przypadków nawet nie ma jak zgłosić issue czy zadać autorowi pytania, taki GitHub dla wyjątkowo ubogich. I potem trzeba to powtarzać z każdą rzeczą: moduły ethernet WizNet5100 lub ENC28J60, biblioteka do MQTT, czy parser JSON. A wsparcie "wielkich" kończy się na ich płytkach, inaczej mówiąc "za $2 to se radź sam, nasze płytki za $50 są wspierane że hej". W kategoriach social development ten projekt można traktować jako almost dead, chociaż pewnie partnerzy ARM nie pozwolą mu tak szybko umrzeć, bo coś z tego mają, a tymczasem wiele funkcji serwisu developerskiego zwyczajnie kończy się 404. W każdym razie - spory niesmak. Zadałem pytanie dotyczące kompilacji jednej z bibliotek na (teoretycznie) wspieranej płytce, po 2 dniach pytanie ma status awaiting moderator approval, a próba jego edycji pokazuje ładne, ale zupełnie nieprzydatne 404.

Ładne, ino co z tego wynika?

Skądinąd trochę dziwnie to wygląda: jest tani i dobry hardware, jest software które ma duży potencjał, a ruchu społecznego, który mógłby pchnąć ten wózek nie ma. Na tym sprzęcie można zrobić wszystko to, co na zapyziałym UNO, a nawet znacząco więcej, bo zasoby pozwalają. Framework mbed ma znacznie większy potencjał edukacyjny niż Arduino, bo nie abstrahuje tak bardzo od C/C++ i jakkolwiek wymaga nieco większego wysiłku na początku, to potem nie pozostawia "dziury w wiedzy" do zasypania. Dostępność hardware jest co najmniej bardzo dobra, a cena za sztukę MCU na popularnym chińskim portalu od $1.95 free shipping to mniej niż najtańszy klon UNO R3 ($2.50 w stanie równie gołym jak STM32). Gdzie jest to community, które tak skrzętnie wykorzystało ukryte moce ESP8266?

Ale nie dam się. Za $2? Nie ma mowy. Musi działać. I będzie działało.

Komentarze

Popularne posty z tego bloga

Programowanie ESP8266 w C/C++

ESP8266 powoli ustępuje miejsca swojemu następcy ESP32, ale jest to proces wyjątkowo powolny. Może to ceny tak samych chipów jak i płytek developerskich to powodują (niewiele jest gotowych modułów w cenie poniżej $10 z przesyłką), a może rozbudowany ekosystem bibliotek do ESP8266. W każdym razie ze starszym bratem ESP32 jeszcze długo będziemy mieć do czynienia, zwłaszcza że jest to wciąż jedna z najlepszych opcji jeżeli chodzi o mikrokontrolery.

ESP8266 można programować w Lua lub w Pythonie, jednak najlepszym wyjściem jest zaprogramowanie własnego firmware w C++ lub w C - daje to największą kontrolę i zapewnia najlepszą wydajność. Jakie mamy do tego możliwości? Od najłatwiejszej do najbardziej skomplikowanej.
ESP8266 core dla Arduino Link: Github

To jest najprostsze rozwiązanie, implementacja ramówki Wiring dla ESP8266. Jakkolwiek można tę obsługę zainstalować w Arduino IDE, to nie ma to większego sensu, bo nie da się tego edytora używać do niczego poważniejszego. Pisze się to w nor…

RetroPie, bo mi się dziecko alienowało

Dziecko moje najdroższe alienowało mi się siedząc przed komputerem w swoim pokoju. Nie żebym jej zabraniał, ale skoro ma grać, to niech gra przy nas, w salonie. Przynajmniej będziemy wiedzieli w co gra.

Wymagane hardware:

Raspberry Pi 2 Mod. B,karta SD min. 8GB,gamepad na USB,telewizor
Opcjonalne w zależności od konfiguracji:

karta WiFi na USBklawiatura na USBpendrive czy inny storage na USB Jak już to wszystko mamy, to możemy robić. Zajmie to parę godzin wszystkiego.
RetroPie Obraz RetroPie pobieramy ze strony projektu, to będzie ten którego nazwa kończy się na rpi2.img.gz. Następnie obraz ten trzeba rozpakować i nagrać w standardowy sposób na kartę SD. Wkładamy kartę do RPi, podłączamy pada do USB, bootujemy naszą zabawkę i zaczynamy konfigurowanko jak zwykle z RPi (z podłączonego klawikordu i na telewizorze, albo po ludzku, po zalogowaniu przez SSH), czyli najpierw używając skryptu raspi-config rozciągamy system plików na całą kartę, reboot, pełna aktualizacja systemu, być może reboo…

RetroPie, ROM-y z USB

Po wrzuceniu kilku ROM-ów na PSX okazało się, że karta SD z której bootuje się system jest za mała na to, żeby je tam trzymać. Inne opcje jakie przyszły mi do głowy to trzymać je na pendrive albo zamontować katalog z NAS po Sambie. W pomieszczeniu gdzie stoi telewizor WiFi działa co najwyżej jako-tako (nikt nie pomyślał o kablaturze podczas budowy...), więc na początek pójdzie 8GB pendrive. Powinno wystarczyć na parę dni.
Albo rybka, albo pipka RetroPie ma bardzo fajny ficzer automatycznego transferu ROM-ów po podłączeniu storage do USB. Jakkolwiek bardzo miłe i user friendly, to zupełnie nie będzie przydatne w momencie, gdy będziemy tam trzymać ROM-y. W końcu jak będziemy chcieli sobie coś tam wgrać, to i tak trzeba będzie wyjąć pendrive i włożyć go ponownie. Zaczynamy więc od wyłączenia tego wodotrysku, odpalamy retropie_setup.sh i na ekranie głównym wybieramy "Setup / configuration", a następnie "USB ROM Service":
i dalej "Disable USB ROM Service": Wyd…