Dla kogo jest MicroPython?
Kiedyś za jedyny słuszny język do programowania mikrokontrolerów był uważany asembler. Dawał pełny dostęp do każdego rejestru procesora i wprawny programista potrafił stworzyć bardzo efektywny program, ale praca w tym języku była czasochłonna i wymagała specjalistycznej wiedzy.
Problemy te w pewnym stopniu rozwiązywały języki wyższego poziomu, takie jak C i C++, które pozwalały uwolnić się od mozolnego ustawiania bitów w rejestrach. Dawniej zarzucano im, że kod generowany przez kompilatory nie jest tak efektywny, jak kod napisany w asemblerze. Jest w tym trochę prawdy, lecz słabszą optymalizację kompensował zdecydowanie krótszy czas tworzenia programu, a... czas to pieniądz. W przypadku czasu pracy programisty embedded całkiem spory pieniądz.
MicroPython jest językiem jeszcze wyższego poziomu niż C++. Kod w Pythonie nie kompiluje się do instrukcji maszynowych, wykonywanych bezpośrednio przez procesor. W zamian Python korzysta z interpretera, który analizuje kod programu bezpośrednio przed wykonaniem i przetwarza instrukcje na kod wykonywany przez maszynę wirtualną. W tym momencie warto dodać, że interpreter Pythona napisany jest w C.
Jaki to ma sens? Takie podejście pozwoliło jeszcze bardziej oddzielić kod od sprzętu, dzięki czemu ten sam kod powinien działać na ESP32, Raspberry Pico, STM32 i wielu innych mikrokontrolerach obsługujących MicroPythona. Ponadto instrukcje Pythona są bardzo przyjazne i czytelne, dzięki czemu można się go nauczyć niezwykle szybko.
Bardzo często korzystam z MicroPythona w pracy, aby szybko zrobić jakiś prototyp. Przydaje mi się także do tego, by szybko przetestować czujniki, wyświetlacze czy inne elementy. Dużo łatwiej i szybciej jest napisać kod w Pythonie niż w C lub C++.
Jednak MicroPython ma także pewne wady, które moim zdaniem wykluczają jego zastosowanie w produktach komercyjnych. Niestety nie jest on wolny od błędów i czasami zdarza się, że program zawiesi się bez żadnego widocznego powodu.
Tendencja ta jest tym bardziej widoczna, im więcej mamy równolegle działających tasków. Innym problemem jest to, że nie ma sposobu, aby skutecznie zabezpieczyć kod programu przed kradzieżą. Istnieje bowiem możliwość, aby podłączyć programator i ściągnąć pliki z kodem w Pythonie. Widać także wyraźną różnicę w szybkości działania programu pomiędzy C i MicroPythonem – pod tym względem C jest wielokrotnie szybszy. Ponadto kod w C jest także lepiej zoptymalizowany pod względem zapotrzebowania na pamięć ROM.
MicroPython, podobnie jak C i C++, ma swoje wady i zalety. Mimo to uważam, że warto poznać ten język. Jest to coś, czego w świecie mikrokontrolerów jeszcze nie było.
Celem kursu jest zaznajomienie czytelnika z możliwościami środowiska MicroPython na przykładzie mikrokontrolerów ESP32, poprzez teoretyczny opis różnych funkcji i klas oraz ich zastosowanie w praktycznych przykładach. Główny nacisk będzie położony na użycie peryferiów sprzętowych, takich jak piny, timery, przerwania, a w szczególności kurs będzie omawiał peryferia typowe dla ESP32, czyli Wi-Fi, ESP-NOW i Bluetooth.
Zakładam, że Czytelnik zna język Python w zakresie podstawowym. Z tego powodu kody używane w kursie mają być proste do zrozumienia i nie będą wymagać znajomości zaawansowanych możliwości tego języka. Jeżeli wiesz, jak działa instrukcja if, for oraz jak napisać funkcję czy klasę, to ta wiedza wystarczy do zrozumienia wszystkich kodów z niniejszego kursu. Jeżeli tak nie jest, to polecam zapoznanie się z jakimś kursem „normalnego” Pythona na zwykły komputer – takich tutoriali jest w Internecie bardzo dużo.
Lista zakupów
Podczas kursu nie będziemy używać żadnej rozbudowanej płytki testowej. Zamiast niej skorzystamy z niedrogiego i popularnego devkitu z modułem ESP32-S3 firmy Espressif. Za pomocą płytki stykowej i kabelków będziemy podłączać różne peryferia omawiane w kursie, takie jak diody LED, zegar RTC, pamięć EEPROM oraz wyświetlacze OLED i TFT. Jestem przekonany, że większość Czytelników już ma pod ręką płytki stykowe i drobne elementy. Jeżeli nie – to jest to odpowiedni moment, aby zamówić te elementy, by zdążyły przyjechać przed publikacją kolejnych odcinków. Poniżej znajduje się lista wyposażenia, z którego będziemy korzystać w 12 odcinkach niniejszego kursu.
- Płytka ESP32-S3-DevKitC-1-N8R8
- Płytka z zegarem RTC DS1307 i pamięcią EEPROM 24C32
- Wyświetlacz TFT 480×320 z kontrolerem ST7796 (SPI) i pojemnościowym panelem dotykowym z kontrolerem FT6336 (I²C)
- Wyświetlacz OLED 128×64 z kontrolerem SSD1309 (I²C) – w sprzedaży dostępne są wyświetlacze w kolorach: białym, żółtym, zielonym i niebieskim, a każdy może mieć interfejs I²C lub SPI. Płytki z I²C mają pewną wadę objawiającą się piszczeniem przetwornicy. Lepiej kupić wyświetlacz z SPI (bo nie piszczy), a następnie przerobić go na I²C, lutując dwie zworki. W razie potrzeby można przywrócić interfejs SPI.
- Karta MicroSD i przejściówka SD, do której można przylutować goldpiny lub dowolna inna płytka umożliwiająca podłączenie karty MicroSD
- Płytka stykowa 830 pól
- Kabelki do płytki stykowej
- Kilka diod LED przewlekanych: czerwona, żółta, zielona, niebieska
- Rezystory przewlekane do diod LED (np. 100 Ω, 220 Ω, 470 Ω).