Programowanie ESP8266 w C/C++
Opublikowano: 08.05.2017
Ostatnia modyfikacja: 10.01.2025
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.