Na prośbę kilku osób przygotowałem bardzo prostą aplikacje na Androida umożliwiającą sterownie płytki Arduino podpiętej do sieci ethernet, sam program może stanowić bazę dla większych projektów.
Aplikacja w działaniu:
Co jest potrzebne:
- płytka zgodna z Arduino,
- ethernet shield z układem Wiznet W5100
lub można użyć płytek stanowiących połączenie Arduino oraz shielda np. Iboard Ex lub Iboard pro
Schemat podłączenia:
Zasada działania:
Aplikacja z androida wysyła do płytki Arduino pakiety danych UDP, Arduino odbiera je i w zależności od zawartości pakietu steruje odpowiednimi wyjściami lub odpowiada zwracając interesującą nas informację - w przykładowej aplikacji jest to stan wejścia D7.
Co musimy wiedzieć o pakietach UDP:
- aby go wysłać potrzebujemy IP Arduino oraz port, na którym pracuje serwer, w przykładowej aplikacji jest to IP 192.168.1.177 port 8888
- po otrzymaniu pakietu Arduino wie z jakiego adresu IP otrzymało ten pakiet i może odpowiedzieć - to zostało wkorzystane aby odczytywać stan wejść.
Aplikacja na Androida:
- została napisana w Android Studio, konfiguracja systemu jest do znalezienia np. na Youtube
- Android Studio posiada wbudowany emulator systemu więc przykładową aplikację możemy przetestować na PC
Działanie aplikacji na Androida:
- sterowanie odbywa się za pomocą komunikatów UDP i np. wysłanie komunikatu: D2ON powoduje włączenie diody podłączonej do wyjścia D2 Arduino od strony Arduino wygląda to następująco:
value=packetBuffer;
if(value.indexOf("D2ON")==0)
{
digitalWrite(2, HIGH);
} - odczyt danych z Arduino: ponieważ to Arduino odpowiada na zapytania ze strony Androida potrzebny jest mechanizm, który będzie co jakiś czas odpytywał Arduino o stan wejść, w tym celu został użyty timer który co 1 s wysyła do Arduino zapytanie: STATUSD7 na co Arduino odpowiada stanem wejscia D7, od strony Arduino wygląda to następująco:
if(value.indexOf("STATUSD7")==0)
{
if (digitalRead(7)==0)
{
buffer = "D7 LOW ";
buffer.toCharArray(ReplyBuffer,9);
}
if (digitalRead(7)==1)
{
buffer = "D7 HIGH ";
buffer.toCharArray(ReplyBuffer,9);
}
}
Aby rozpocząć odczyt danych a Arduino należy wcisnąć przycisk: timer start
Pliki do pobrania: