Elektroda.pl
Elektroda.pl
X
PCBway
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Komunikacja ARM lub AVR z Androidem.

11 Sie 2013 20:12 3774 13
  • Poziom 10  
    Witam.

    Chciałbym połączyć ze sobą dwa urządzenia takie jak tablet czy telefon z systemem Android oraz mikrokontroler ARM czy też AVR (posiadam płytke ZL29ARM z STM32F107VC oraz Arduino Mega 2560 oparte o Atmege 2560). Moim celem jest sterowanie za pomocą aplikacji uruchomionej na androidzie jednym z tych mikrokontrolerów. Urządzenia będą połączone kablem usb. Na początek chodzi mi tylko oczywiście o przykładowe włączenie i wyłączenie diody na płytce za pomocą aplikacji na androidzie. Znalazłem nawet sporo tego typu przykładów np:
    - amarino-toolkit.net

    Google udostępnia oczywiście niby wszystkie źródła i podane przykłady z wykorzystaniem swojej płytki Google ADK, podobnej do Arduino Mega2560, tyle że wyposażonej w dodatkowe złącze USB i do tego układ MAX4321e, który zapewnia komuniacje międzi USB a SPI mikrokontrolera. Napisane przez nich pliki są w C++ i też nie wszystko potrafię zrozumieć w 100%, gdyż sam orientuję się trochę tylko w języku C. Przeglądając ich kody więcej się domyślam, niż mam pewność... (developer.android.com/tools/adk/adk.html)


    Jeśli chodzi o Arduino to nie znalazłem typowego przykładu na moją płytkę, czyli bez ukladu MAX4321e i bez wykorzystania bluetootha. Chciałbym wykorzystać to złącze które tam jest, doczepiając do kabla przejściówkę na mikro usb która bywa dołączana do telefonów czy tabletów. Dodam, że tam jest układ Atmel Mega16U2 który zamienia transmisje USB na UART i w ten sposób można np. komunikować się z PC tworząc wirtualny COM. Tu też moje pytanie, czy można się na takiej samej zasadzie komunikować z androidem? Jeśli tak, to w jaki sposób? W zasadzie to wiem, że można bo widziałem na własne oczy tego typu konfiguracje.

    W grę wchodzi również druga opcja, wykorzystania złącza USB HOST na płytce ZL29ARM.

    Jeśli ktoś wcześniej już się interesował podobnym tematem, proszę o udzielenie mi wszelkich potrzebnych informacji do wdrożenia tego pomysłu w życie. Przydatne będą również wszelkiego rodzaju linki i tutoriale.
  • PCBway
  • Specjalista - Mikrokontrolery
    Poszukaj hasła "android accessory" - znajdziesz sporo rozwiązań, ale obawiam się, że większość na Cortexach, a nie na muzealnych układach AVR. Pewnie na STM32F też coś się znajdzie.
  • PCBway
  • Moderator Mikrokontrolery Projektowanie
    Komunikacja po USB nie jest banalna. Na początek najprościej wykorzystać wirtualny port szeregowy i po tym się komunikować. W tym celu można się posłużyć dowolnym prockiem z zaimplementowanym USB-device.
  • Poziom 30  
    Są dwie możliwości (http://developer.android.com/guide/topics/connectivity/usb/index.html):
    1. Zewnętrzne urządzanie jest typu "Device".
    Wymagania: Android wer. 3 lub wyższa, port USB OTG, zwykle własna aplikacja do obsługi
    2. Zewnętrzne urządzenie jest typu "HOST"
  • Poziom 17  
    Jest jeszcze jedna możliwość: zewnętrzne urządzenie może być serwerem UDP i wtedy z androida można np. po WiFi. Działa bez problemów nawet na AVR + ENC28J60.
  • Poziom 23  
    Wydaje mi się, że prostsza w oprogramowaniu będzie komunikacja przez Bluetooth z wykorzystaniem profilu SPP. Wykorzystać do tego trzeba moduł komunikacyjny np. http://dx.com/p/wireless-bluetooth-rs232-ttl-transceiver-module-80711 , są też dostępne na portalach aukcyjnych. Moduł jest bardzo mały, zasilanie 3V3. Łączy się go bezpośrednio z UARTem procka a przykład oprogramowania na Androida jest dostępny tu: http://www.anddev.org/code-snippets-for-andro...over-bluetooth-simple-test-client-t11106.html .

    Z modułem tym też bardzo łatwo połączyć się z PCta z pomocą dowolnego terminala i interfejsu Bluetooth, jest widziany w systemie jako wirtualny port COM.
  • Poziom 30  
    SPP powoli przechodzi do historii. Nowe telefony z Androidem nie mają już tego profilu. Programowo można jednak jeszcze obejść ten problem.
  • Poziom 23  
    Obsługa SPP (RFCOMM) jest obecna w ostatniej 18-tej wersji API Androida. Dlaczego miało by być wycofywane?
  • Poziom 30  
    Np. GalaxyTab nie ma w systemie profilu SPP. Nie przeszkadza to jednak w napisaniu aplikacji przesyłającej dane do modułu z SPP.
  • Poziom 10  
    Niestety u mnie wchodzi w grę tylko komunikacja kabelkiem.

    znalazłem dość ciekawy przykład wykorzystujący USB na cortex-ie tyle, że LPC -http://www.embeddedartists.com/products/app/aoa_kit.php Może posłużyć jako wzór do aplikacji na STMa.


    A spotkaliście się może z jakąś aplikacją na androida typu hyperterminal ? Mam namyśli połączenie atmega2560--uart -->atmega16U2--usb------------->android. Czy jest możliwa taka komunikacja przy wgraniu na arduino tylko programu wysyłającego np slowo 'Czesc' i odebraniu tego słowa na androidzie? Coś na wzór połączenia komputera z wykorzystaniem wirtualnego portu z płytką.
  • Poziom 30  
    Jeszcze raz to samo:
    Są dwie możliwości (http://developer.android.com/guide/topics/connectivity/usb/index.html):
    1. Zewnętrzne urządzanie jest typu "Device".
    Wymagania: Android wer. 3 lub wyższa, port USB OTG, zwykle własna aplikacja do obsługi
    2. Zewnętrzne urządzenie jest typu "HOST"

    Jeśli wybierasz opcję 1 to musisz sam taką aplikację napisać. W atmega16U2 wpisujesz dane do endpointa a w aplikacji na androida je odczytujesz.

    System Android w większości urządzeń nie obsługuje klasy CDC. Nie znajdziesz więc "uniwersalnej" aplikacji terminala. Są tylko programy współpracujące z jakimś konkretnym urządzeniem USB.
  • Poziom 10  
    Udało mi się połączyć STM'a z androidem. Płytka jest jako HOST. Natomiast całkowicie poprawnie działa mi komunikacja tylko na Samsungu S3, natomiast na tablecie z androidem 4.1.1 czy też z telefonem (android 4.2) nie działa jak należy.

    Samsung wykrywa urządzenie jako aparat i od razu wyskakuje komunikat żeby zainstalować aplikacje ze strony www.... , jeśli jest zainstalowana to pyta czy uruchomić tą aplikacje po podłączeniu płytki do samsunga. Mianowicie jeśli chodzi o tableta czy drugi telefon to one wykrywają płytkę tylko jako zewnętrzną pamięć masową i to wszystko, nic się więcej nie dzieje.

    Stąd moje pytanie, skąd te różnice w działaniu między samsungiem, a tabletem czy też drugim telefonem (HTC) ??
  • Poziom 30  
    Pomieszałeś trochę pojęcia.
    Jeśli płytka jest typu HOST to ona musi wykryć telefon/tablet. Na tablecie z Androidem może jedynie pojawić się pytanie jak ma być on "widziany". Jeśli wybierzesz opcję "pamięć masowa" to płytka będzie miała dostęp do plików zapisanych w pamięci urządzenia.