Главная » Хабрахабр » [Из песочницы] Serial, UART и Android, как связь с микроконтроллерами

[Из песочницы] Serial, UART и Android, как связь с микроконтроллерами

image

Наши испытуемые:

Планшет на 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()
//Зажигаем светодиод digitalWrite(RED_LED, rs); digitalWrite(GREEN_LED, gs); digitalWrite(BLUE_LED, bs); //Отправляем текущее состояние светодиодов Serial.print("RGB="); Serial.print(rs); Serial.print(gs); Serial.println(bs); }
}

0. В моём случае при подключении к планшету в директории /dev/usb/ появляется файл tty1-1:1. Попробуем в эмуляторе терминала прописать следующее:

$ echo 2 > /dev/tty1-1:1.0
$ read s < /dev/tty1-1:1.0
$ echo $s
RGB=010

Почему неожиданно? И тут неожиданно для меня загорается зелёный свет и я увидел строку вывода. Не будем останавливаться на этом. Потому что я пренебрёг предварительной настройкой соединения, ткнул пальцем в небо, но за то как удачно! Но скажу что в разных версиях ядра платы будут определяться по разному, и единой строки команды без костылей не придумаешь (да-да linux обыкновенный).

В Google Play находится много по запросу “Serial UART”, и большинство приложений работает как надо с игрушкой от Texas Instruments. Немного поигравшись с цветами, отправляя в так называемый COM порт разные цифры приступил к поиску универсального Android решения. Для Arduino нашёл классную библиотеку, но об этом ниже… Но мои попытки найти что нить совместимое Open Source окончились почти ничем.

Испытуемый 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); }
}

0, повторяем эксперимент:
Подключаем к планшету, снова видим в директории /dev/usb/ файлик tty1-1:1.

$ echo 1 > /dev/tty1-1:1.0

и тут обнаруживаю что светодиод 2 раза мигнул с периодом около 100 мс и погас. Ладно пробую следующее:

$ read s < /dev/tty1-1:1.0

И тут терминал застыл в ожидании… Ладно Ctrl+C

$ echo $s

Логично что в выводе ничего нет.

Для начала откроем библиотеку как обыкновенный android проект в Eclipse. Но это было только вступление, есть один замечательный проект Physicaloid Library. Теперь что бы при нажатии кнопки отправить строку “1” в ардуину:
Теперь создадим новый проект и в его свойствах в пункте android, Library жмём Add… и выбираем Physicaloid Library.

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. Самому переделать, пока скила не хватает.


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

Мир! Труд! iOS! Да здравствует оффер за 1 день

Мы рады анонсировать hiring event для iOS-разработчиков в московском офисе FunCorp. Всё просто: участник присылает нам тестовое задание до 13 мая, затем мы объявляем результаты участников и приглашаем авторов лучших решений к нам в офис 24 мая (где, собственно, и ...

Wi-Fi 6: что у 802.11ax внутри

В данном случае антенна — это уже не просто «железка», а сочетание аппаратной части и алгоритма выбора конфигурации. Очевидно, что технология MU-MIMO 8×8 должна поддерживаться устройством, а эффективность формирования отдельных пространственных лучей зависит от используемых производителями решений, в частности, направленных ...