Как подключить ардуино к телефону

Платы Arduino и подобные микроконтроллеры делают творчество более доступным, чем когда либо, пишут MUD. Вне зависимости от целей использования – для автоматизации вашего дома или контроля светодиодных лент, или даже для защиты вашей собственности, эти удивительные маленькие технические устройства являются сердцевиной большинства электронных девайсов формата «сделай сам».

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

Данная статья дает краткое описание шести способов соединения вашего устройства на платформе Android с любой совместимой платой Arduino.

1. ArduinoDroid позволяет создавать скетчи

Первое устройство в нашем списке — ArduinoDroid. Это приложение работает через USB On The Go (OTG), соединяющее ваше мобильное устройство с Arduino через USB кабель. Одно из преимуществ USB кабеля – это отсутствие необходимости соединения с интернетом или Bluetooth для функционирования устройства.

Приложение является полнофункциональным IDE, которое предоставляет пользователю возможность написания кода на смартфоне, сделать загрузку ранее написанных скетчей, которые хранятся в Dropbox или Google drive и затем начать процесс компиляции.

Преимущества использования приложения ArduinoDroid очевидны. Наличие под рукой IDE позволяет оперативно вносить изменения в поля, а процесс прикрепления устройства  Android является менее сложным и трудоемким, чем попытки сбалансировать громоздкий ноутбук на руках!

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

С другой стороны, наличие ArduinoDroid является недорогим способом обучения основам Arduino, поскольку клон платы Arduino и USB On The Go стоят несколько долларов. Для тех, кому редко доступен компьютер, приложение ArduinoDroid является отличной альтернативой!

2. Arduino Bluetooth Controller

Следующая программа в нашем списке – удачно названный Контроллер Arduino  Bluetooth. Это приложение имеет большую значимость относительно триггеров на изменения в загруженных скетчах, и меньшую значимость для программирования Arduino. Контроллер Arduino по Bluetooth посылает данные на вашу плату по Bluetooth, что дает вам возможность послать серийные данные нажатием кнопки. Вам потребуется модуль Bluetooth для вашей платы, хотя модуль HC-06 широко используется и доступен всего лишь за $3.

Заслуживает упоминания тот факт, что программа загружается на английском языке, хотя на картинках Play Store указан итальянский язык!

3. Приложение Blynk для разработки проектов

Приложение Blynk является отличной разработкой для создания проектов. Гибкость и простота приложения обеспечивают интуитивный подход к триггеру событий на вашей плате. Работа с Blynk требует наличия соединения с интернетом, поскольку приложение использует свой собственный сервер. Вы можете использовать либо Wi-Fi, либо мобильные данные для обеспечения доступа к приложению Blynk, и эта возможность отлично подходит для смартфонов.

Одно из самых сильных мест приложения – это вариативность подключений к устройству. При наличии поддержки практически всех разработческих плат, вы можете соединиться с сервером на беспроводной основе, или используя ethernet и даже компьютер через USB. Сервис отлично документирован, а его интуитивное приложение обеспечивает простоту интеграции кастомизированного контроля над вашим проектом. Библиотека Blynk для Arduino IDE следит за всеми коммуникациями.

Если вы предпочитаете включать вашу кофемашину с использованием смартфона до того, как встали с постели рано утром, это приложение, действительно, для вас!

Blynk является не единственным сервисом в этой категории. Стоит обратить внимание и на такой исключительно кастомизированный сервис как Thinger.io и практически безлимитный, хотя и чрезвычайно трудный OpenHAB. Из этих трех сервисов Blynk является самым быстрым при запуске и работе, хотя в долгосрочной перспективе изучение OpenHAB является отличной идеей.

4. Коммуникация с нуля

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

Проблема обеспечения контроля над пакетом приложений решается просто через открытие USB связи и взаимообратную передачу серийных данных между приложениями и платой Arduino. Этот вариант обеспечения контроля является одним из лучших для знакомства с Android Studio и созданием приложений в целом.

Следует заметить, что при наличии методов и способов создания приложений для устройств на платформе Android без кода, заслуживает внимание и изучение основ кодирования программного обеспечения на Java.

5. Превратить ваш Arduino в сервер

Альтернативным способом обеспечения коммуникации с вашей платой является превращение ее в крошечный сервер. Ключевое преимущество такой трансформации платы в сервер является появление возможности коммуникации с платами с любого устройства, которое может осуществлять навигацию по IP адресу или отправлять веб-запрос. Это потребует прикрепления Ethernet shield к вашей плате к домашней сети.

Если у вас нет Ethernet shield, то аналогичный эффект может быть достигнут через Wi-Fi shield или через плату, соединенную с Wi-Fi, подобно NodeMCU.

Если код node.js является вашим джемом (jam), есть смысл взглянуть на проект arduino-android github. Еще раз повторим, что приложения для Android разработаны на основе открытого кода, и все, что необходимо сделать вам — это установить сервер node.js на выбранной вами Arduino плате.

6. Инфракрасный контроль

Если вы в поиске универсального инструмента коммуникации с вашим Arduino или вам хотелось бы сыграть роль легендарного секретного агента Макгайвер, то снимите инфракрасный приемник (ИТ) с вашей старой стереоустановки или VHS плеера и используете его для коммуникации с вашей Arduino платой!

Этот способ коммуникации потребует наличия на вашем устройстве Android  инфракрасного бластера. Эта специфичный метод коммуникации доступен для многих приложений, хотя из их числа Mi Remote controller является бесплатным и функционирует со многими другими домашними девайсами.

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

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


03.05.2018 в рубрике Блог

Добавлено 28 ноября 2016 в 02:00

Хотите послать текстовое сообщение с вашего смартфона с ОС Android на свою плату Arduino? В этой статье написано, как это сделать!

Взаимодействие с Arduino через Android

Что потребуется

  • смартфон на Android с поддержкой режима USB хоста (т.е. поддержка OTG) – большинство устройств, работающих с Android 3.1 и выше, поддерживают этот режим. Проверьте свой телефон с помощью USB Host Diagnostics App из Play Store;
  • Arduino – любая версия. Я буду использовать Uno R3;
  • USB кабель для Arduino;
  • USB OTG кабель – он необходим вам, чтобы подключить USB кабель Arduino к порту micro-USB телефона;
  • Android Studio – вам необходимо установить его. Это довольно просто сделать. Android Studio делает разработку приложений проще, благодаря своим предположениям и генерации кода. Это одна из лучших IDE. Вы также можете использовать эту статью в качестве руководства по установке Android IDE.

Основные компоненты приложения для Android

В Android приложении есть три основных файла:

MainActivity.java
Здесь находится выполняемый код на Java, который управляет тем, как будет функционировать приложение.
activity_main.xml
Содержит макет приложения, то есть, компоненты: кнопки, компоненты отображения текста и т.д.
AndroidManifest.xml
Здесь вы определяете, когда приложение должно запускаться, в какие права ему нужны, и к какому аппаратному обеспечению ему необходимо получить доступ.

Еще есть множество других файлов, но все они связаны друг с другом с помощью этих трех.

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

Макет

Макет Android приложения для взаимодействия с Arduino

Макет Android приложения для взаимодействия с Arduino

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

Как вы можете видеть, он содержит виджет EditText для получения данных от пользователя, кнопки для запуска соединения, передачи данных, завершения соединения и очистки TextView. Полученные данные отображаются в TextView (пустое пространство под кнопками).

Вот часть XML кода. Поскольку код для кнопок похож, здесь он не приводится. Полный код можно скачать по ссылке в конце статьи.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity">

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/editText"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Begin"
        android:id="@+id/buttonStart"
        android:layout_below="@+id/editText"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:onClick="onClickStart"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textView"
        android:layout_below="@+id/buttonSend"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignRight="@+id/editText"
        android:layout_alignEnd="@+id/editText"
        android:layout_alignParentBottom="true" />

</RelativeLayout>

Я использовал здесь RelativeLayout, а это означает, что каждый виджет расположен относительно виджетов вокруг него. Макет может быть легко воссоздан на вкладке Design Tab, где вы можете перетащить виджеты туда, куда хотите. Нам необходимо описать, что будет происходить при нажатии на кнопку. Для этого используется метод onClick. Укажите имя метода в XML коде для кнопки. Для этого добавьте строку:

android:onClick="onClickMethod"

Теперь наведите курсор мыши на эту строку, слева должно будет появиться предупреждение, похожее на это:

Предупреждение в Android Studio

Предупреждение в Android Studio

Нажмите на варианте «Создать onClick…». Это автоматически добавит код метода onClick в MainActivity.java. Вам необходимо выполнить это для каждой кнопки.

Библиотека USB Serial

Настройка последовательного соединения в Android довольно трудоемка, так как требует от вас ручной настройки множества вещей, поэтому я нашел несколько библиотек, которые делают всё это автоматически. Я протестировал несколько из них и, наконец, остановился на библиотеке UsbSerial от Github пользователя felHR85. Среди подобных библиотек, что я нашел, она единственная до сих пор обновляется. Ее довольно легко настроить и использовать. Чтобы добавить библиотеку в свой проект, скачайте последнюю версию JAR файла на Github. Поместите его в подкаталог libs в каталоге вашего проекта. Затем в файловом проводнике в Android Studio кликните правой кнопкой мыши на JAR файле и выберите «Добавить как библиотеку» (Add as Library). Вот и всё!

Алгоритм выполнения программы

Алгоритм выполнения Android программы для взаимодействия с Arduino

Алгоритм выполнения Android программы для взаимодействия с Arduino

Это краткий план того, как мы будем действовать. Каждая активность имеет метод onCreate(), который запускается при создании активности. Какой бы код вы ни хотели запустить в начале, он должен быть помещен внутрь этого метода. Обратите внимание, что чтение из устройства является асинхронным, то есть оно будет работать в фоновом режиме. Это делается для того, чтобы данные были получены как можно скорее.

Открытие соединения

Во-первых, давайте определим метод onClick для кнопки Begin. При нажатии необходимо выполнить поиск всех подключенных устройств, а затем проверить, совпадает ли VendorID подключенного устройства (ID поставщика) с VendorID Arduino. Если совпадение найдено, то у пользователя должно быть запрошено разрешение. Каждое ведомое USB устройство имеет ID поставщика (Vendor ID) и ID продукта (Product ID), которые могут быть использованы для определения того, какие драйвера должны использоваться для этого устройства. Vendor ID для любой платы Arduino равен 0x2341 или 9025.

public void onClickStart(View view) {

    HashMap usbDevices = usbManager.getDeviceList();
    if (!usbDevices.isEmpty()) {
        boolean keep = true;
        for (Map.Entry entry : usbDevices.entrySet()) {
            device = entry.getValue();
            int deviceVID = device.getVendorId();
            if (deviceVID == 0x2341)   //Arduino Vendor ID
            {
                PendingIntent pi = PendingIntent.getBroadcast(this, 0, 
                new Intent(ACTION_USB_PERMISSION), 0);
                usbManager.requestPermission(device, pi);
                keep = false;
            } else {
                connection = null;
                device = null;
            }

            if (!keep)
                break;
        }
    }
}

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

// Приемник широковещательных сообщений для автоматического запуска и закрытия последовательного соединения.
private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(ACTION_USB_PERMISSION)) {
            boolean granted = 
                intent.getExtras().getBoolean(UsbManager.EXTRA_PERMISSION_GRANTED);
            if (granted) {
                connection = usbManager.openDevice(device);
                serialPort = UsbSerialDevice.createUsbSerialDevice(device, connection);
                if (serialPort != null) {
                    if (serialPort.open()) { //Установить параметры последовательного соедниения.
                        setUiEnabled(true);  //Включить кнопки в UI.
                        serialPort.setBaudRate(9600);
                        serialPort.setDataBits(UsbSerialInterface.DATA_BITS_8);
                        serialPort.setStopBits(UsbSerialInterface.STOP_BITS_1);
                        serialPort.setParity(UsbSerialInterface.PARITY_NONE);
                        serialPort.setFlowControl(UsbSerialInterface.FLOW_CONTROL_OFF);
                        serialPort.read(mCallback); //
                        tvAppend(textView,"Serial Connection Opened!n");

                    } else {
                        Log.d("SERIAL", "PORT NOT OPEN");
                    }
                } else {
                    Log.d("SERIAL", "PORT IS NULL");
                }
            } else {
                Log.d("SERIAL", "PERM NOT GRANTED");
            }
        } else if (intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) {
            onClickStart(startButton);
        } else if (intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_DETACHED)) {
            onClickStop(stopButton);
        }
    };
};

Если первое условие IF выполняется, и если пользователь дал разрешение, то начать соединение с устройством, у которого Vendor ID совпадает с необходимым нам Vendor ID. Кроме того, если принято широковещательное сообщение о подключении или отключении устройства, вручную вызывать методы onClick для кнопок Start и Stop. SerialPort определяется с использованием устройства и соединения в качестве аргументов. В случае успеха открыть SerialPort и установить соответствующие параметры. Значения параметров для Arduino Uno равны: 8 бит данных, 1 стоповый бит, бита четности нет, управление потоком выключено. Скорость передачи данных может быть 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 или 115200 бит/с, но мы будем использовать стандартные 9600 бит/с.

Прием данных от устройства

Во фрагменте кода выше обратите внимание на строку, содержащую serialPort.read(mCallback). Здесь функции read передается ссылка на объект Callback, который будет автоматически срабатывать при обнаружении входящих данных.

UsbSerialInterface.UsbReadCallback mCallback = new UsbSerialInterface.UsbReadCallback() { 
    // Определение метода обратного вызова, который вызывается при приеме данных.
    @Override
    public void onReceivedData(byte[] arg0) {
        String data = null;
        try {
            data = new String(arg0, "UTF-8");
            data.concat("/n");
            tvAppend(textView, data);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }
};

Полученные данные будут в форме необработанных байтов. Нам придется перекодировать их в читаемый формат, например, UTF-8. Затем они добавляются в TextView с помощью специального метода tvAppend(). Это делается так потому, что любые изменения в пользовательском интерфейсе могут выполняться только в потоке пользовательского интерфейса. Так как данный Callback будет запущен, как фоновый поток, то он не может напрямую повлиять на пользовательский интерфейс.

private void tvAppend(TextView tv, CharSequence text) { 
    final TextView ftv = tv; 
    final CharSequence ftext = text; 

    runOnUiThread(new Runnable() { 
        @Override public void run() { 
            ftv.append(ftext); 
        } 
    }); 

} 

Передача данных на устройство

Передача данных относительно проста по сравнению с чтением данных с устройства. Это простой вызов функции с байтами данных, которые необходимо передать, в качестве аргумента. Это будет реализовано в методе onClick кнопки Send.

serialPort.write(string.getBytes());

Закрытие соединения

Чтобы закрыть соединение, просто закройте последовательный порт.

serialPort.close();

Манифест приложения

Манифест объявляет, какие дополнительные разрешения могут потребоваться приложению. Единственное необходимое нам разрешение – это разрешение сделать телефон USB хостом. Добавьте следующую строку в манифест:

<uses-feature android:name="android.hardware.usb.host" />

Приложение можно заставить запускаться автоматически, добавив фильтр интентов в главную активность MainActivity. Этот фильтр интентов будет срабатывать при подключении любого нового устройства. Вид устройства может быть указан явно с помощью ID поставщика (Vendor ID) и/или ID продукта (Product ID) в XML файле.

<?xml version="1.0" encoding="utf-8"?> 
<activity
    android:name=".MainActivity"
    android:label="@string/app_name" >
    
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    
    <intent-filter>
        <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
    </intent-filter>

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

Обратите внимание на строку «android:resource="@xml/device_filter«. Она говорит компилятору, что он может найти свойства устройства в файле с именем device_filter в каталоге src/main/res/xml, поэтому создайте подкаталог «xml» в каталоге src/main/res и поместите в него файл со следующим содержанием:

<resources>
    <usb-device vendor-id="9025" />
    <!-- Vendor ID для Arduino -->
</resources>

Тестирование приложения

Соберите приложение и запустите его на своем смартфоне. Теперь запустите Arduino IDE и настройте Arduino для простого эхо всего, что плата будет принимать через последовательный порт. Вот очень простой код, помогающий сделать это:

void setup()  
{  
  Serial.begin(9600);  
}  

void loop()  
{  
  char c;
  if(Serial.available())  
  {  
    c = Serial.read();  
    Serial.print(c);  
  }  
}  

Теперь подключите Arduino к microUSB порту телефона, используя OTG кабель. Приложение должно запуститься автоматически. Попробуйте послать какой-нибудь текст, и те же данные будут возвращены обратно!

Тестирование Android приложения для взаимодействия с Arduino

Тестирование Android приложения для взаимодействия с Arduino

Заключение

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

Теги

AndroidArduinoOTGUSBПоследовательная связь

Не так давно Google открыл API для работы Android устройств с USB. Сегодня пришло время пощупать что же это такое и узнать какие возможности нам открываются.

Итак, у нас имеется Arduino Mega 2560, USB Host Shield и HTC Desire с прошивкой cyanogen 7.1.0 RC1 (Android 2.3.4). На всякий случай напомню, что все что будет описываться дальше — работает только начиная с Android 2.3.4 для телефонов и Android 3.1 для планшетов.

Тут стоит отметить что данный USB Host Shield не совсем удачный, особенно в сочетании с Arduino Mega 2560. Первая проблема заключалась в том что данная плата расширения сделана для Arduino UNO, а она отличается от Mega положениями контактов SPI, поэтому пришлось кидать перемычки (см. фото). Второй проблемой, хотя и вполне ожидаемой, стала потребность во внешнем источнике питания для работы этой платы расширения. Более удачной считается USB Host Shield 2.0 от Circuits@Home, но она и дороже.


Плата с перекинутыми SPI контактами

Настройка Arduino ПО

1. Если еще не установлено, то скачать и установить ПО для Arduino.
2. Скачать и распаковать пакет ADK (содержит DemoKit приложение). Должны появится папки app, firmware, и hardware.
3. Скачать библиотеку CapSense
4. Скопировать firmware/arduino_libs/AndroidAccessory и firmware/arduino_libs/USB_Host_Shield в <arduino_installation_root>/libraries/.
5. Создать директорию CapSense в <arduino_installation_root>/libraries/ и скопировать в нее CapSense.cpp и CapSense.h из архива CapSense.

Загрузка прошивки

Google любезно предоставляет свой DemoKit скетч для Arduino. Все что нужно — это открыть его из firmware/demokit/demokit.pde, скомпилировать и залить на плату.

Тестовое Android приложение

В DemoKit пакете также находятся исходники Android приложения для демонстрации возможностей. Google предлагает нам самостоятельно создать Android проект и собрать это приложение. Для начала нам надо будет установить API Level 10. Дальше все просто — создаем Android проект и указываем путь к папке app, в Build Target указываем Google APIs (Platform 2.3.3, API Level 10). Собираем приложение и устанавливаем на телефон. Кто не хочет возится со сборкой — может скачать готовый APK.

Запуск

Просто подключаем наш телефон к USB Host Shield. Если мы все сделали правильно, то на экране появится запрос запуска DemoKit приложения.

Само приложение содержит две вкладки — In (кнопки, джойстик и сенсоры) и Out (светодиоды, реле и сервоприводы).

Я решил что для демонстрации вполне достаточно пары светодиодов и кнопки. Как это все чудо работает можно пронаблюдать на видео.

Немного кода

В рассматриваемом примере сообщения, передающиеся по USB, состоят из трех байтов:
1-й байт определяет команду или группу устройств, например светодиоды — 0x2
2-й байт указывает на конкретное устройство, например зеленый светодиод — 0x1
3-й байт содержит значение, передаваемое устройству, например максимальная яркость — 0xff

Arduino

...
/* инициализация */
AndroidAccessory acc("Google, Inc.",
                     "DemoKit",
                     "DemoKit Arduino Board",
                     "1.0",
                     "http://www.android.com",
                     "0000000012345678");
void setup()
{
    ....
    acc.powerOn();
}

void loop()
{
    byte msg[3];
    /* проверка подключения */
    if (acc.isConnected()) {
        /* получение сообщения от Android устройства */
        int len = acc.read(msg, sizeof(msg), 1);
        if (len > 0) {
            /* сообщение для светодиодов */
            if (msg[0] == 0x2) {
                if (msg[1] == 0x0)
                    analogWrite(LED3_RED, msg[2]);
                else if (msg[1] == 0x1)
                    analogWrite(LED3_GREEN, msg[2]);
                else if (msg[1] == 0x2)
                    analogWrite(LED3_BLUE, msg[2]);
            }
        }

        msg[0] = 0x1;

        b = digitalRead(BUTTON1);
        if (b != b1) {
            msg[1] = 0;
            msg[2] = b ? 1 : 0;
            /* отправка состояния кнопки */
            acc.write(msg, 3);
            b1 = b;
        }
        
    }
}

Android

import com.android.future.usb.UsbAccessory;
import com.android.future.usb.UsbManager;
...
public class DemoKitActivity extends Activity implements Runnable {
    private UsbManager mUsbManager;
    UsbAccessory mAccessory;
    FileInputStream mInputStream;
    FileOutputStream mOutputStream;

    ...

    private void openAccessory(UsbAccessory accessory) {
        mFileDescriptor = mUsbManager.openAccessory(accessory); 
        if (mFileDescriptor != null) {
            mAccessory = accessory;
            FileDescriptor fd = mFileDescriptor.getFileDescriptor();
            mInputStream = new FileInputStream(fd);
            mOutputStream = new FileOutputStream(fd); 
            Thread thread = new Thread(null, this, "AccessoryThread");
            thread.start();
        }
    }

    public void run() {
        int ret = 0; 
        byte[] buffer = new byte[16384]; 
        int i;

        while (ret >= 0) { 
            // получение входящих сообщений
            ret = mInputStream.read(buffer); 

            i = 0;
            while (i < ret) {
                int len = ret - i; 
                switch (buffer[i]) {
                    case 0x1: // сообщение от кнопки
                        if (len >= 3) {
                            Message m = Message.obtain(mHandler, MESSAGE_SWITCH); 
                            m.obj = new SwitchMsg(buffer[i + 1], buffer[i + 2]);
                            mHandler.sendMessage(m);
                        }
                        i += 3;
                        break; 
                }
            }
        }
    }

    // пример использования - включить красный светодиод на полную яркость:
    // mActivity.sendCommand((byte)2, (byte)0, (byte)255)
    public void sendCommand(byte command, byte target, int value) {
        byte[] buffer = new byte[3];
        if (value > 255)
            value = 255;

        buffer[0] = command;
        buffer[1] = target;
        buffer[2] = (byte) value;
        if (mOutputStream != null && buffer[1] != -1) {
            try {
                mOutputStream.write(buffer);
            } catch (IOException e) {
                ...
            }
        }
    } 
}

Выводы

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

Также нельзя забывать о том, что Android устройство для Arduino может выполнять роль платы расширения, в которой есть GPS, Bluetooth, WiFi, акселерометр и многое другое.

Ссылки

1. Android USB Accessory
2. Android Open Accessory Development Kit

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

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

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

Содержание

  • Где можно применить связь Андроида с Ардуино
  • Приложения на Андроид для взаимодействия с Ардуино
  • Основы приема-передачи данных
  • Какие компонеты могут потребоваться для взаимодействия
  • Настройка соединения
  • Простейший пример

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

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

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

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

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

Здесь стоит сказать, что приложений под Ардуино в Google Play много, в следующем материале мы покажем 7 из них.

Простейший пример

Чтобы вы понимали, как примерно должен функционировать готовый проект, приведём пример с помощью всё той же надстройки на ваш светильник.

Самый простой урок по шагам смотрите по ссылке — см. Управление устройствами со смартфона для чайников. Логика по шагам такая:

  1. Вы подсоединяетесь к системе через смартфон.
  2. Нажимаете одну кнопку, и цепь размыкается или замыкается.
  3. Появляется или исчезает свет.
  4. Нажимаете кнопку на смартфоне ещё раз, и происходит обратный эффект.

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

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

19 марта 2018 в 15:03
| Обновлено 7 ноября 2020 в 01:21 (редакция)
Опубликовано:

Статьи, Android, Arduino

В данной статье будет подробно расписано создание небольшого приложения для мобильной операционной системы Android и скетча для Arduino. На Arduino Uno будет стоять Wireless Shield с Bluetooth-модулем. Приложение будет подключаться к Bluetooth-модулю и посылать некую команду. В свою очередь скетч по этой команде будет зажигать или гасить один из подключенных к Arduino светодиодов.

Нам понадобится

  1. Телефон на базе ОС Android

Создание приложения для Android

Заготовка

Разработка для ОС Android ведется в среде разработки ADT, Android Development Tools. Которую можно скачать с портала Google для разработчиков.
После скачивания и установке ADT, смело его запускаем. Однако, еще рано приступать к разработке приложения. Надо еще скачать Android SDK нужной версии. Для этого необходимо открыть Android SDK Manager «Window → Android SDK Manager». В списке необходимо выбрать нужный нам SDK, в нашем случае Android 2.3.3 (API 10). Если телефона нет, то выбирайте 2.3.3 или выше; а если есть — версию, совпадающую с версией ОС телефона. Затем нажимаем на кнопку «Install Packages», чтобы запустить процесс установки.

После завершения скачивания и установки мы начинаем создавать приложение. Выбираем «File → New → Android Application Project». Заполним содержимое окна так, как показано на рисунке.

  • Application Name — то имя приложения, которое будет показываться в Google Play Store. Но выкладывать приложение мы не собираемся, поэтому имя нам не особо важно.

  • Project Name — имя проекта в ADT.

  • Package Name — идентификатор приложения. Он должен быть составлен следующим образом: название Вашего сайта задом наперед, плюс какое-либо название приложения.

В выпадающих списках «Minimum Required SDK», «Target SDK», «Compile With» выбираем ту версию, которую мы скачали ранее.
Более новые версии SDK поддерживают графические темы для приложений, а старые нет. Поэтому в поле «Theme» выбираем «None».
Нажимаем «Next».

Снимаем галочку с «Create custom launcher icon»: в рамках данной статьи не будем заострять внимание на создании иконки приложения. Нажимаем «Next».

В появившемся окне можно выбрать вид «Activity»: вид того, что будет на экране, когда будет запущено приложение. Выбираем «Blank activity», что означает, что мы хотим начать всё с чистого листа. Нажимаем «Next».

В нашем приложении будет всего одно Activity, поэтому в появившемся окне можно ничего не менять. Поэтому просто жмем на «Finish».

Все, наше приложение создано.

Настройка эмулятора

Отладка приложений для Android производится на реальном устройстве или, если такового нет, то на эмуляторе. Сконфигурируем свой.

Для этого запустим «Window → Android Virtual Device Manager». В появившемся окне нажмем «New». Заполняем поля появившейся формы. От них зависит сколько и каких ресурсов будет предоставлять эмулятор «телефону». Выберите разумные значения и нажимайте «ОК».

В окне Android Virtual Device Manager нажимаем кнопку «Start». Это запустит эмулятор. Запуск занимает несколько минут. Так что наберитесь терпения.

В результате вы увидите окно эмулятора подобное этому:

Заполнение Activity

Activity — это то, что отображается на экране телефона после запуска приложения.
На нем у нас будет две кнопки «Зажечь красный светодиод» и «Зажечь синий светодиод». Добавим их. В панели «Package Explorer» открываем res/layout/activity_main.xml. Его вид будет примерно таким же, как на скриншоте.

Перетаскиваем 2 кнопки «ToggleButton» на экранную форму. Переключаемся во вкладку «activity_main.xml» и видим следующий код:

activity_main_aiutogen.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
 
    <ToggleButton
        android:id="@+id/toggleButton1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="ToggleButton" />
 
    <ToggleButton
        android:id="@+id/toggleButton2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/textView1"
        android:layout_alignParentRight="true"
        android:text="ToggleButton" />
 
</RelativeLayout>

Это ни что иное, как наша Activity, которая отображается не в виде графики, а описанная в формате XML.

Сделаем имена компонентов более понятными. Изменим поля android:id следующим образом.

<ToggleButton
        android:id="@+id/toggleRedLed" ...
 
<ToggleButton
        android:id="@+id/toggleGreenLed" ...

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

activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" 
    android:weightSum="2"
    android:orientation="horizontal">
 
    <ToggleButton
        android:id="@+id/toggleRedLed"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:background="#FF0000"
        android:textOff="OFF"
        android:textOn="ON"
        android:textSize="30dp" />
 
    <ToggleButton
        android:id="@+id/toggleGreenLed"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:background="#00FF00"
        android:textOff="OFF"
        android:textSize="30dp"
        android:textOn="ON" />
 
</LinearLayout>

Эти же изменения можно сделать и в графическом режиме, воспользовавшись вкладкой «Outline/Properties».

Пробный запуск

Мы можем запустить только что созданное приложение на эмуляторе. Идем в настройки запуска «Run» → Run Configurations», в левой части нажимаем на «Android Application». Появляется новая конфигурация «New_configuration». В правой части окна выбираем вкладку «Target» и выбираем опцию «Launch on all compatible devices/AVD».

Нажимаем «Apply», а затем «Run». Приложение запустится в эмуляторе.

Можно понажимать кнопки. Но ничего происходить не будет, поскольку обработчики нажатий еще нами не написаны.

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

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

Написание кода для Android

Правка манифеста

Каждое Android-приложение должно сообщить системе о том, какие права необходимо ему предоставить. Перечисление прав идет в так называемом файле манифеста AndroidManifest.xml. В нем мы должны указать тот факт, что хотим использовать Bluetooth в своем приложении.
Для этого достаточно добавить буквально пару строк:

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ru.amperka.arduinobtled"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="10" />
 
    <!-- Разрешаем приложению работать с Bluetooth -->
    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="ru.amperka.arduinobtled.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
 
    </application>
 
</manifest>

Добавляем основной код

Пришла пора вдохнуть жизнь в наше приложение. Открываем файл MainActivity.java (src → ru.amperka.arduinobtled). Изначально он содержит следующий код:

MainActivityAutogen.java
package ru.amperka.arduinobtled;
 
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
 
public class MainActivity extends Activity {
 
        @Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}
 
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
 
}

Дополним код в соответствии с тем, что нам нужно:

  1. Будем включать Bluetooth, если он выключен.

  2. Будем обрабатывать нажатия на кнопки

  3. Будем посылать информацию о том, какая кнопка была нажата.

Передавать на Arduino мы будем один байт с двузначным числом. Первая цифра числа — номер пина, к которому подключен тот или иной светодиод, вторая — состояние светодиода: 1 — включен, 0 — выключен.

Число-команда, рассчитывается очень просто:
Если нажата красная кнопка, то берется число 60 (для красного светодиода мы выбрали 6-й пин Arduino) и к нему прибавляется 1 или 0 в зависимости от того, должен ли сейчас гореть светодиод или нет. Для зеленой кнопки всё аналогично, только вместо 60 берется 70 (поскольку зеленый светодиод подключен к 7 пину).
В итоге, в нашем случае, возможны 4 команды: 60, 61, 70, 71.

Напишем код, который реализует всё сказанное.

MainActivity.java
package ru.amperka.arduinobtled;
 
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
 
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;
import android.widget.ToggleButton;
 
public class MainActivity extends Activity implements View.OnClickListener{
 
    //Экземпляры классов наших кнопок
    ToggleButton redButton;
    ToggleButton greenButton;
 
    //Сокет, с помощью которого мы будем отправлять данные на Arduino
    BluetoothSocket clientSocket;
 
    //Эта функция запускается автоматически при запуске приложения
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        //"Соединям" вид кнопки в окне приложения с реализацией
        redButton = (ToggleButton) findViewById(R.id.toggleRedLed);
        greenButton = (ToggleButton) findViewById(R.id.toggleGreenLed);
 
        //Добавлем "слушатель нажатий" к кнопке
        redButton.setOnClickListener(this);
        greenButton.setOnClickListener(this);
 
        //Включаем bluetooth. Если он уже включен, то ничего не произойдет
        String enableBT = BluetoothAdapter.ACTION_REQUEST_ENABLE;
        startActivityForResult(new Intent(enableBT), 0);
 
        //Мы хотим использовать тот bluetooth-адаптер, который задается по умолчанию
        BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();
 
        //Пытаемся проделать эти действия
        try{
            //Устройство с данным адресом - наш Bluetooth Bee
            //Адрес опредеяется следующим образом: установите соединение
            //между ПК и модулем (пин: 1234), а затем посмотрите в настройках
            //соединения адрес модуля. Скорее всего он будет аналогичным.
            BluetoothDevice device = bluetooth.getRemoteDevice("00:13:02:01:00:09"); 
 
            //Инициируем соединение с устройством
            Method m = device.getClass().getMethod(
                    "createRfcommSocket", new Class[] {int.class});
 
            clientSocket = (BluetoothSocket) m.invoke(device, 1);
            clientSocket.connect();
 
            //В случае появления любых ошибок, выводим в лог сообщение
        } catch (IOException e) {
            Log.d("BLUETOOTH", e.getMessage());
        } catch (SecurityException e) {
            Log.d("BLUETOOTH", e.getMessage());
        } catch (NoSuchMethodException e) {
            Log.d("BLUETOOTH", e.getMessage());
        } catch (IllegalArgumentException e) {
            Log.d("BLUETOOTH", e.getMessage());
        } catch (IllegalAccessException e) {
            Log.d("BLUETOOTH", e.getMessage());
        } catch (InvocationTargetException e) {
            Log.d("BLUETOOTH", e.getMessage());
        }
 
        //Выводим сообщение об успешном подключении
        Toast.makeText(getApplicationContext(), "CONNECTED", Toast.LENGTH_LONG).show();
 
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
 
    //Как раз эта функция и будет вызываться 
 
    @Override
    public void onClick(View v) {
 
        //Пытаемся послать данные
        try {
            //Получаем выходной поток для передачи данных
            OutputStream outStream = clientSocket.getOutputStream();
 
            int value = 0;
 
            //В зависимости от того, какая кнопка была нажата, 
            //изменяем данные для посылки
            if (v == redButton) {
                value = (redButton.isChecked() ? 1 : 0) + 60;
            } else if (v == greenButton) {
                value = (greenButton.isChecked() ? 1 : 0) + 70;
            }
 
            //Пишем данные в выходной поток
            outStream.write(value);
 
        } catch (IOException e) { 
            //Если есть ошибки, выводим их в лог
            Log.d("BLUETOOTH", e.getMessage());
        }
    }
}

Написание скетча

Данные, которые принимает Bluetooth-модуль, приходят через UART (он же Serial-соединение) на скорости 9600 бит/с. Настраивать Bluetooth-модуль нет никакой необходимости: он сразу готов к работе. Поэтому скетч должен уметь следующее:

  1. Принять данные по UART

  2. Зажечь нужный светодиод в зависимости от принятого кода

bluetooth.ino
void setup() {
    //Устанавливаем скорость UART
    Serial.begin(9600); 
 
    //Настраиваем нужные пины на выход
    pinMode(6, OUTPUT);
    pinMode(7, OUTPUT);    
}
 
void loop() {
    //Если данные пришли
    if (Serial.available() > 0) {
 
        //Считываем пришедший байт
        byte incomingByte = Serial.read();
 
        //Получаем номер пина путем целочисленного деления значения принятого байта на 10
        //и нужное нам действие за счет получения остатка от деления на 2:
        //(1 - зажечь, 0 - погасить)
        digitalWrite(incomingByte / 10, incomingByte % 2);
    }
}

Особенности заливки скетча

Для связи Bluetooth-Bee с контроллером используются те же пины (0 и 1), что и для прошивки. Поэтому при программировании контроллера переключатель «SERIAL SELECT» на «Wireless Shield» должен быть установлен в положение «USB», а после прошивки его надо вернуть в положение «MICRO».

Результат

Заключение

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

Вы можете развить мысль и сделать более дружественный интерфейс на Android, управлять с его помощью гораздо более сложными устройствами, публиковать классные приложения в Android Market и ещё много-много всего интересного!

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

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

6 простых способов подключить Arduino к Android Arduino Uno 670

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

1. ArduinoDroid

Первый в нашем списке — ArduinoDroid . Это приложение работает через USB On The Go (OTG), чтобы подключить ваше устройство к Arduino через USB-кабель. Одним из преимуществ USB является то, что для его работы не требуется подключение к Интернету или Bluetooth.

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

6 простых способов подключить Arduino к Android ArduinoDroidPictureLandscape 670

Преимущества использования этого приложения очевидны. Наличие IDE в руках — идеальная вещь для быстрых изменений в этой области. Подключить устройство Android гораздо проще, чем балансировать ноутбук на руке!

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

Это также недорогой способ изучения основ Arduino. , так как клоновая плата Arduino и USB OTG-кабель стоят всего несколько долларов. Идеально подходит для тех, у кого нет частого доступа к компьютеру!

2. Arduino Bluetooth контроллер

Следующим в нашем списке является точно названное приложение Arduino Bluetooth Controller. Это приложение не столько для программирования Arduino на лету, сколько для запуска изменений в загруженном эскизе. Приложение отправляет данные на вашу доску через Bluetooth, что позволяет отправлять последовательные данные нажатием кнопки в приложении. Вам понадобится модуль Bluetooth для вашей платы, хотя модуль HC-06 широко используется и доступен на момент написания всего за 3 доллара .

Чтобы получить отличную информацию о начале работы с этими дешевыми небольшими модулями, посмотрите это видео от Tinkernut Labs:

В приведенном выше видео рекомендуется другое приложение, хотя некоторые пользователи сообщают, что оно не работает на современных смартфонах. Контроллер Bluetooth Arduino, похоже, не страдает от этой проблемы. Стоит отметить, что приложение загружается не на итальянском, а на английском, как показано на картинках Play Store!

3. Блинк

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

Одной из сильных сторон Blynk является ряд способов подключения к устройству. Наряду с поддержкой практически всех плат разработки, вы можете подключиться к серверу по беспроводной сети, используя Ethernet, или даже использовать подключение к компьютеру через USB. Сервис хорошо документирован, а его интуитивно понятное приложение упрощает создание пользовательских элементов управления для вашего проекта. Библиотека Blynk для Arduino IDE отвечает за все коммуникации.

Если вы тот человек, который хочет запустить свою кофемашину со своего телефона до того, как они встают утром, то этот для вас!

Blynk — не единственная служба в этой области, также стоит обратить внимание на сильно настраиваемый Thinger.io и практически безграничный, но ужасно сложный OpenHAB . Из всех трех Blynk, безусловно, быстрее всего запускается и работает, хотя изучает OpenHAB — отличная идея в долгосрочной перспективе.

4. Общение с нуля

Все, что мы рассмотрели до сих пор, использует уже существующие сервисы, чтобы помочь вам подключаться различными способами, но что, если вы хотите получить полный контроль над каждым аспектом приложения Android? Почему бы не сделать это самостоятельно с нуля?

Харихаран Матхаван проведет нас через весь процесс в этом обширном пошаговом руководстве . Созданное здесь приложение предназначено просто для открытия USB-соединения и передачи последовательных данных назад и вперед между приложением и платой Arduino. Это отличный способ познакомиться с Android Studio и сборкой приложений в целом.

Руководство проведет вас через весь код, необходимый для связи с вашим Arduino через USB, предоставляя объяснения на каждом этапе. Последующее руководство о том, как реализовать подключение Bluetooth, также хорошо объяснено.

6 простых способов подключить Arduino к Android bluetooth android DIY комбинированный2 670

Хотя существуют способы создания приложений для Android без кодирования , стоит изучить основы кодирования на Java. Создание собственных приложений — это круто, но, прежде чем вы узнаете об этом, у вас может быть совершенно новая карьера. !

5. Превратите свой Arduino в сервер

Еще один способ связи с вашей платой — превратить ее в крошечный сервер. Преимущество этого заключается в том, что он открывает возможность связи с платой с любого устройства, которое может перейти на IP-адрес или сделать веб-запрос.

Для этого невероятно подробного учебника с сайта startelectronics.org необходим щит Ethernet, чтобы подключить плату к домашней сети. Вот видео этого в действии:

Не получил сетевой щит? Не бойтесь, того же можно достичь с помощью щита Wi-Fi или платы, подключенной к Wi-Fi, например NodeMCU.

Если node.js — это ваш джем, то для вас может иметь смысл взглянуть на проект arduino-android github . Приложение Android снова поставляется с исходным кодом, так что вы можете получить под капотом и возиться с душой. Это довольно просто, но есть все для реализации сервера node.js на плате Arduino по вашему выбору.

Если вам больше нравится Python , у пользователя Instructables metanurb есть учебник по модулю Bluetooth .

6 простых способов подключить Arduino к Android Arduino Android 2

6. Инфракрасный контроль

Ищете настоящий дикий способ поговорить с вашим Arduino? Вы хотите получить полный MacGyver? Затем извлеките инфракрасный (ИК) приемник из старого стерео или VHS-плеера и используйте его, чтобы поговорить с вашей платой Arduino!

Этот метод требует, чтобы на вашем Android-устройстве был установлен встроенный ИК-бластер. Для использования этой функции доступно множество приложений, хотя контроллер Mi Remote бесплатный и работает со многими другими бытовыми устройствами.

6 простых способов подключить Arduino к Android-приложению Mi Ir 670

Как только приложение будет запущено и запущено, вам нужно будет создать простую схему, чтобы «вынюхивать» ИК-сигналы. Это руководство по дистанционному ИК-обучению проведет вас через процесс построения схемы.

Хотя в этом руководстве используется старый пульт дистанционного управления, процесс использования устройства Android с ИК-подсветкой точно такой же, а наличие деталей делает его отличным проектом для начинающих.

Этот метод работает только в пределах прямой видимости. Однако это самый дешевый способ беспроводной связи с вашей платой. Даже если вы не можете очистить детали для этого, ИК-приемник стоит меньше доллара . Для статического устройства, такого как набор светодиодных лент, установленных на потолке, это может быть идеальным решением простой проблемы.

Мы пропустили инструмент?

Это несколько способов освободить Arduino от вашего компьютера, хотя мы уверены, что их гораздо больше. Какой бы метод вы ни использовали, почему бы не реализовать его в классном проекте, таком как спуск затвора DSLR. или светодиодный куб ?

Как вы разговариваете со своей платой Arduino? Вы всегда используете компьютер? Есть ли хитрый способ поговорить с нашими досками, которые мы здесь пропустили? Дайте нам знать в разделе комментариев ниже !

Кредит изображения: almoond / Depositphotos

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

Шаг 1: Материалы и инструменты

Материалы:

Кабель USB-A – USB-B 
Кабель USB-Host (OTG-кабель)
Arduino
1 светодиод (для тестирования)
Android устройство, версия ОС Android 4.0.0+ (или c поддержкой режима host)

Программное обеспечение:

ArduinoDroid или ArduinoCommander, которые можно загрузить из магазина Google Play

Шаг 2: Кабель USB-Host

Кабель USB-Host в основном аналогичен кабелю USB, но в разъеме micro USB установлены другие резисторы. Внутренние резисторы позволяют Android устройству активировать режим USB-Host. В этом режиме вы также можете использовать USB-флешки или другие устройства с поддержкой usb интерфейса. Это очень полезная функция, и теперь можно подключать даже usb-принтер.

Проблема состоит в том, что после подключения USB устройства, оно будет получать питание от ведущего (host) устройства, тем самым разряжая его аккумуляторную батарею.

Шаг 3: Соединения

Этот очень простой шаг и не требует особого внимания. Просто вставьте кабель USB-A – USB-B в USB разъем типа мама Host кабеля. Затем вставьте USB-B разъем в Arduino, а Micro USB в Android устройство.

Шаг 4: Включение Arduino

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

Шаг 5: Приложения

Теперь Arduino уже готов к загрузке кода, но ваше Android устройство пока нет…

Давайте изменим эту ситуацию!

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

Для их загрузки перейдите на сайт Play Store, затем в строке поиска введите «Arduino». Далее щелкните на «Apps», после этого будут отображаться только приложения. Нам нужно два приложения: «ArduinoDroid» и «ArduinoCommander». Установите их, затем запустите «ArduinoDroid». Это приложение должно обновить IDE, на что понадобится некоторое время. Приложение «ArduinoCommander» потребуется далее.

Примечание: Оба приложения использовать одновременно необязательно, просто я хочу показать работу обеих!

Шаг 6: ArduinoCommander, автор программы Антон Смирнов

Ну, что ж, начнем с приложения «ArduinoCommander». Его разработал Антон Смирнов для версии Andorid 2.2 или выше.

https://play.google.com/store/apps/details?id=name…

Данное приложение предназначено для работы с Arduino с помощью Android устройства. С его помощью вы сможете легко изменить состояние выводов (непосредственно установить высокое или низкое состояние), загрузить скетчи или считать показания на аналоговых выводах в режиме осциллографа.

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

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

Ставлю данному приложению 4.0 из 5 звездочек.

Теперь давайте кратко рассмотрим подключение к Arduino.

Шаг 7: Часть 1

Сначала запустим приложение. Далее появится синее окно с 4 опциями. Поскольку нам необходимо подсоединиться через USB интерфейс, щелкните на «USB-Device» (на изображении на немецком языке).

Другие опции включают:
Ethernet
Bluetooth
USB-extras

Шаг 8: Часть 2

Теперь щелкните на «Autodetect». Android устройство начнет автоматический поиск Arduino, затем покажет его на экране. А сейчас выберем наш Arduino (просто щелкнем на нем).

Шаг 9: Часть 3

После выполнения предыдущего шага на экране будет показан наш Arduino. Обычно он отображается в цвете, и вы можете щелкать на выводы, чтобы изменить их режим. Однако у меня выбор режимов не работал, и эту проблему у меня не получилось устранить; возможно, у вас все будет работать без сбоев. Когда вы щелкните в нижнем правом углу, то перейдете в меню, с помощью которого сможете загрузить ваши скетчи с SD-карты. Эта функция работает очень хорошо.

Шаг 10: ArduinoDroid

Теперь перейдем к рассмотрению другого приложения, которое позволяет загружать скетчи в ваш Arduino. Это приложение называется «ArduinoDroid» и работает для версии Android 4.2.2 или выше. Автор этого приложения также Антон Смирнов!

https://play.google.com/store/apps/details?id=name…

Данное приложение представляет собой среду разработки IDE, компилятор и загрузчик для Arduino. Это приложение также использует режим host для загрузки скетчей, которые можно писать прямо в приложении.

После написания кода, его можно скомпилировать, нажав кнопку «Lightning-Button». Для компиляции потребуется некоторое время, но функция работает без сбоев.

После завершения компиляции, нажмите кнопку для загрузки (справа).

Загрузка будет длиться всего несколько секунд.

После этого мой Arduino запустит на выполнение новый код —> Он работает прекрасно!

Для тестирования я использовал «Blink» скетч.

Ниже вы можете посмотреть короткое видео компиляции в приложении и загрузки скетча

Шаг 11: Окончание!

Теперь вы сами убедились, как легко писать, компилировать и загружать скетч в Arduino с помощью Android устройств.

А теперь я хочу выразить особую БЛАГОДАРНОСТЬ Антону Смирнову, который создает такие полезные приложения для ОС Android!

Оригинал статьи

Теги:

Introduction: Arduino From Android Over Bluetooth

As my first instructable, I’d like to show how to connect to an arduino for I/O from an android device quickly and easily.

For the following steps we’ll need:

  • An arduino compatible device
  • An HC-05, HC-06 or similar bluetooth to serial module. Be sure to get one with the breakout board and the pin header to connect to. You can find these from a number of suppliers.
  • A solderless breadboard (you can solder the connections if you want of course, but for the tutorial I’ll be using a breadboard)
  • You’ll also need a 1 kiloohm resistor and a 2 kiloohm resistor. I’m using a 2.2 k resistor because it’s all I had lying around, I think it will be close enough for this purpose.

Step 1: Connect the HC-05

Plug the HC-05 into the breadboard such that you’ll have enough room to make all your connections. We’re going to use the 1 and 2 k resistors to make a voltage divider on the breadboard. That will prevent the 5 V logic levels of the arduino from damaging the 3.3 V HC-05 module.

Step 2: Make the Voltage Divider Step 1

Connect the RX pin of the HC-05 to the GND pin, using the 1k resistor.

Step 3: Making the Voltage Divider Step 2

Connect the RX pin of the HC-05 to another part of the breadboard using the 1k resistor. This is where the TX pin of the Arduino will be connected.

Step 4: Connect the Arduino to the Breadboard

You will have to make the following connections:

  • Arduino RX pin -> HC-05 TX pin
  • Arduino TX pin -> 1 kOhm resistor on the breadboard
  • Arduino 5V pin -> HC-05 VCC pin
  • Arduino GND pin -> HC-05 GND pin

Step 5: Download the BlueDentist Library and ToothFairy Free App

You can download the library I’m going to use here:

BlueDentist Downloads

Download the BlueDentist arduino library and unzip it. You will have a folder that you can copy into your arduino/libraries directory. It if arduino IDE is open, restart it now. BlueDentist should show up for you to import into your sketches now.

Next you will need the app to connect to the arduino using the library you just installed. I put the free version of the app for this tutorial on the google Play Store:

ToothFairy Free

In the free version your interface is limited to 3 widgets, if you decide you want the full version it’s also on the play store: ToothFairy

Step 6: Create an Arduino Sketch

Make a new arduino sketch. I have a «Hello World» sketch I created for this instructable. If you want to just download the file it is at instructable.ino.

#include

BlueDentist *myDent; BDLogField *myLog; BDBTN *myBtn;

void setup() {

myDent = new BlueDentist(9600); //9600 Baud, default for HC-05 change if your module is a different baud rate

myLog = new BDLogField(«log»);//name is log, but this can be anything. Remember widget names must be unique,

//and should be as short as possible. For more details on that read the documentation at avrthing.com/toothfairy

myBtn = new BDBTN(«Hello»);

myDent->add(myLog);

myDent->add(myBtn);

}

void loop() {

if(myBtn->getPresses())

{

myBtn->reset();

myLog->println(«hello world»);

}

myDent->run();

}

Step 7: Upload the Sketch

Depending on your device you may have to disconnect the HC-05 module to upload correctly. Mine worked fine with it still connected, but if you do disconnect it the easiest way is to pull the whole module out of the breadboard, and leave the wires in place.

Step 8: Pair the Bluetooth Module to Your Phone

In Settings->Bluetooth you should see a list of available devices. As long as your HC-05 module is powered, it will show up as HC-05. I changed the name of my module using the AT commands, so my module is showing up as «FREEZERTRON». Select your module to pair the device. It will ask you for a PIN, the default for the HC-05 is 1234.

Step 9: Launch ToothFairy

Launch the ToothFairy app. You will see a screen with two buttons. One says enable bluetooth, that button won’t do anything right now, since in the last step we enabled bluetooth and paired the device. The other button will say «choose device».

Step 10: Select Your Device

After pressing the «Choose Device» button you will see a list of paired bluetooth devices. Select your arduino module.

Step 11: Play With the Hello World Sketch

You will see a button, every time you press it, «Hello world» will print into a text field above the button. Once the text field is 7 lines it will stop getting bigger, and become scrollable.

Now that you can control your projects from your phone, do something cool and post an instructable about it!

Be the First to Share

Recommendations

Introduction: Arduino From Android Over Bluetooth

As my first instructable, I’d like to show how to connect to an arduino for I/O from an android device quickly and easily.

For the following steps we’ll need:

  • An arduino compatible device
  • An HC-05, HC-06 or similar bluetooth to serial module. Be sure to get one with the breakout board and the pin header to connect to. You can find these from a number of suppliers.
  • A solderless breadboard (you can solder the connections if you want of course, but for the tutorial I’ll be using a breadboard)
  • You’ll also need a 1 kiloohm resistor and a 2 kiloohm resistor. I’m using a 2.2 k resistor because it’s all I had lying around, I think it will be close enough for this purpose.

Step 1: Connect the HC-05

Plug the HC-05 into the breadboard such that you’ll have enough room to make all your connections. We’re going to use the 1 and 2 k resistors to make a voltage divider on the breadboard. That will prevent the 5 V logic levels of the arduino from damaging the 3.3 V HC-05 module.

Step 2: Make the Voltage Divider Step 1

Connect the RX pin of the HC-05 to the GND pin, using the 1k resistor.

Step 3: Making the Voltage Divider Step 2

Connect the RX pin of the HC-05 to another part of the breadboard using the 1k resistor. This is where the TX pin of the Arduino will be connected.

Step 4: Connect the Arduino to the Breadboard

You will have to make the following connections:

  • Arduino RX pin -> HC-05 TX pin
  • Arduino TX pin -> 1 kOhm resistor on the breadboard
  • Arduino 5V pin -> HC-05 VCC pin
  • Arduino GND pin -> HC-05 GND pin

Step 5: Download the BlueDentist Library and ToothFairy Free App

You can download the library I’m going to use here:

BlueDentist Downloads

Download the BlueDentist arduino library and unzip it. You will have a folder that you can copy into your arduino/libraries directory. It if arduino IDE is open, restart it now. BlueDentist should show up for you to import into your sketches now.

Next you will need the app to connect to the arduino using the library you just installed. I put the free version of the app for this tutorial on the google Play Store:

ToothFairy Free

In the free version your interface is limited to 3 widgets, if you decide you want the full version it’s also on the play store: ToothFairy

Step 6: Create an Arduino Sketch

Make a new arduino sketch. I have a «Hello World» sketch I created for this instructable. If you want to just download the file it is at instructable.ino.

#include

BlueDentist *myDent; BDLogField *myLog; BDBTN *myBtn;

void setup() {

myDent = new BlueDentist(9600); //9600 Baud, default for HC-05 change if your module is a different baud rate

myLog = new BDLogField(«log»);//name is log, but this can be anything. Remember widget names must be unique,

//and should be as short as possible. For more details on that read the documentation at avrthing.com/toothfairy

myBtn = new BDBTN(«Hello»);

myDent->add(myLog);

myDent->add(myBtn);

}

void loop() {

if(myBtn->getPresses())

{

myBtn->reset();

myLog->println(«hello world»);

}

myDent->run();

}

Step 7: Upload the Sketch

Depending on your device you may have to disconnect the HC-05 module to upload correctly. Mine worked fine with it still connected, but if you do disconnect it the easiest way is to pull the whole module out of the breadboard, and leave the wires in place.

Step 8: Pair the Bluetooth Module to Your Phone

In Settings->Bluetooth you should see a list of available devices. As long as your HC-05 module is powered, it will show up as HC-05. I changed the name of my module using the AT commands, so my module is showing up as «FREEZERTRON». Select your module to pair the device. It will ask you for a PIN, the default for the HC-05 is 1234.

Step 9: Launch ToothFairy

Launch the ToothFairy app. You will see a screen with two buttons. One says enable bluetooth, that button won’t do anything right now, since in the last step we enabled bluetooth and paired the device. The other button will say «choose device».

Step 10: Select Your Device

After pressing the «Choose Device» button you will see a list of paired bluetooth devices. Select your arduino module.

Step 11: Play With the Hello World Sketch

You will see a button, every time you press it, «Hello world» will print into a text field above the button. Once the text field is 7 lines it will stop getting bigger, and become scrollable.

Now that you can control your projects from your phone, do something cool and post an instructable about it!

Be the First to Share

Recommendations

  • Как подключить апл вотч к телефону
  • Как подключить антирадар на телефоне
  • Как подключить антиопределитель номера на мегафоне
  • Как подключить антиопределитель номера на билайне
  • Как подключить антиколлектор на телефон