STM32Duino: Arduino dla STM32 (cz.1)
Arduino to prawdopodobnie najpopularniejsza platforma projektowa dla systemów wbudowanych, kojarzona zazwyczaj z rodziną mikrokontrolerów AVR. Nie wszyscy jednak wiedzą, że Arduino można wykorzystać również do pracy z mikrokontrolerami STM32. Zapraszamy do lektury pierwszego artykułu z krótkiego cyklu o STM32duino!
Kurs STM32Duino został podzielony na następujące części:
- STM32Duino: Arduino dla STM32 (cz. 1) – wstęp, opis platform Arduino i STM32 (właśnie czytasz ten artykuł)
- STM32Duino: Arduino dla STM32 (cz. 2) – porty wejścia/wyjścia
- STM32Duino: Arduino dla STM32 (cz. 3) – interfejs szeregowy UART
- STM32Duino: Arduino dla STM32 (cz. 4) – przetwornik A/C
- STM32Duino: Arduino dla STM32 (cz. 5) – timery, PWM
- STM32Duino: Arduino dla STM32 (cz. 6) – przykłady aplikacji na zestawie STM32L4 Discovery kit IoT node
Arduino – początek
Arduino swój początek ma w roku 2003 we Włoszech. Student Hernando Barragán z placówki akademickiej Interaction Design Institute Ivrea, w ramach pracy dyplomowej podjął się stworzenia nowego środowiska programistycznego dla mikrokontrolerów. Rozwiązanie to otrzymało nazwę Wiring i w formie IDE oraz biblioteki z funkcjami pozwalało na tworzenie aplikacji dla układu ATmega168. Po ukończeniu tego projektu inni studenci tej samej uczelni (Massimo Banzi oraz David Mellis) rozbudowali Wiring o obsługę mikrokontrolerów ATmega8. Po tej modyfikacji nazwa Wiring została zastąpiona przez Arduino.
Pierwsza, nieoficjalne jeszcze edycja Arduino ujrzała światło dzienne w roku 2005. Wraz z upływem czasu środowisko programistyczne było uzupełniane o płytki uruchomieniowe. Dzięki temu Arduino stało się kompletną platformą dla systemów wbudowanych składającą się zarówno z warstwy programowej, jak też sprzętowej. W takiej postaci Arduino zaczęło błyskawicznie zyskiwać ogólnoświatową popularność.
Ciekawa historia związana jest z nazwą, jaką ostatecznie przyjęła stworzona przez Włochów platforma projektowa. Słowo Arduino jest nazwą baru, który był miejscem spotkań studentów. Z kolei nazwa baru pochodzi od lokalnego szlachcica z okresu średniowiecza o imieniu Arduin, który piastował funkcję margrabiego Ivrei oraz był królem Włoch w latach 1002 – 1014.
Idea Arduino, czyli dla kogo jest to środowisko?
Po zapoznaniu się z rysem historycznym Arduino nasuwa się pytanie: dlaczego studenci zdecydowali się stworzyć i rozwijać nową platformę dla mikrokontrolerów? Aby zrozumieć ich motywację warto odbyć wirtualną podróż w czasie do roku 2003 i postawić się na chwilę w roli osoby chcącej na własną rękę rozpocząć przygodę z mikrokontrolerami. Okazuje się, że nie było to takie proste.
Otóż w warstwie sprzętowej dostępne były najczęsciej głównie drogie płyty ewaluacyjne z mikrokontrolerami oraz tak samo drogie programatory/debugery. Alternatywą było samodzielne wykonanie płytki oraz programatora, co z kolei wymagało odpowiednich umiejętności. Problem stanowić mogła również warstwa programowa. Środowisko programistyczne mogło być wprawdzie dostępne bezpłatnie, niemniej jednak do pisania kodu w oparciu o dominującą wtedy metodę modyfikacji rejestrów niezbędna była dogłębna wiedza o mikrokontrolerze, a samo pisanie kodu operującego na rejestrach wymagało pewnego doświadczenia w programowaniu w języku C lub Assembler.
Podsumowując – środki finansowe na zakup sprzętu, umiejętność lutowania, wiedza o architekturze układu, znajomość języka programowania w stopniu pozwalającym na pisanie kodu niskopoziomowego. Wszystkie te wymagania stanowiły nie lada wyzwanie i potrafiły przestraszyć lub nawet zniechęcić początkującą osobę. Włoscy studenci postawili sobie za cel stworzenie rozwiązania pozbawionego wymienionych niedogodności i tym samym maksymalnie przyjaznego niedoświadczonemu użytkownikowi.
Jakie są zatem główne zalety Arduino?
1. Niska cena – środowisko programistyczne Arduino jest bezpłatne, płytki z mikrokontrolerem są przystępne cenowo: koszt zazwyczaj na poziomie kilkunastu – kilkudziesięciu dolarów.
2. Prostota użycia – pisanie kodu zostało maksymalnie uproszczone przez zastąpienie skomplikowanej metody niskopoziomowej (modyfikacji rejestrów) prostym w zrozumieniu i użyciu językiem Arduino posługującym się elementami języka C np. funkcjami, pętlami i instrukcjami warunkowymi.
3. Elastyczność – język Arduino umożliwia tworzenie aplikacji o różnym stopniu skomplikowania (od bardzo prostych po zaawansowane).
4. Open source – kod oprogramowania Arduino jest otwarty i tworzy go społeczność internetowa.
5. Unifikacja warstwy sprzętowej – płytki Arduino dysponują zestawem listew rozszerzeniowych zgodnym ze zdefiniowanym standardem.
6. Wieloplatformowość – środowisko programistyczne Arduino jest dostępne dla trzech różnych systemów operacyjnych: Windows, Macintosh OSX i Linux.
Cechy te sprawiły, że Arduino zostało entuzjastycznie przyjęte przez osoby rozpoczynające przygodę z mikrokontrolerami. Rozwiązanie to chętnie wykorzystywane jest przez studentów kierunków związanych z elektroniką i informatyką np. do realizacji projektów akademickich takich jak nieskomplikowane roboty. Po Arduino chętnie sięga również młodzież szkolna, dla której platforma stworzona przez Włochów pozwala w łatwy sposób wkroczyć w świat elektroniki.
W końcu Arduino jest też atrakcyjne dla osób nieaspirujących do roli elektronika, a więc wszelkiej maści hobbystów i nieprofesjonalistów. Za przykład posłużyć tu mogą artyści, którzy za pomocą Arduino są w stanie dodać elementy sterowania i prezentacji do swoich instalacji artystycznych np. tworząc motywy świetlne z użyciem diod LED.
Struktura Arduino
Chcąc lepiej poznać i zrozumieć czym jest Arduino warto przejść od ogólników do szczegółów. Platformę podzielić można na trzy obszary: warstwę sprzętową, warstwę programową oraz społeczność. Odpowiedni schemat blokowy pokazano na rysunku 1. Przyjrzyjmy się bliżej każdemu z tych obszarów.
Rys. 1. Schemat blokowy platformy Arduino
Warstwa sprzętowa Arduino
Podstawę warstwy sprzętowej tworzą płytki uruchomieniowe z mikrokontrolerami. Historycznie pierwszymi układami wspieranymi przez Arduino były 8-bitowe mikrokontrolery AVR. Współpraca twórców Arduino z firmą Atmel (obecnie Microchip) będącą producentem układów AVR zaowocowała stworzeniem na przestrzeni lat grupy płytek z układami ATmega należącymi do rodziny AVR:
• zestaw ARDUINO UNO z mikrokontrolerem ATmega328P
• zestawy ARDUINO LEONARDO oraz ARDUINO MICRO, obie z mikrokontrolerem ATmega32u4
• moduły ARDUINO NANO oraz ARDUINO ETHERNET, obie z mikrokontrolerem ATmega328
• ARDUINO MEGA z mikrokontrolerem ATmega2560
Idąc z duchem czasu w roku 2012 Arduino wprowadziło do użytku pierwszą płytkę uruchomieniową z 32-bitowym mikrokontrolerem opartym na rdzeniu ARM Cortex-M. Obecnie grupa płytek z Cortexowymi układami Atmela liczy 3 sztuki:
• zestaw ARDUINO DUE z mikrokontrolerem AT91SAM3X8E (Cortex-M3)
• zestawy ARDUINO M0 PRO oraz ARDUINO MKR ZERO, obie z mikrokontrolerem ATSAMD21G18 (Cortex-M0+)