Jak użyć Raspberry Pi i Arduino razem?

Czas czytania: 3 min.

Platformy Arduino oraz Raspberry Pi to dwa niezwykle popularne na całym świecie ekosystemy dla elektroników. Są one stosowane zarówno przez amatorów oraz studentów, jak i przez profesjonalistów, którzy potrzebują szybkiej, wygodnej platformy umożliwiającej budowę prototypów, czy też sprawdzanie pewnych koncepcji układowych i/lub programowych.

Jak się okazuje, obie płytki mogą pracować… razem, w ramach tego samego projektu; co więcej – dobrze przemyślana koncepcja pozwala podzielić dany system na funkcjonalności wysokopoziomowe, obsługiwane przez Raspberry Pi oraz niskopoziomowe, odpowiedzialne za sterowanie z urządzeniami wykonawczymi i odczytywanie danych z czujników, za co odpowiada Arduino. W tym artykule przyjrzymy się dokładniej tego typu rozwiązaniom.

 

Master-slave, czyli projekt hierarchiczny z Arduino i Raspberry Pi

Podstawową kwestią do rozważenia jest konfiguracja, w jakiej mają pracować obie płytki. Najczęściej spotykanym rozwiązaniem okazuje się wersja hierarchiczna, często określana jako master-slave. Urządzenie master, czyli nadrzędne, odpowiada za generowanie komend nakazujących urządzeniu podrzędnemu, czyli slave, wykonanie pewnych operacji. Może to być zarówno odczyt danych z wejścia analogowego, wykonanie prostej komunikacji z czujnikiem za pomocą SPI, I2C lub dowolnego innego protokołu, jak też wysterowanie danego elementu, np. włączenie przekaźnika czy ustawienie prędkości i kierunku obrotów silnika. W systemach master-slave ważne jest dokładne przemyślenie, który element (płytka) lepiej nadaje się do realizacji danego typu zadań.

Arduino Starter Kit Botland
Arduino StarterKit - zestawy startowe

Raspberry Pi, jako komputer jednopłytkowy o dość dużej mocy obliczeniowej, jest w stanie poradzić sobie z obsługą nawet zaawansowanej grafiki, nagrywaniem i odtwarzaniem wysokiej jakości dźwięku, czy też przechwytywaniem obrazu z kamery w czasie rzeczywistym. Niezbyt dobrze nadaje się natomiast do realizacji szybkich operacji, które wymagają tzw. wysokiej dostępności, czyli pracy w reżimie czasu rzeczywistego. Za przykład może posłużyć nam pozycjonowanie silników napędzających robotyczne ramię: trudno pozwolić sobie na to, by sterownik takiego ramienia w czasie wykonywania jakichś manipulacji musiał czekać, aż system wykona inne operacje i dopiero wtedy odczyta dane enkodera czy też wyłączników krańcowych. Dlatego też do niskopoziomowych operacji najlepiej nadaje się płytka Arduino, która potrafi realizować podobne zadania bardzo szybko, bez zbędnych opóźnień, tak typowych dla systemów operacyjnych wyższego poziomu.

Zestawy Raspberry Pi 4

Technikalia, czyli jak połączyć Arduino z Raspberry Pi

Najlepszą metodą na połączenie Arduino z minikomputerem Raspberry Pi jest użycie łącza szeregowego UART. Umożliwia ono wykorzystanie komunikacji w trybie portu szeregowego, obsługiwanego w prosty sposób przez natywne sterowniki obydwu platform. Od strony sprzętowej możliwe jest wykorzystanie znajdujących się już w systemie operacyjnym Raspberry Pi sterowników wirtualnego portu szeregowego, które komunikują się z urządzeniem podłączonym za pośrednictwem jednego z portów USB. Natomiast płytka Arduino obsługuje wbudowany konwerter UART ↔ USB jako… zwykłe łącze asynchroniczne. Takie podejście zapewnia bardzo efektywne wykorzystanie portów GPIO zarówno jednej, jak i drugiej płytki, ponieważ nie wymaga angażowania żadnych dodatkowych portów Raspberry – w efekcie zatem cały 40-pinowy goldpin pozostaje wolny do innych celów. Natomiast w Arduino używane są jedynie 2 linie, które i tak fizycznie łączą się z konwerterem portu USB.

Oprogramowanie transmisji Raspberry Pi ↔ Arduino

Mamy już wykonane fizyczne połączenia pomiędzy dwiema płytkami, doprowadziliśmy również zasilanie (o ile jest to konieczne, gdyż Arduino może być zasilane z portu USB Raspberry Pi, oczywiście po upewnieniu się, że takie połączenie wraz z pozostałymi urządzeniami podłączonymi do minikomputera nie przekroczy dopuszczalnego obciążenia pojedynczego portu RPi). Ostatnią ważną kwestią pozostaje zatem oprogramowanie układu – do wyboru mamy dwie ścieżki. Pierwsza z nich to wykorzystanie gotowej biblioteki, która znacząco zmniejszy ilość nakładów programistycznych – ścieżka druga to natomiast zaimplementowanie własnego protokołu, zawierającego zarówno wzorce komend przesyłanych od Raspberry Pi do Arduino, jak i zwracanych przez Arduino wartości bądź potwierdzeń odbioru.

Arduino UNO
Platforma programistyczna Arduino
Komputer Raspberry Pi

Warto zastanowić się nad wykorzystaniem pierwszej drogi, ponieważ specjalnie do tego celu stworzona została biblioteka Firmata, zaimplementowana domyślnie w środowisku Arduino IDE. Można znaleźć ją w przykładach programistycznych, rozwijając menu Plik → Przykłady → Firmata i wybierając jeden z przedstawionych tam szkiców, np. StandardFirmata. Dodatkowo, do obsługi protokołu (dedykowanego właśnie do łączenia urządzeń bazujących na mikrokontrolerach z oprogramowaniem instalowanym na komputerze) otrzymujemy bibliotekę dla języka Python, nazwaną pyFirmata. To kolejne rozwiązanie przeznaczone do zastosowania „na gotowo”, czyli bez konieczności implementacji protokołu po stronie minikomputera.

Jak oceniasz ten wpis blogowy?

Kliknij gwiazdkę, aby go ocenić!

Średnia ocena: 4.8 / 5. Liczba głosów: 6

Jak dotąd brak głosów! Bądź pierwszą osobą, która oceni ten wpis.

Podziel się:

Picture of Grzegorz Galuba

Grzegorz Galuba

GG nie ma czasu na gadu-gadu - jest zawsze na bieżąco z nowościami z oferty, wybiera tylko najlepsze i dba, aby pojawiały się na czas. Jego rozległa wiedza o specyfikacjach technicznych produktów to nieocenione wsparcie dla całej ekipy. Do pracy przyjeżdża rowerem i już najwyższa pora, aby wszyscy zaczęli brać z niego przykład. Oaza spokoju.

Zobacz więcej:

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Ze względów bezpieczeństwa wymagane jest korzystanie z usługi Google reCAPTCHA, która podlega Polityce Prywatności oraz Warunkom użytkowania.