Programowanie mikrokontrolerów i innego sprzętu
Grzegorz Papaj , 14 sierpnia 2019
Jest pewna grupa projektów, którymi bardzo lubimy się zajmować. Każdy nowy temat tego rodzaju rozpala nadzieje naszych programistów, którzy ustawiają się w kolejce, aby się nim zająć. Albo chociaż dowiedzieć, co będzie przedmiotem prac. Chodzi mianowicie o wszelkie projekty związane z oprogramowaniem sprzętu.
Oprogramowywanie sprzętu bądź też tworzenie systemów komunikujących się bezpośrednio ze sprzętem to bardzo szerokie zagadnienie. Podczas gdy większość ludzi zajmujących się współcześnie informatyką (i szerzej technologią) dobrze zna hasło IoT (internet of things), to już oprogramowanie mikrokontrolerów jest tematem mniej znanym. Być może wynika to ze współczesnej specjalizacji w innych obszarach (obecnie na topie są głównie rozwiązania webowe i aplikacje mobilne), a być może z przeświadczenia, że jest to obszar nieciekawy, trudny lub niemodny. Ale naszym zdaniem jest dokładnie odwrotnie i wszelkim tematom "blisko metalu" warto poświęcać uwagę!
Poza wspomnianym IoT i wszelkiej maści mikrokontrolerami oprogramowywanie urządzeń mechanicznych i elektronicznych obejmuje szeroki zakres zastosowań. To także szeroko pojęta automatyka przemysłowa, systemy wbudowane, różne rozwiązania robotyczne czy systemy rozproszone. Zdarzało się nam w projektach pracować zarówno z użyciem szeroko stosowanych standardów (jak protokół MQTT) czy też rozwiązań mocno specjalistycznych (jak stosowany w oświetleniu standard DALI).
Rynek w tym obszarze ma swoją dynamikę i wyraźne trendy. Choć mikrokontrolery 8-bitowe nadal mają zastosowanie (jak choćby bardzo popularny C8051 z Silicon Laboratories), to prym wiodą 32-bitowe układy ARM (choć dostrzega się także rosnącą popularność 64-bitowych), w szczególności rodzina STM32. Tuż za nią plasują się rodziny Atmel AVR, NXP LPC i MSP430 z Texas Instruments.
Spadające ceny sprzętu pozwalają na tworzenie ciekawych rozwiązań, które już niekoniecznie muszą bazować na programowaniu w asemblerach, czy nawet w C/C++. Sytuacja wyraźnie się zmienia na korzyść bardziej przyjaznych programiście, "wysokopoziomowych" języków, takich jak Python (MicroPython, CircuitPython) czy nawet JavaScript (Espruino). Da się również zauważyć, że rozwiązania z założenia edukacyjne, jak choćby Arduino czy Raspberry Pi coraz śmielej wchodzą również na rynek komercyjny. Wszystko to sprawia, że praca z systemami wbudowanymi staja się coraz łatwiejsza dla przeciętnego programisty.
Z drugiej strony jednak oprogramowywanie sprzętu wymaga dość specyficznego zestawu umiejętności, a samo wejście w niektóre technologie wiąże się z koniecznością studiowania rozmaitych dokumentów, schematów, standardów i protokołów. Jak łatwo zrozumieć, nie jest to zadanie dla każdego. My jednak uważamy, że w całej tej złożoności kryje się urok, któremu nie możemy się oprzeć, a nasi programiści zawsze się cieszą, kiedy mogą działać ze sprzętem. To jedna z nielicznych sytuacji, kiedy ich praca bezpośrednio przekłada się nie tylko na wirtualną rzeczywistość, lecz oddziałuje również w sferze fizycznej. Do tego mamy świetne zespoły, działające w technologiach webowych i aplikacjach mobilnych, dzięki czemu możemy łatwo realizować również projekty, w których sprzęt komunikuje się z aplikacjami webowymi czy mobilnymi.
Chyba właśnie dlatego, że lubimy takie tematy, a do tego nie boimy się trudnych projektów, projekty "okołosprzętowe" same do nas trafiają. Choć niewykluczone, że to również zasługa poleceń. 😉