Arduino + Android

Подключение Arduino к AndroidЧтобы делать современные электронные устройства сейчас совсем не нужно обладать какими либо глубокими познаниями в области электроники, знать низкоуровневые языки программирования, такие как ассемблер. Развитие мировой инженерной мысли подарило нам такую замечательную платформу, как Arduino, которая построена на базе микроконтроллеров ATmega фирмы Atmel. Программировать микроконтроллеры с Arduino очень просто. Это делается на понятном всему прогрессивному человечеству языке C++ вместо ассемблера. Кроме того, для платформы Arduino написано уже огромное количество готовых библиотек на все случаи жизни, и самому изобретать велосипеды не придется.

Что еще нужно, чтобы создать современное электронное устройство своими руками? Сейчас уже не достаточно просто снабдить прибор парой лампочек и ручек регулировки. Современные требования заставляют нас делать устройства, которые бы общались с человеком через удобные графические интерфейсы. Первое, что приходит на ум — это подключить LCD-панель к Arduino. Но сразу начинаешь упираться в ограничения памяти и быстродействия. Все вычислительные мощности процессора ATmega могут уйти на обслуживание LCD-матрицы. Хотя другие умудряются делать вполне приличные графические интерфейсы. Однако они ни в какое сравнение не идут с графикой, доступной для современных телефонов и планшетов на базе Android, например.

И тут приходит вполне логичная мысль — заменить подключение LCD-дисплея к Arduino полноценным графическим тач-скрином на базе Android-планшета. Тем более, что стоимость подходящего планшета сопоставима со стоимостью всего одной цветной LCD-матрицы для подключения к Arduino! Зачем же переплачивать?

Лично я полностью отказался от мысли подключить LCD к Arduino, вместо чего решил подключить Arduino к Android планшету. Также благодаря такому решению мы получаем дополнительные вычислительные мощности и полноценный графический интерфейс для своей поделки на Arduino. Можно даже полностью перенести логику на Android-планшет, а Arduino рассматривать как простой исполнительный механизм, для чего он, собственно и предназначен в конечном итоге.

Для подключения Arduino к Android подойдет, к сожалению, не каждый планшет. Но, к счастью, практически любой современный, который сейчас можно найти в магазине. Важно, чтобы в характеристиках Android-планшета была опция «возможность подключения внешних USB-устройств». Да, все верно — мы подключим Arduino к Android просто через USB! Неплохой планшет я нашел в сети магазинов DNS всего за 1800 рублей. Он так и называется — DNS AirTab. Там уже включен root-доступ, насколько я понял. Поэтому его можно максимально переколбасить под свои нужды.

Все, что остается сделать — это написать небольшое Android-приложение, которое бы «общалось» с нашей Arduino, отсылая и принимая команды через стандартный Serial-порт. Стандартная плата Arduino и ее клоны имеет на борту преобразователь USB-Serial на базе микросхемы FTDI FT232RL. Более новая Arduino уже идет с другой микросхемой, но это, вероятно, сути не изменит. Для FT232RL уже есть готовая библиотека на Java, которую можно брать и встраивать в свой Android-проект.

По поводу пользовательского интерфейса для своих устройств я решил, что буду делать их на HTML и JavaScript. Мне так проще и роднее, ведь начинал я свою деятельность, как дизайнер и разработчик интернет-сайтов. Кроме того, сверстанные HTML-страницы для пользовательского интерфейса выглядят куда приятнее, чем стандартные элементы управления, предлагаемые платформой Android. Есть еще один путь — использование какого-либо графического движка под Android, на котором обычно делают игры, но разбираться с ним совсем нет времени.

Чтобы сделать графический интерфейс на HTML в Android-приложении, нужно воспользоваться стандартным элементом этой платформы — WebView. WebView позволяет загружать HTML-страницу и отображать внутри Android-приложения — как раз то, что нам и нужно! Кроме того, WebView позволяет «общаться» Android-приложению и JavaScript, размещенному внутри этой HTML-страницы. Таким образом, выстраивается такая цепочка передачи данных: JavaScript -> Java (Android) -> USB-Serial -> Arduino и обратно.

Для Android-приложения в манифесте нужно не забыть прописать разрешения на доступ к INTERNET и подключению внешних USB-устройств:

<uses-permission android:name=»android.permission.INTERNET» />

<uses-feature android:name=»android.hardware.usb.HOST» />

<action android:name=»android.hardware.usb.action.USB_DEVICE_ATTACHED» />

<meta-data android:name=»android.hardware.usb.action.USB_DEVICE_ATTACHED»
android:resource=»@xml/device_filter» />

Кроме этого, необходимо разместить в папке res/xml/ нашего проекта файл device_filter.xml, в котором содержится фильтр для USB-устройства, чтобы наше приложение реагировало только на подключение Arduino. Сам файл должен содержать сигнатуру микросхемы FTDI

<resources>
<!— 0×0403 / 0×6001: FTDI FT232R UART —>
<usb-device vendor-id=»1027″ product-id=»24577″ />
</resources>

Позднее я допишу эту статью, когда наметится прогресс в этом направлении, так что следите за обновлениями!

  • Евгений

    Здравствуйте, выложите пожалуйста самый обычный пример связи андроида и мк в примере андроид программы. Как можно проще. Я не понял всего написанного в той библиотеке. Очень нужно. Я запутался.
    Просто обнаружение, соединение, посылка дааных, принятие данных и тп. Жду с нетерпением ответа.

    • http://dimanjy.com/ Dimanjy

      Евгений, я еще даже статью не дописал :)

      Там у них в этой библиотеке специальная папка с примерами есть. Я в свою программу прямо оттуда и копировал готовыми кусками. Посмотрите — вроде там достаточно легко разобраться. Например, тут: https://github.com/mik3y/usb-serial-for-android/blob/master/UsbSerialExamples/src/com/hoho/android/usbserial/examples/SerialConsoleActivity.java

      • Евгений

        Я это уже читал. Я просто не пойму по какому порядку это всё вызывать. Да и что к чему. Не могли бы вы, пожалуйста, написать пример на android studio с визуальным оформлением? Заранее спасибо :)

      • Евгений

        Вы тут???