Arduino – Nie tylko dla amatora

Arduino – Nie tylko dla amatora

9 sierpnia 2021 4 przez gielo

Z artykułu dowiesz się czym rzeczywiście jest arduino, jakie są wady i zalety tej platformy oraz, czy korzystanie z arduino komercyjnie ma sens.

Na wielu blogach oraz forach zdawało by się branżowych spotkać można wiele informacji o tym, że arduino to zabawka nie nadająca się do niczego poważnego, że nie warto się uczyć programowania w arduino i lepiej zacząć pisać od razu w C, a jedynie słusznym wyborem są programowane w nim czyste mikrokontrolery bez zbędnej elektroniki, czy tzw. bootloadera.

Jak to zwykle w życiu bywa, rzeczywistość często odbiega od tego jak widzą ją inni, często ludzie budują swoją opinię na podstawie opinii innych ludzi. W przypadku arduino ludzie ci, przeciwnicy tej platformy, zazwyczaj nie mieli z nią większej styczności. Takie są fakty.

Czym jest więc arduino?

Platformę arduino możemy podzielić na dwie główne części. Pierwsza część, to elektronika, czyli mikrokontroler, zewnętrzny kwarc, układ obsługujący USB i samo złącze USB oraz kilka rezystorów i kondensatorów, które spinają to w jeden działający układ. Piny mikrokontrolera (wejścia/wyjścia) zazwyczaj wyprowadzone są na zewnętrzną listwę goldpin, co w znaczny sposób ułatwia nam użycie tego urządzenia.

Druga część, to język programowania oparty na C++ i wykorzystujący AVR-C++ do kompilacji oprogramowania arduino. Z tego też powodu w niniejszym artykule będę używał zamiennie c++ i arduino jako języka programowania tej samej platformy. Tak naprawdę arduino to tylko biblioteka c++.

Co nam daje takie rozwiązanie?

Od strony elektronicznej daje nam to, że płytkę arduino możemy np. wykorzystać jedynie do stworzenia naszego projektu, co ułatwi nam pewne rzeczy, a w działającym już układzie do schematu przenieść sam mikrokontroler i te kilka elementów jak rezystory i kondensatory wymagane do poprawnej jego pracy i na podstawie takiego schematu wytrawić płytkę pcb. Sam mikrokontroler możemy także programować w tradycyjny sposób, wykorzystując do tego złącze ISP.

Od strony programistycznej natomiast arduino umożliwia szybsze pisanie kodu, lepszą jego organizację, większą kontrole nad kodem i łatwiejsze zapobieganie tzw. wyciekom pamięci, co jest częstą zmorą programistów piszących w C. Że jest to praktycznie C++ przeznaczony na mikrokontrolery, to nie jesteś ograniczony tylko do jednej platformy programistycznej, możesz do tego celu wykorzystać np. Atom, VisualStudio, Eclipse, czy edytor Qt, czyli to do czego jesteś przyzwyczajony, co najbardziej lubisz i co umożliwia tzw. podpowiadanie składni (Osobiście używam edytora Qt do pisania kodu i programowania arduino 🙂 ) dzięki czemu pisanie kodu staje się jeszcze szybsze i bardziej przyjemne.

Kolejną zaletą programowania w arduino jest to, że chcąc wykorzystać silniejszy mikrokontroler jak np. ARM Cortex, nie musisz się głowić jak go oprogramować w C i tracić czasu na naukę nowych rozwiązań, możesz wykorzystać do tego dokładnie tą samą bibliotekę arduino.h jak to robiłeś dotychczas i użyć do tego dokładnie tej samej składni i poleceń. Resztą zajmie się już kompilator, który przekształci twój kod, do kodu wynikowego odpowiedniego na twój mikrokontroler. Jedyne o czym musisz pamiętać, to o wyborze odpowiedniej płytki, na którą potem ma być skompilowany kod.

No dobrze, a jak sprawa ma się z wykorzystaniem arduino do jakichś bardziej zaawansownych zadań?

Jak już wspomniałem podstawą do programowania arduino jest język C++, pozwala on na tak zwane wstawki C bądź wstawki assemblerowe, więc gdyby się zdarzyło, że w jakiejś szczególnej sytuacji zmuszony byś został do użycia C lub assemblera, zawsze możesz to zrobić. Nie wiem jaka miała by być to sytuacja i po co miałbyś to robić ale istnieje taka możliwość.

Poznanie C++ na mikrokontrolery, w dość szybki sposób pozwoli Tobie także na to, abyś mógł zacząć pisać programy także na desktopy, smartfony, inne systemy wbudowane, a to za sprawą tak potężnego narzędzia jakim jest np. Qt.

Kilka faktów na korzyść C++ i arduino

  • W C++ i tym samym Arduino składnia jest bardziej zwięzła niż ta w C, co pozwala na pisanie kodu szybciej oszczędzając tym samym cenny czas.
  • C++ jest językiem obiektowym i pozwala przez to na lepszą organizacje kodu, co jest nie bez znaczenia gdy musisz nanieść jakieś poprawki lub wprowadzić jakąś dodatkową funkcjonalność do kodu po dłuższym czasie, szczególnie jeśli przejmujesz kod po kimś innym i nie ty jesteś jego autorem. Pozwala się to łatwiej i szybciej w nim rozeznać.
  • Obiektowość C++ (także inne jego właściwości) nie sprawia, że programy zajmują więcej miejsca po skompilowaniu, jak sądzą co poniektórzy (takie informacje często można spotkać na innych blogach i forach) , bo przy kompilacji kompilator pomija nadmiarowy kod, przy okazji go odpowiednio optymalizując. Obiektowość ma służyć jedynie tobie, ewentualnie innym osobom do lepszego rozeznania się w kodzie.
  • C++ nie wymusza na tobie pisania programów obiektowo, możesz to robić także strukturalnie, czy proceduralnie.
  • C++ posiada narzędzia, dzięki którym łatwiej uniknąć tzw. wyciekom pamięci. Szczególnie jego nowe wydania.
  • Samo arduino posiada od groma gotowych bibliotek do obsługi peryferyjnych urządzeń jak czujniki, rejestry, itd. Jeśli jednak czegoś nie znajdziesz to zawsze możesz wykorzystać bibliotekę napisaną z myślą nie o arduino, a czystych mikrokontrolerach.
  • Dostępność tzw. stringów. Jak człowiek szybko zapomina, że jeśli chcesz w C użyć jakiegoś wyrazu, zdania np. w celu wyświetlenia go na wyświetlaczu LCD, to musisz tworzyć tablice składające się z poszczególnych znaków tworzących cały wyraz lub zdanie.
  • C++/arduino jest łatwiejszy do nauki niż język C.

Oczywiście zalet jest dużo więcej, co jednak z argumentami, że pewne funkcjonalności C++ na mikrokontrolerach mogą powodować spadek wydajności? Jeśli wydajność jest w danym projekcie kluczowa i testy wykażą, że dana funkcja np. napisana w C wykona się jednak szybciej, to przecież zawsze możesz jej tam użyć. Osobiście nie miałem nigdy takich problemów, jednak w jakichś specyficznych warunkach może się to zdarzyć. Może się też zdarzyć oczywiście, że ta napisana w C++/Arduino będzie szybsza i wyższy poziom abstrakcji danego języka nie ma tu znaczenia. Najzwyczajniej sam kompilator C++ może w danej sytuacji generować lepszy kod, niż ten z C.

Podsumowując

Nic nie stoi na przeszkodzie, aby używać arduino nawet w bardzo zaawansowanych projektach. Jeśli wielkość płytki PCB danego projektu jest znacząca, zawsze możesz wykorzystać samą atmegę bez zbędnej elektroniki. Tam gdzie C++ będzie niewystarczający, użyć wstawek C lub Assemblera.

Czy są jakieś wady używania Arduino?

Ciężko mi jest znaleźć jakieś sensowne wady tej platformy. Nie znaczy to oczywiście, że takich nie posiada. Najczęściej jednak będą one wspólne z „tradycyjnym” programowaniem mikrokontrolerów w j. C, Assemblerze, Basicu z pominięciem biblioteki arduino. Może wam jednak udało się zauważyć jakieś sensowne wady arduino, które według was dyskwalifikują je jednak w zastosowaniach komercyjnych?