Przejdź do głównej zawartości

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 normalnym C++11, z pewnymi ograniczeniami wynikającymi z właściwości platformy (np. wykonywanie zadań w głównej pętli nie może zająć razem więcej niż 2 sekundy, itp.). Jako ramówkę do budowania polecam PlatformIO, niekoniecznie z IDE (bazuje na edytorze Atom i nie jest jakoś szczególnie stabilne).

Sming

Link: Github

Alternatywny framework, wciąż jednak wykorzystujący sporo kodu z Wiring. W dużej mierze ułatwia to korzystanie z bibliotek dla ESP8266/Arduino, jednak często wymagają one delikatnego tuningu - przede wszystkim dlatego, że oczekują ustawionych innych zmiennych środowiskowych które załatwia Arduino core, ale również dlatego, że część z nich jest przystosowana do działania w pętli, a Sming jest ramówką asynchroniczną, opartą na zdarzeniach i callbackach. W tym ostatnim przypadku kod który ma być wykonywany w pętli trzeba wykonywać okresowo przy użyciu timera. Aktywnie rozwijany, jest wokół niego jakieś community, chociaż nie jest szeroko rozpowszechniony i niektóre rozwiązania są... dyskusyjne, co najmniej. Ale jest na dobrej drodze.

ESP OpenRTOS

Link: Github

Bazujący na FreeRTOS framework do programowania ESP8266, więc kod pisze się w C99 (-std=gnu99). Kod charakterystyczny dla platformy bazuje na dość starym kodzie ESP RTOS SDK, ponieważ dla twórców ważne było by był on zgodny z licencją BSD. Wymaga więcej zachodu niż wcześniejsze opcje, nie jest również tak aktywnie rozwijany, ma wciąż sporo błędów i nie wszystko działa. Bezapelacyjnym minusem jest mała liczba dostępnych bibliotek, co w połączeniu z minimalnym community może sprawiać problemy gdy coś nie działa.

ESP (RTOS|NONOS) SDK

Link: strona producenta lub alternatywne SDK

Programowanie w SDK dostarczonym przez producenta, dostępna jest zarówno wersja klasyczna ("nonos") i bazująca na FreeRTOS ("RTOS"). Tutaj już wszystko jest tak "blisko żelaza", że już bliżej nie można. Dokumentacja SDK jest coraz lepsza, jest wiele "kickstartów" i szkieletów projektów.

Komentarze

Popularne posty z tego bloga

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…