Ostatnio opisywałem mały router Edimaksa. Nie bez powodu. Zamierzam podłączyć Arduino do Internetu. Właściwie głównie do sieci lokalnej, ale z możliwością bezpośrednich zapytań „w świat”. Jak to zrobić? Przez Ethernet Shield – rozszerzenie nakładane na Arduino (kompatybilne zarówno z Uno jak i Mega).
Komunikuje się ono przez interfejs SPI, który w Arduino Uno wyprowadzony jest na wyjścia 11, 12 i 13, natomiast w Mega na 50, 51 i 52. I tu może pojawić się pytanie, w jaki sposób jest w takim razie, shield jest kompatybilny z obydwoma płytkami. Jest, bo używa pinów oznaczonych jako ICSP, które są połączone z właściwymi wyjściami konkretnego Arduino. Warto to wiedzieć, bo na rynku jest jeszcze kilka „wynalazków” bez złącza ICSP, które używają zwykłych wyjść i nie współpracują poprawnie z wersją Mega (można je zmusić, ale nie w sposób elegancki). Oficjalna wersja działa w każdym razie poprawnie w każdym przypadku.
Ethernet shield to jednak nie tylko sieć. Rozszerzenie ma także wbudowany czytnik kart micro sd. On także obsługiwany jest przez SPI, ale używa dodatkowo wejść A0 i A1 (do zabezpieczania przed zapisem i wykrywania karty). Ponieważ obie funkcje karty sterowane są przez SPI, to użyte są jeszcze wyjścia 4 i 10 – do wyboru, która z nich ma być użyta.
Podsumowując, jeżeli używamy Ethernet Shield, nie powinniśmy korzystać z wyjść 4, 10-13 (4, 10, 51-52 w przypadku Mega) oraz A0 i A1. Jest to na pewno spore ograniczenie, jeżeli planowaliśmy duży projekt, ale małą ilość wyjść można obejść w inny sposób lub zastosować Arduino Mega. W przypadku Uno, do naszej dyspozycji pozostaje 9 wyjść cyfrowych i 4 analogowe. Zawsze trzeba to wziąć pod uwagę.
Znamy już ograniczenia, ale jakie możliwości daje nam to rozszerzenie? Bardzo szerokie. Arduino przekształca się w urządzenie, które może łączyć się z Internetem. Może być zarówno klientem różnych usług, jak i serwerem. Może więc na przykład cyklicznie wysyłać wyniki jakichś pomiarów do serwera w Internecie – choćby do popularnej usługi pachube/cosm, dla której jest nawet dostępny przykładowy kod klienta. Może też dziłać jako serwer i udostępniać wyniki pomiarów, gdy jakiś klient o nie zapyta.
Oczywiście to nie jedyne możliwości. Ogranicza nas wyobraźnia, projekt i zasoby Arduino. Bez problemu można jednak zbudować rozwiązanie, które będzie działać jako klient i jednocześnie serwer. Dzięki temu będzie mogło przyjmować polecenia i udostępniać dane do jakiegoś systemu nadrzędnego oraz wysyłać do niego informacje o różnych zdarzeniach. Na tym założeniu będzie oparty system nawadniania, alarmu i inteligentnego domu, o czym wkrótce…
Mam pytanie, w jaki sposób ten shield „zajmuje” piny 51 i 52 w mega? Na mojej płytce w ogóle nie wydają się one być połączone z shieldem (tak jak na załączonym obrazku).
http://www.laurenceliss.com/sites/default/files/styles/large/public/IMG_4666.JPG?itok=KHtmInDA
Są połączone. Ethernet shield jest połączony z ICSP header, który ma wyprowadzenia połączone z pinami 50-53.
Teraz rozumiem, dziękuje.