Android и arduino. введение в adk

Arduino-ADK

Arduino ADK — это устройство на основе микроконтроллера ATmega2560. С использованием микросхемы MAX3421E в нем реализован USB-хост для подключения смартфонов на базе операционной системы Android.

 В состав устройства также входят: 54 цифровых входа/выхода (из которых 15 могут использоваться в качестве ШИМ-выходов), 16 аналоговых входов, 4 UART (аппаратных приемопередатчика для реализации последовательных интерфейсов), кварцевый резонатор на 16 МГц, разъем USB, разъем питания, разъем ICSP для внутрисхемного программирования и кнопка сброса.

Arduino ADK спроектирован на основе Arduino Mega 2560.

В качестве преобразователя интерфейсов USB-UART в Arduino ADK используется микроконтроллер ATmega8U2 (как и в Ардуино Uno и Mega 2560).

Для упрощения процесса обновления прошивки, на плате MegaADK версии R2 добавлен резистор, подтягивающий к земле линию HWB микроконтроллера 8U2. Подобная мера позволяет упростить переключение устройства в режим DFU.

Изменения на плате версии R3 перечислены ниже:

  • Распиновка 1.0: добавлены выводы SDA и SCL (возле вывода AREF), а также два новых вывода, расположенных возле вывода RESET. Первый — IOREF — позволяет платам расширения подстраиваться под рабочее напряжение Ардуино. Данный вывод предусмотрен для совместимости плат расширения как с 5В-Ардуино на базе микроконтроллеров AVR, так и с 3.3В-платами Arduino Due. Второй вывод ни к чему не подсоединен и зарезервирован для будущих целей.
  • Улучшена помехоустойчивость цепи сброса.

Характеристики

Микроконтроллер ATmega2560
Рабочее напряжение
Напряжение питания (рекомендуемое) 7-12В
Напряжение питания (предельное) 6-20В
Цифровые входы/выходы 54 (из которых 15 могут использоваться в качестве ШИМ-выходов)
Аналоговые входы 16
Максимальный ток одного вывода 40 мА
Максимальный выходной ток вывода 3.3V 50 мА
Flash-память 256 КБ из которых 8 КБ используются загрузчиком
SRAM 8 КБ
EEPROM 4 КБ
Тактовая частота 16 МГц

Питание

Arduino ADK может быть запитан от USB либо от внешнего источника питания — тип источника выбирается автоматически.

В качестве внешнего источника питания (не USB) может использоваться сетевой AC/DC-адаптер или аккумулятор/батарея. Штекер адаптера (диаметр — 2.1мм, центральный контакт — положительный) необходимо вставить в соответствующий разъем питания на плате. В случае питания от аккумулятора/батареи, ее провода необходимо подсоединить к выводам Gnd и Vin разъема POWER.

Примечание: Поскольку Arduino ADK работает в режиме USB-хоста, то при подключении к нему смартфона, последний будет пытаться потреблять от Ардуино ток, необходимый для подзарядки его батареи. Если Arduino ADK запитан от USB, то максимальный ток, расходуемый на питание платы и смартфона, ограничен 500 мА.

Стабилизатор напряжения в цепи внешнего источника питания способен пропускать ток до 1500 мА. Поэтому, при использовании внешнего источника, для питания Ардуино и смартфона отводится 750 мА. Еще 750 мА зарезервировано для питания различных приводов и датчиков, подключаемых к плате.

Таким образом, для использования всех возможностей Ардуино необходим источник питания с выходным током не менее 1.5А.

Напряжение внешнего источника питания может быть в пределах от 5,5 до 16 В.

Однако, уменьшение напряжения питания ниже 7В приводит к уменьшению напряжения на выводе 5V, что может стать причиной нестабильной работы устройства.

Использование напряжения больше 12В может приводить к перегреву стабилизатора напряжения и выходу платы из строя. С учетом этого, рекомендуется использовать источник питания с напряжением в диапазоне от 7 до 12В.

Выводы питания, расположенные на плате, перечислены ниже:

  • VIN. Напряжение, поступающее в Arduino непосредственно от внешнего источника питания (не связано с 5В от USB или другим стабилизированным напряжением). Через этот вывод можно как подавать внешнее питание, так и потреблять ток, когда устройство запитано от внешнего адаптера.
  • 5V. На этот вывод поступает напряжение 5В от стабилизатора напряжения на плате, вне независимости от того, как запитано устройство: от адаптера (7 — 12В), от USB (5В) или через вывод VIN (7 — 12В). Запитывать устройство через выводы 5V или 3V3 не рекомендуется, поскольку в этом случае не используется стабилизатор напряжения, что может привести к выходу платы из строя.
  • 3V3. 3.3В, поступающие от стабилизатора напряжения на плате. Максимальный ток, потребляемый от этого вывода, составляет 50 мА.
  • GND. Выводы земли.
  • IOREF. Этот вывод предоставляет платам расширения информацию о рабочем напряжении микроконтроллера Ардуино. В зависимости от напряжения, считанного с вывода IOREF, плата расширения может переключиться на соответствующий источник питания либо задействовать преобразователи уровней, что позволит ей работать как с 5В, так и с 3.3В-устройствами.

Память

Arduino ADK имеет 256 КБ флеш-памяти (из которых 8 КБ используются загрузчиком), 8 КБ памяти SRAM и 4 КБ EEPROM (из которой можно считывать или записывать информацию с помощью библиотеки EEPROM).

Входы и выходы

С использованием функций  pinMode(),  digitalWrite()  и digitalRead() каждый из 50 цифровых выводов Arduino ADK может работать в качестве входа или выхода. Уровень напряжения на выводах ограничен 5В.

Максимальный ток, который может отдавать или потреблять один вывод, составляет 40 мА. Все выводы сопряжены с внутренними подтягивающими резисторами (по умолчанию отключенными) номиналом 20-50 кОм.

Помимо этого, некоторые выводы Ардуино могут выполнять дополнительные функции:

  • Последовательный интерфейс Serial: выводы 0 (RX) и 1 (TX); Serial 1: 19 (RX) и 18 (TX); Serial 2: 17 (RX) и 16 (TX); Serial 3: 15 (RX) и 14 (TX). Используются для получения (RX) и передачи (TX) данных по последовательному интерфейсу. Выводы 0 и 1 также соединены с соответствующими выводами микросхемы ATmega8U2, выполняющей роль преобразователя USB-UART.
  • Внешние прерывания: 2 (прерывание 0), 3 (прерывание 1), 18 (прерывание 5), 19 (прерывание 4), 20 (прерывание 3) и 21 (прерывание 2). Могут служить источниками прерываний, возникающих при различных условиях: при низком уровне сигнала, при фронте, спаде или изменении сигнала на этих выводах. Для получения дополнительной информации см. функцию attachInterrupt().
  • ШИМ: выводы 2 — 13 и 44 — 46. С помощью функции analogWrite() могут выводить 8-битные аналоговые значения в виде ШИМ-сигнала.
  • Интерфейс SPI: выводы 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS). С применением библиотеки SPI данные выводы позволяют осуществлять связь по интерфейсу SPI. Линии SPI также выведены на разъем ICSP, совместимый с Arduino Uno, Duemilanove и Diecimila.
  • USB-хост: MAX3421E. Микросхема MAX3421E взаимодействует с Ардуино по шине SPI. При этом задействуются следующие выводы:
    • Цифровые: 7 (RST), 50 (MISO), 51 (MOSI), 52 (SCK).Примечание: Не следует использовать цифровой вывод 7 в качестве обычного входа или выхода, поскольку он участвует в процессе взаимодействия с микросхемой MAX3421E.
    • Линии микроконтроллера, не выведенные на разъемы: PJ3 (GP_MAX), PJ6 (INT_MAX), PH7 (SS).
  • Светодиод: 13. Встроенный светодиод, подсоединенный к выводу 13. При отправке значения HIGH светодиод включается, при отправке LOW — выключается.
  • TWI: выводы 20 (SDA) и 21 (SCL). С использованием библиотеки Wire данные выводы позволяют осуществлять связь по интерфейсу TWI. Обратите внимание, что расположение этих выводов отличается от Arduino Duemilanove и Diecimila.

В Arduino ADK есть 16 аналоговых входов, каждый из которых может представить аналоговое напряжение в виде 10-битного числа (1024 различных значения). По умолчанию, измерение напряжения осуществляется относительно диапазона от 0 до 5 В. Тем не менее, верхнюю границу этого диапазона можно изменить, используя вывод AREF и функцию analogReference().

Помимо перечисленных на плате существует еще несколько выводов:

  • AREF. Опорное напряжение для аналоговых входов. Может задействоваться функцией analogReference().
  • Reset. Формирование низкого уровня (LOW) на этом выводе приведет к перезагрузке микроконтроллера. Обычно этот вывод служит для функционирования кнопки сброса на платах расширения

Связь

Arduino ADK предоставляет ряд возможностей для осуществления связи с компьютером, еще одним Ардуино или другими микроконтроллерами. В ATmega2560 есть четыре аппаратных приемопередатчика UART для реализации последовательных интерфейсов (c логическим уровнем TTL 5В).

 Микросхема ATmega8U2 на плате обеспечивает связь одного из приемопередатчиков с USB-портом компьютера, и при подключении к ПК позволяет Ардуино определяться как виртуальный COM-порт (для этого операционной системе Windows потребуется соответствующий .

inf-файл, в отличие от OSX и Linux, где распознавание платы в качестве COM-порта происходит автоматически). В пакет программного обеспечения Ардуино входит специальная программа SerialMonitor, позволяющая считывать и отправлять на Ардуино простые текстовые данные.

При передаче данных через микросхему ATmega8U2 во время USB-соединения с компьютером, на плате будут мигать светодиоды RX и TX. (При последовательной передаче данных посредством выводов 0 и 1, без использования USB-преобразователя, данные светодиоды не задействуются).

Библиотека SoftwareSerial позволяет реализовать последовательную связь на любых цифровых выводах Arduino ADK.

В микроконтроллере ATmega2560 также реализована поддержка последовательных интерфейсов TWI и SPI. В программное обеспечение Ардуино входит библиотека Wire, позволяющая упростить работу с шиной TWI; для получения более подробной информации см. библиотеку Wire. Для работы с интерфейсом SPI используйте библиотеку SPI.

USB-хост, реализованный с помощью микросхемы MAX3421E, позволяет Arduino ADK взаимодействовать с любыми типами USB-устройств. Например: с различными телефонами, камерами Canon, клавиатурой, мышью, игровыми контроллерами Wiimote или PS3, и т.д.

Программирование

Arduino ADK программируется с помощью программного обеспечения Ардуино.

ATmega2560 в Arduino ADK выпускается с прошитым загрузчиком (таким же, как и в Mega 2560), позволяющим загружать в микроконтроллер новые программы без необходимости использования внешнего программатора. Взаимодействие с ним осуществляется по оригинальному протоколу STK500v2.

Тем не менее, микроконтроллер можно прошить и через разъем для внутрисхемного программирования ICSP (In-Circuit Serial Programming), не обращая внимания на загрузчик;

Исходный код прошивки микроконтроллера ATmega8U2 находится в свободном доступе в репозиториях Ардуино. Прошивка ATmega8U2 включает в себя DFU-загрузчик (Device Firmware Update), позволяющий обновлять прошивку микроконтроллера. Для активации режима DFU необходимо:

  • На платах версии R1: замкнуть перемычку на обратной стороне платы (возле изображения Италии), после чего сбросить 8U2.
  • На платах версий R2 и выше — для упрощения перехода в режим DFU присутствует резистор, подтягивающий к земле линию HWB микроконтроллера 8U2/16U2.После перехода в DFU-режим для загрузки новой прошивки можно использовать программное обеспечение Atmel’s FLIP (для Windows) или DFU programmer (для Mac OS X и Linux). Альтернативный вариант — прошить микроконтроллер через разъем для внутрисхемного программирования ISP с помощью внешнего программатора, однако в этом случае DFU-загрузчик затрется.

Автоматический (программный) сброс

Чтобы каждый раз перед загрузкой программы не требовалось нажимать кнопку сброса, Arduino ADK спроектирован таким образом, который позволяет осуществлять его сброс программно с подключенного компьютера. Один из выводов ATmega8U2, участвующий в управлении потоком данных (DTR), соединен с выводом RESET микроконтроллера ATmega2560 через конденсатор номиналом 100 нФ.

Когда на линии DTR появляется ноль, вывод RESET также переходит в низкий уровень на время, достаточное для перезагрузки микроконтроллера. Данная особенность используется для того, чтобы можно было прошивать микроконтроллер всего одним нажатием кнопки в среде программирования Ардуино.

Такая архитектура позволяет уменьшить таймаут загрузчика, поскольку процесс прошивки всегда синхронизирован со спадом сигнала на линии DTR.

Однако эта система может приводить и к другим последствиям. При подключении ADK к компьютерам, работающим на Mac OS X или Linux, его микроконтроллер будет сбрасываться при каждом соединении программного обеспечения с платой.

После сброса на Arduino ADK активизируется загрузчик на время около полсекунды. Несмотря на то, что загрузчик запрограммирован игнорировать посторонние данные (т.е.

все данные, не касающиеся процесса прошивки новой программы), он может перехватить несколько первых байт данных из посылки, отправляемой плате сразу после установки соединения.

Соответственно, если в программе, работающей на Ардуино, предусмотрено получение от компьютера каких-либо настроек или других данных при первом запуске, убедитесь, что программное обеспечение, с которым взаимодействует Ардуино, осуществляет отправку спустя секунду после установки соединения.

На плате ADK существует дорожка (отмеченная как «RESET-EN»), разомкнув которую, можно отключить автоматический сброс микроконтроллера.

Для повторного восстановления функции автоматического сброса необходимо спаять между собой выводы, расположенные по краям этой дорожки.

Автоматический сброс также можно выключить, подключив резистор номиналом 110 Ом между выводом RESET и 5В. Защита USB от перегрузок

В Arduino ADK есть восстанавливаемые предохранители, защищающие USB-порт компьютера от коротких замыканий и перегрузок.

Несмотря на то, что большинство компьютеров имеют собственную защиту, такие предохранители обеспечивают дополнительный уровень защиты.

Если от USB-порта потребляется ток более 500 мА, предохранитель автоматически разорвет соединение до устранения причин короткого замыкания или перегрузки.

Физические характеристики

Максимальная длина и ширина печатной платы ADK составляет 10.2 см и 5.4 см соответственно, с учетом разъема USB и разъема питания, выступающих за пределы платы. Три крепежных отверстия позволяют прикреплять плату к поверхности или корпусу. Обратите внимание, что расстояние между цифровыми выводами 7 и 8 не кратно традиционным 2.54 мм и составляет 4 мм.

Arduino ADK спроектирован таким образом, чтобы быть совместимым с большинством плат расширения для Ардуино Uno, Diecimila и Duemilanove. Поэтому, цифровые выводы 0 — 13 (а также смежные с ними выводы AREF и GND), аналоговые входы 0 — 5, разъем питания и ICSP-разъем на всех платах расположены одинаково.

Кроме того, в перечисленных устройствах для главного приемопередатчика UART отведены одни и те же выводы (0 и 1), как и для внешних прерываний 0 и 1 (выводы 2 и 3 соответственно). Линии интерфейса SPI выведены на разъем ICSP на обеих платах — как на ADK, так и на Duemilanove / Diecimila.

 Обратите внимание, что на Arduino ADK расположение интерфейса I2C (выводы 20 и 21) отличается от плат Duemilanove / Diecimila (аналоговые входы 4 и 5).

Источник: https://elekt.tech/news/arduino-adk.html

Vanyamba uses Linux – Arduino и Интернет Вещей (Internet Of Things)

Идея написать эту статью родилась у меня с появлением Arduino ADK. Саму Arduino ADK я не стал приобретать, поскольку с одной стороны заказать её можно было только в Arduino Store с их кусачими ценами за доставку в Россию, а с другой стороны в то время я был всецело занят портированием библиотеки Simple Dumping Monitor под использование кода библиотеки классов VE_AVR.

Вообще, сопровождение одной библиотеки вполне может занять довольно много времени, но если попытаться поддерживать несколько библиотек, то сразу появляется довольно специфическая проблема.

Допустим, я нашёл какой-то баг у себя в одной из библиотек, исправил его, но примерно ту же ошибку требуется исправить и в других библиотеках. Начинаю исправлять, и хорошо, если не находится ещё один баг, который нужно будет исправить и в первой библиотеке тоже.

Одно тянет за собой другое, и в какой-то момент приходится сказать себе: “Стоп, нужно сделать весь код реюзабельным, то есть чтобы все библиотеки использовали один и тот же код.”

Часто в книгах по программированию пишут про повторное использование кода, что дескать это экономит время при разработке новых программ. На самом деле гораздо больше времени экономится именно при сопровождении уже написанного кода.

Под повторным использованием кода также иногда понимают операцию копировать-вставить. Взять рабочий код и скопировать в другой проект.

И это отлично работает до тех пор, пока не выясняется, что идеальный код способен написать только сферический программист в вакууме, а программист-гуманоид способен разве что приблизиться к идеалу на расстояние некоторой погрешности, после которой любой менеджер ему скажет, что на ещё одну фазу рефакторинга в бюджете нет денег, а в плане нет времени.

Поэтому вместо Arduino ADK я приобрёл себе Ethernet Shield и довольно симпатичную платку Etherten от компании Freetronics. Приобрёл, и первым же делом столкнулся с проблемой руссификации программного обеспечения для этих замечательных устройств.

“Что бы такое подключить к Интернету?” – спросил я самого себя.

“Но так, чтобы это было полезно в хозяйстве,” – поставил я самому себе такое требование.

Первой идеей конечно было автоматизировать свет в фамильном замке Vanyamba Electronics, чтобы снять видео-клип – Ванямба ходит туда-сюда, а свет сам включается и выключается. Но то, что красиво выглядит в видеоклипе, на практике вполне способно реально надоесть.

Источник: https://sites.google.com/site/vanyambauseslinux/arduino/arduino-i-internet-vesej-internet-of-things

Основы взаимодействия Andriod и Arduino микроконтроллеров

Уже достаточно давно Гугл позволила связывать устройства на Адроиде через usb с различными микроконтроллерами, открыв API. Теперь могут ликовать все, кто занимается созданием разнообразных проектов на Ардуино, ведь теперь значительно проще будет провести отладку системы Аndroid Аrduino и, в принципе, отрегулировать их взаимодействие.

https://www.youtube.com/watch?v=YSWS6VX-Bbo

Мы уже начали знакомить читателей с возможностями связки микроконтроллера и смартфона – см. Управление устройствами со смартфона для чайников.

Но и до этого различные модули позволяли спокойно взаимодействовать Андроид и Ардуино. Давайте же разберёмся, каким образом можно реализовать проект, который будет управляться со смартфона, и что для этого потребуется.

Где можно применить связь Андроида с Ардуино

В первую очередь, необходимо задуматься о том, как применять возможность передачи сигнала с Андроид на Ардуино. Ведь прежде, чем изучать какие-то материалы, каждый здравый человек должен понимать, к чему это его приведёт в итоге. Даже если речь идёт про хобби.

И действительно, возможность управления техникой с вашего смартфона уже давно перестала восприниматься, как нечто неординарное.

Сейчас в большинстве телевизоров, холодильников и даже пылесосов, которые приобретаются средним классом, есть возможность передачи данных на смартфон.

Такое решение позволяет значительно упростить жизнь обывателя, ведь для того же телевизора нет необходимости постоянно покупать батарейки в пульт и искать его, если потеряется. Мы всё ближе к заветным умным домам, но некоторые предпочитают не покупать подобную технику, а самостоятельно её сконструировать.

В таком случае, связку Андроид Ардуино стоит расценивать в двух вариациях:

  1. Удалённое управление каким-либо устройством с помощью смартфона. Ещё его называют связью смартфон-МК. Всё та же техника, например, раздвижные жалюзи или освещение в комнате, которое будет выключаться по одному клику. Если вы захотите сделать последнее, то даже нет необходимости менять проводку или докупать специальные смарт-лампы, которые могут выгореть спустя месяц. Достаточно приобрести небольшой микроконтроллер Ардуино, модуль связи по беспровобному интернету или блютуз и изоленту. После чего достаточно будет спаять простейшую схему, которая замыкается в случае, если подаётся сигнал на МК.
    Сигнал этот будет подаваться с вашего телефона, замыкать контакты, и свет начнет гореть. Чтобы не было проблем и для дополнительной безопасности вашего жилища, можно написать скрипт, способный автоматически размыкать цепь, если устройство управления удаляется из поля видимости. Обычные выключатели всё так же будут работать, но только, когда цепь замкнута.
  2. Передача данных для информирования или связь МК-Смартфон. Здесь вы уже не управляете какой-то техникой, а скорее наоборот, различная техника позволяет получить определённые данные на ваш смартфон. Первое, что приходит на ум и простейшее применение, – датчик движения. Данный модуль имеется в стандартных датчиках для МК Ардуино, купить его не составит проблем, как и вмонтировать в проход. Затем останется написать код, подобие которого уже есть на многих англоязычных форумах, отправляющий СМСку или сообщение в социальных сетях, а также специальной утилите, если кто-то пересечет инфракрасный луч.
    Можно создать и более сложные и автоматизированные системы, которые будут передавать не только медиа-информацию о вашей квартире, но и сообщать, если в домашней оранжерее созреют овощи или фрукты. Всё зависит исключительно от фантазии самого инженера, но основа технологии всё та же – передача данных с одного устройства на другое.

Вот вы выбрали подходящий проект и взялись за его реализацию. Модули и МК уже заказаны, а пока они идут, можно заняться и разработкой ПО. Ведь голый Андроид не взаимодействует с Ардуино при помощи магии.

Разрабатывать утилиту мы будем не с нуля, ведь это не базис по программирования на java.

Проще всего воспользоваться готовыми движками и средами с пользовательским интерфейсом, где вам, буквально, останется дописать 1-2 строчки кода, для расположенной кнопки, чтобы та заработала.

Естественно, подобный подход значительно ограничивает функционал конечного продукта и неизбежно ущемляет творческий подход, но будет полезен для тех, кто хочет быстро реализовать простой проект без лишних проблем.

Для начала рассмотрим три базовых файла, которые вы встретите при проектировании программы:

  1. MainActivity.java – это весь код приложения на одноимённом языке, все функции и методы, которые вы записываете, сохраняются сюда.
  2. Activity_main.xml – макет, как несложно догадаться из расширения файла. Сюда сохраняется расположение кнопок, текста и прочих интерактивных компонентов, которые затем оживляются уже в коде.
  3. AndroidManifest.xml – этот файл также относится к макетам, но немного в другой сфере. Он определяет основные параметры для запуска приложения и разрешения, которые тому будут необходимы. В нашем случае это необходимость включить Bluetooth, ведь через него мы будем связываться с МК. Если вы делаете датчик, который должен отсылать информацию на большое расстояние, то, соответственно, необходимо включить и проверить работу беспроводного или мобильного интернета.

Основы приема-передачи данных

Чтобы понимать, как ваш будущий проект вообще будет работать, стоило бы изучить базовую физику электромагнитных полей. Но чтобы не перегружать лишней информацией, достаточно усвоить, что на сегодняшний день передача данных происходит тремя основными путями:

  1. Через usb-кабель, что подходит далеко не везде, но хороший вариант, дабы настроить проект.
  2. Через блютуз и смежные протоколы, например, в последнее время стало популярным использовать NTFS для управления умными устройствами. Но, так как мы говорим о проекте на МК Ардуино, то остановимся именно на блютуз.
  3. Через беспроводной интернет. Здесь ничего нового, по сути, ваш мобильный или микроконтроллер выступает сервером, принимающим и обрабатывающим полученные данные, а затем производящим вычисления или действия и отправляющим ответ.

Это основные способы передачи и приёма информации, вам остаётся выбрать подходящий. Для проектов, которые не будут использоваться на больших расстояниях, оптимальным вариантом по объемам кода и простоте настройки является блютуз.

Какие компонеты могут потребоваться для взаимодействия

Выше мы уже упоминали, что для проекта на Ардуино, который предполагает использование одного из методов передачи данных на расстоянии, необходимо приобрести дополнительные модули. Опять же, лучшим выбором будет блютуз.

Данный модуль позволяет принимать и отправлять сигналы определённой частоты, которые улавливаются большей частью смартфонов, а соответственно, никаких проблем не должно возникнуть.

Вы можете выбрать как одно из устройств, представленных в основной линейке Ардуино, так и китайские аналоги, что будет значительно дешевле.

Один из модулей, который можно взять – это Bluetooth Bee, который можно купить во многих магазинах, от DFRobot.

Всё зависит от конкретной системы и необходимой в ней «Пропускной способности». Ведь если это будет камера видеонаблюдения, то поток данных должен передаваться непрерывно и в большом количестве. А для простого датчика движения достаточно самого дешевого вай-фай модуля. Так же и с автоматизированными устройствами для умного дома.

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

Настройка соединения

Итак, вот вы создали и уже установили на смартфон приложение или его готовый аналог для управления вашим микроконтроллером с Ардуино, далее необходимо:

  1. Включить сам блютуз модуль в системе, запитав его от сети или аккумулятора.
  2. Запустить приложение на телефоне и найти нужное устройство.
  3. Подсоединиться к блютуз модулю с помощью дефоултного пароля или того, что вы задали при перепрошивке Ардуино.
  4. Отдать первые команды и проследить, как на них отреагирует система.

Источник: https://ArduinoPlus.ru/android-arduino/

Connect Arduino to Android through USB

This tutorial will show you how to connect your Android to an Arduino through USB and send data in both directions.

Prerequisites

  1. Android device
  2. Arduino (theoritically from any type, but I'll be using Arduino Leonardo)
  3. USB OTG (On-The-Go)
  4. Standard USB charger of your phone

Wiring must be done this way :

Phone ↔ OTG ↔ USB ↔ Arduino

Android Side

I created a short library to establish the communication, you can take a look at the github page.

First you need to create an android studio project and open your module build.gradle file. Add this line to it :

compile 'me.aflak.libraries:arduino:1.3'

At the time I'm writing, current version is 1.3, but if you go on the github page, a small blue badge indicates the last version of the library.

Complete your project build.gradle file as follows :

        maven { url “https://jitpack.io” }

We are ready to go, here is a quick description of the library :

  • Constructor :
    Arduino arduino = new Arduino(Context)
  • There is a listener which you can set this way :
    arduino.setArduinoListener(new ArduinoListener(…))

    and which implements the following methods :

    onArduinoAttached(UsbDevice device) // arduino plugged in. Here you should call arduino.open(device)onArduinoDetached() // arduino plugged outonArduinoMessage(byte[] bytes) // arduino sent a message through Serial.print()onArduinoOpened() // connection with arduino opened
  • Send messages with :
    String msg = “Hello World!”;arduino.send(msg.getBytes());

Here is a complete example :

public class MainActivity extends Activity implements ArduinoListener {    private TextView textView;    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        textView = (TextView) findViewById(R.id.textView);        arduino = new Arduino(this);    protected void onStart() {        arduino.setArduinoListener(this);    protected void onDestroy() {        arduino.unsetArduinoListener();    public void onArduinoAttached(UsbDevice device) {        display(“Arduino attached!”);    public void onArduinoDetached() {        display(“Arduino detached”);    public void onArduinoMessage(byte[] bytes) {        display(“Received: “+new String(bytes));    public void onArduinoOpened() {        String str = “Hello World !”;        arduino.send(str.getBytes());    public void display(final String message){        runOnUiThread(new Runnable() {                textView.append(message+”
“);

Arduino Side

Of course the code above will work if the Arduino is programmed to answer. Sketch :

Arduino will send back every character it receives.

That's it! I hope it will help!

PS: Recently I made an app for Android so you can communicate with Arduino using your phone.

Источник: https://causeyourestuck.io/2017/05/24/connect-android-arduino-usb/

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}