
Наши испытуемые:
Планшет на Android 4.1.1 “DNS AirTab M101w” и следующие устройства:
1. Плата Tiva C Series TM4C123G LaunchPad
2. Плата Stellaris LaunchPad EK-LM4F120XL
3. Плата Arduino MEGA 2560
4. Плата MSP430 LaunchPad, M430G2553
И сейчас мы будем по очерёдности подключать все эти платы через USB OTG к планшету и пытаться установить с ними связь не прибегая к root доступу.
Испытуемый 1. Плата Tiva C Series TM4C123G LaunchPad
Плата имеет разъём micro-usb “DEBUG”, и RGB светодиод, с ними то и будем играться.
Был залит при помощи Energia IDE следующий скетч:
char data = ' '; //переменная для приёма символа boolean rs, gs, bs = false; //статус каждого светодиода void setup() { //Настройка выходов pinMode(RED_LED, OUTPUT); pinMode(GREEN_LED, OUTPUT); pinMode(BLUE_LED, OUTPUT); Serial.begin(9600); //открытие Serial соединения на скорости 9600 } void loop() { if (Serial.available()){ //если были получены данные data = Serial.read(); //прочитать их switch (data){ //и выполнить case '1': rs = !rs; break; case '2': gs = !gs; break; case '3': bs = !bs; break; } //Зажигаем светодиод digitalWrite(RED_LED, rs); digitalWrite(GREEN_LED, gs); digitalWrite(BLUE_LED, bs); //Отправляем текущее состояние светодиодов Serial.print("RGB="); Serial.print(rs); Serial.print(gs); Serial.println(bs); } }
В моём случае при подключении к планшету в директории /dev/usb/ появляется файл tty1-1:1.0. Попробуем в эмуляторе терминала прописать следующее:
$ echo 2 > /dev/tty1-1:1.0 $ read s < /dev/tty1-1:1.0 $ echo $s RGB=010
И тут неожиданно для меня загорается зелёный свет и я увидел строку вывода. Почему неожиданно? Потому что я пренебрёг предварительной настройкой соединения, ткнул пальцем в небо, но за то как удачно! Не будем останавливаться на этом. Но скажу что в разных версиях ядра платы будут определяться по разному, и единой строки команды без костылей не придумаешь
Немного поигравшись с цветами, отправляя в так называемый COM порт разные цифры приступил к поиску универсального Android решения. В Google Play находится много по запросу “Serial UART”, и большинство приложений работает как надо с игрушкой от Texas Instruments. Но мои попытки найти что нить совместимое Open Source окончились почти ничем. Для Arduino нашёл классную библиотеку, но об этом ниже…
Испытуемый 2: Плата Stellaris LaunchPad EK-LM4F120XL
Как я понял, это предыдущая версия нашего первого испытуемого и с андройдом ведёт себя точно так же. Но актуальная на данный момент Energia 0101E0010 при попытке залить скетч не видит эту плату (Windows 8).
No ICDI device with USB VID:PID 1cbe:00fd found! Failed!
Поэтому я просто включил вывод в консоль пути конечного бинарника и загружал его вручную при помощи LM Flash Programmer.
Испытуемый 3: Плата Arduino MEGA 2560
Немного изменим скетч и будем мигать только одним светодиодом.
Заливаем при помощи Arduino IDE
#define LED 13 char data = ' '; boolean ls = false; void setup() { pinMode(LED, OUTPUT); Serial.begin(9600); } void loop() { if (Serial.available()){ data = Serial.read(); switch (data){ case '1': ls = !ls; break; } digitalWrite(LED, ls); Serial.print("LED="); Serial.println(ls); } }
Подключаем к планшету, снова видим в директории /dev/usb/ файлик tty1-1:1.0, повторяем эксперимент:
$ echo 1 > /dev/tty1-1:1.0
и тут обнаруживаю что светодиод 2 раза мигнул с периодом около 100 мс и погас. Ладно пробую следующее:
$ read s < /dev/tty1-1:1.0
И тут терминал застыл в ожидании… Ладно Ctrl+C
$ echo $s
Логично что в выводе ничего нет.
Но это было только вступление, есть один замечательный проект Physicaloid Library. Для начала откроем библиотеку как обыкновенный android проект в Eclipse. Теперь создадим новый проект и в его свойствах в пункте android, Library жмём Add… и выбираем Physicaloid Library. Теперь что бы при нажатии кнопки отправить строку “1” в ардуину:
public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.button1: mPhysicaloid = new Physicaloid(this); if(mPhysicaloid.open()) { byte[] buf = "1".getBytes(); mPhysicaloid.write(buf, buf.length); mPhysicaloid.close(); } break; }
Как прочитать полученные данные, думаю рассказывать не нужно, ибо в документации к библиотеке всё есть.
Испытуемый 4: Плата MSP430 LaunchPad, M430G2553.
Эта плата совсем не захотела работать с моим железом. Просто не определяется системой, а USB Device info просто виснет при рефреше.
Итог:
Хотелось бы такую библиотеку для работы с платами Tiva C Series. Самому переделать, пока скила не хватает.
