- Android приложения для Arduino
- Мы запускаем серию статей по связке Ардуино и Андройда скоро на каждое приложение описанное в этой статье появится инструкция и ваши первые проекты))
- Как подружить ваш ардуино с Bluino читайте в следующей статье
- Arduino Bluetooth Control
- Arduino Bluetooth Controller
- Android + Bluetooth + Arduino
Android приложения для Arduino
Мы запускаем серию статей по связке Ардуино и Андройда скоро на каждое приложение описанное в этой статье появится инструкция и ваши первые проекты))
Связка смартфона Andoid и Arduino предоставляет огромные возможности для создания современных проектов, упрощая удаленное программирование, управление и синхронизацию данных. Мобильные приложения на смартфоне дают взаимодействовать с реальным физическим миром из любой точки земли с помощью привычных всем гаджетов. Представляем вам обзор Android приложений для работы с Arduino. Для простоты мы выбрали несколько видов приложений, предназначенных для работы с ардуино: приложения, позволяющие создавать скетчи, справочники и Bluetooth/Wi-fi-контроллеры.
ArduinoDroid – это бесплатное приложение, которое позволяет редактировать, компилировать и загружать эскизы к вашей плате Arduino прямо с телефона или планшета Android. Отличительной чертой этой программы является то, что в нее можно загружать уже готовый запрограммированный код или создавать новый. В случае с неполадками или сбоями программы, открытый код можно всегда отредактировать.
В настоящее время поддерживаются только платы Arduino Uno R3 и платы на базе FTDI (Duemilanove, Diecimila), но планируется поддержка Mega, Due и Nano. Другие функции, которые необходимо реализовать, включают расширенную настраиваемую подсветку синтаксиса, интеллектуальные подсказки кода (автозаполнение) и интеграцию сторонних приложений (руководства, запросы на компиляцию эскизов).
Стоит отметить то, что с помощью этого приложения начинают все осваивать ардуино, к тому же клон-плата Arduino и USB кабель OTG обойдутся всего в пару долларов.
Рейтинг на Google Play: 4.1 из 5
Количество скачиваний: более 500.000
Bluino Loader – Arduino IDE
Bluino Loader – это программное обеспечение для ардино (Arduino IDE), которое позволяет быстро и легко компилировать ваш код для создания файла и загружать его на плату ардуино через USB OTG.
Рейтинг на Google Play: 4.1 из 5
Количество скачиваний: более 50.000
Как подружить ваш ардуино с Bluino читайте в следующей статье
Arduino Bluetooth Control
Приложение ABC – это простое приложение, которое предназначено для того, чтобы контролировать контакты Arduino, и иметь доступ основным функциям управления. Arduino Bluetooth Control используется для управления и/или мониторинга контактов Arduino через Bluetooth. Приложение является автономным, и вся инициализация выполняется из Arduino. Важно понимать, что приложение предназначено именно для контактов ардуино, а не для управления.
Работа приложения осуществляется при помощи нескольких инструментов:
- Metrics – этот инструмент осуществляет передачу данных с устройства ардуино, которые передают сигнал на телефон о сбоях или об изменениях значений. После того как кнопка сигнализации срабатывает, на телефон поступает уведомление о приостановки работы. Также есть функция встряхивания, при помощи которой отправлять данные путем встряхивания телефона.
- Кнопки со стрелками – здесь работа осуществляется кнопками, которые полностью регулируют отправку данных на плату.
- Терминал – стандартный терминал, получающий и отправляющий данные на плату с отметками времени.
- Кнопки – в горизонтальной ориентации доступно 6 полностью функционированных кнопок для отправки данных на системную плату ардуино.
- Accelometer – используются команды при помощи жестов. Ваш смартфон может стать рулем для управления вашим роботом.
- Голосовое управление – если вы когда-либо хотели пообщаться с роботами, то этот инструмент для вас. При помощи голосовой связи можно создавать собственные команды и использовать их для управления ардуино.
Рейтинг на Google Play: 4.2 из 5
Количество скачиваний: более 50.000
Arduino Bluetooth Controller
Arduino Bluetooth Controller – это простое и интуитивно понятное приложение для управления arduino через bluetooth с android. Работа приложения осуществляется в 4-х различных режимах:
- Режим контроллера: здесь приложение осуществляет демонстрацию интерфейса в виде игрового контроллера. Управление робота осуществляется при помощи экранных кнопок, что упрощает работу с ардуино.
- Режим переключения: переключение осуществляется при помощи одной кнопки, которая предназначена для удаленного доступа к переключателю.
- Режим диммера: в этом режиме доступна функция отправления значения в Arduino, которая позволяет удаленно регулировать яркость или скорость.
- Режим терминала: возможность отправлять индивидуальные команды для декодирования команд в самом ардуино.
Рейтинг на Google Play: 4.5 из 5
Количество скачиваний: более 100.000
Android + Bluetooth + Arduino
Приложение будет отправлять ардуине команды включения-отключения D10. D13, а та, в свою очередь, сообщать о выполненных действиях.
Прежде чем приступать к написанию приложения, необходимо проверить настройки bluetooth-модуля и подключить его к ардуине.
Настройка модуля подробно описана здесь, проделайте всё, что написано в разделе Bluetooth до фразы «Модуль настроен«.
После настройки заливаем в ардуину код…
char incomingbyte; // переменная для приема данных void setup() < Serial.begin(9600); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); >void loop() < if(Serial.available() >0) // есть ли что-то в буфере < incomingbyte = Serial.read(); // чтение символа switch (incomingbyte) < case 'A': digitalWrite(10,HIGH); Serial.println("D10 ON"); break; case 'a': digitalWrite(10,LOW); Serial.println("D10 OFF"); break; case 'B': digitalWrite(11,HIGH); Serial.println("D11 ON"); break; case 'b': digitalWrite(11,LOW); Serial.println("D11 OFF"); break; case 'C': digitalWrite(12,HIGH); Serial.println("D12 ON"); break; case 'c': digitalWrite(12,LOW); Serial.println("D12 OFF"); break; case 'D': digitalWrite(13,HIGH); Serial.println("D13 ON"); break; case 'd': digitalWrite(13,LOW); Serial.println("D13 OFF"); break; default: break; >> >
Ардуина получает символы от андройд-приложения, выполняет действие и возвращает ответ. Обратите внимание на скорость Serial.begin(9600), она должна совпадать с настройками модуля.
… и соединяем её с модулем по этой схеме:
Выполните сопряжение телефона с модулем.
Android
Кто не хочет обременять себя написанием приложения, может скачать готовый apk-файл, а если есть желание попрограммировать тогда.
Скачиваем, устанавливаем и запускаем Android Studio.
В процессе работы нужно будет установить sdk.
Создаём новый проект под названием BlueArdu
Next.
Next.
Выбираем Empty Activity
Next.
Finish
Открываем файл AndroidManifest.xml
После строчки package=«com.example.dima.blueardu» > добавляем разрешение на использование bluetooth:
Строку делаем так:
Кликаем по вкладке activity_main.xml и внизу выбираем вкладку Text
Удаляем всё, что там написано и вставляем вот это:
Красным цветом подсвечиваются ошибки. В данном случае среда сообщает об отсутствии картинок offlamp и onlamp
Сохраните картинки себе на компьютер. После этого скопируйте offlamp.png в буфер (правой кнопкой «копировать»), выберите (правой кнопкой) в левой колонке папку drawable и нажмите вставить.
OK.
То же самое проделайте со второй картинкой. После этого надписи станут зелёными.
Далее откройте вкладку MainActivity.java, удалите всё кроме первой строчки и вставьте этот код:
import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.FrameLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.Set; import java.util.UUID; import static android.R.layout.*; public class MainActivity extends AppCompatActivity < private static final int REQUEST_ENABLE_BT = 1; BluetoothAdapter bluetoothAdapter; ArrayListpairedDeviceArrayList; ListView listViewPairedDevice; FrameLayout ButPanel; ArrayAdapter pairedDeviceAdapter; private UUID myUUID; ThreadConnectBTdevice myThreadConnectBTdevice; ThreadConnected myThreadConnected; private StringBuilder sb = new StringBuilder(); public TextView textInfo, d10, d11, d12, d13; @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final String UUID_STRING_WELL_KNOWN_SPP = "00001101-0000-1000-8000-00805F9B34FB"; textInfo = (TextView)findViewById(R.id.textInfo); d10 = (TextView)findViewById(R.id.d10); d11 = (TextView)findViewById(R.id.d11); d12 = (TextView)findViewById(R.id.d12); d13 = (TextView)findViewById(R.id.d13); listViewPairedDevice = (ListView)findViewById(R.id.pairedlist); ButPanel = (FrameLayout) findViewById(R.id.ButPanel); if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH))< Toast.makeText(this, "BLUETOOTH NOT support", Toast.LENGTH_LONG).show(); finish(); return; >myUUID = UUID.fromString(UUID_STRING_WELL_KNOWN_SPP); bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (bluetoothAdapter == null) < Toast.makeText(this, "Bluetooth is not supported on this hardware platform", Toast.LENGTH_LONG).show(); finish(); return; >String stInfo = bluetoothAdapter.getName() + " " + bluetoothAdapter.getAddress(); textInfo.setText(String.format("Это устройство: %s", stInfo)); > // END onCreate @Override protected void onStart() < // Запрос на включение Bluetooth super.onStart(); if (!bluetoothAdapter.isEnabled()) < Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableIntent, REQUEST_ENABLE_BT); >setup(); > private void setup() < // Создание списка сопряжённых Bluetooth-устройств SetpairedDevices = bluetoothAdapter.getBondedDevices(); if (pairedDevices.size() > 0) < // Если есть сопряжённые устройства pairedDeviceArrayList = new ArrayList<>(); for (BluetoothDevice device : pairedDevices) < // Добавляем сопряжённые устройства - Имя + MAC-адресс pairedDeviceArrayList.add(device.getName() + "\n" + device.getAddress()); >pairedDeviceAdapter = new ArrayAdapter<>(this, simple_list_item_1, pairedDeviceArrayList); listViewPairedDevice.setAdapter(pairedDeviceAdapter); listViewPairedDevice.setOnItemClickListener(new AdapterView.OnItemClickListener() < // Клик по нужному устройству @Override public void onItemClick(AdapterView>parent, View view, int position, long id) < listViewPairedDevice.setVisibility(View.GONE); // После клика скрываем список String itemValue = (String) listViewPairedDevice.getItemAtPosition(position); String MAC = itemValue.substring(itemValue.length() - 17); // Вычленяем MAC-адрес BluetoothDevice device2 = bluetoothAdapter.getRemoteDevice(MAC); myThreadConnectBTdevice = new ThreadConnectBTdevice(device2); myThreadConnectBTdevice.start(); // Запускаем поток для подключения Bluetooth >>); > > @Override protected void onDestroy() < // Закрытие приложения super.onDestroy(); if(myThreadConnectBTdevice!=null) myThreadConnectBTdevice.cancel(); >@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) < if(requestCode == REQUEST_ENABLE_BT)< // Если разрешили включить Bluetooth, тогда void setup() if(resultCode == Activity.RESULT_OK) < setup(); >else < // Если не разрешили, тогда закрываем приложение Toast.makeText(this, "BlueTooth не включён", Toast.LENGTH_SHORT).show(); finish(); >> > private class ThreadConnectBTdevice extends Thread < // Поток для коннекта с Bluetooth private BluetoothSocket bluetoothSocket = null; private ThreadConnectBTdevice(BluetoothDevice device) < try < bluetoothSocket = device.createRfcommSocketToServiceRecord(myUUID); >catch (IOException e) < e.printStackTrace(); >> @Override public void run() < // Коннект boolean success = false; try < bluetoothSocket.connect(); success = true; >catch (IOException e) < e.printStackTrace(); runOnUiThread(new Runnable() < @Override public void run() < Toast.makeText(MainActivity.this, "Нет коннекта, проверьте Bluetooth-устройство с которым хотите соединица!", Toast.LENGTH_LONG).show(); listViewPairedDevice.setVisibility(View.VISIBLE); >>); try < bluetoothSocket.close(); >catch (IOException e1) < e1.printStackTrace(); >> if(success) < // Если законнектились, тогда открываем панель с кнопками и запускаем поток приёма и отправки данных runOnUiThread(new Runnable() < @Override public void run() < ButPanel.setVisibility(View.VISIBLE); // открываем панель с кнопками >>); myThreadConnected = new ThreadConnected(bluetoothSocket); myThreadConnected.start(); // запуск потока приёма и отправки данных > > public void cancel() < Toast.makeText(getApplicationContext(), "Close - BluetoothSocket", Toast.LENGTH_LONG).show(); try < bluetoothSocket.close(); >catch (IOException e) < e.printStackTrace(); >> > // END ThreadConnectBTdevice: private class ThreadConnected extends Thread < // Поток - приём и отправка данных private final InputStream connectedInputStream; private final OutputStream connectedOutputStream; private String sbprint; public ThreadConnected(BluetoothSocket socket) < InputStream in = null; OutputStream out = null; try < in = socket.getInputStream(); out = socket.getOutputStream(); >catch (IOException e) < e.printStackTrace(); >connectedInputStream = in; connectedOutputStream = out; > @Override public void run() < // Приём данных while (true) < try < byte[] buffer = new byte[1]; int bytes = connectedInputStream.read(buffer); String strIncom = new String(buffer, 0, bytes); sb.append(strIncom); // собираем символы в строку int endOfLineIndex = sb.indexOf("\r\n"); // определяем конец строки if (endOfLineIndex >0) < sbprint = sb.substring(0, endOfLineIndex); sb.delete(0, sb.length()); runOnUiThread(new Runnable() < // Вывод данных @Override public void run() < switch (sbprint) < case "D10 ON": d10.setText(sbprint); break; case "D10 OFF": d10.setText(sbprint); break; case "D11 ON": d11.setText(sbprint); break; case "D11 OFF": d11.setText(sbprint); break; case "D12 ON": d12.setText(sbprint); break; case "D12 OFF": d12.setText(sbprint); break; case "D13 ON": d13.setText(sbprint); break; case "D13 OFF": d13.setText(sbprint); break; default: break; >> >); > > catch (IOException e) < break; >> > public void write(byte[] buffer) < try < connectedOutputStream.write(buffer); >catch (IOException e) < // TODO Auto-generated catch block e.printStackTrace(); >> > /////////////////// Нажатие кнопок ///////////////////// /////////////////////////D10//////////////////////////// public void onClickBut1(View v) < if(myThreadConnected!=null) < byte[] bytesToSend = "a".getBytes(); myThreadConnected.write(bytesToSend ); >> public void onClickBut2(View v) < if(myThreadConnected!=null) < byte[] bytesToSend = "A".getBytes(); myThreadConnected.write(bytesToSend ); >> ////////////////////////D11//////////////////////////// public void onClickBut3(View v) < if(myThreadConnected!=null) < byte[] bytesToSend = "b".getBytes(); myThreadConnected.write(bytesToSend ); >> public void onClickBut4(View v) < if(myThreadConnected!=null) < byte[] bytesToSend = "B".getBytes(); myThreadConnected.write(bytesToSend ); >> //////////////////////D12////////////////////////// public void onClickBut5(View v) < if(myThreadConnected!=null) < byte[] bytesToSend = "c".getBytes(); myThreadConnected.write(bytesToSend ); >> public void onClickBut6(View v) < if(myThreadConnected!=null) < byte[] bytesToSend = "C".getBytes(); myThreadConnected.write(bytesToSend ); >> //////////////////////D13////////////////////////// public void onClickBut7(View v) < if(myThreadConnected!=null) < byte[] bytesToSend = "d".getBytes(); myThreadConnected.write(bytesToSend ); >> public void onClickBut8(View v) < if(myThreadConnected!=null) < byte[] bytesToSend = "D".getBytes(); myThreadConnected.write(bytesToSend ); >> > // END
Если всё сделано правильно, то никаких ошибок не должно быть.
Разрешите на телефоне отладку по USB:
Подключите телефон к компьютеру и запустите компиляцию нажав зелёную стрелку:
Через некоторое время появится окно с выбором устройства на котором будет запущено приложение:
Отсутствие в списке телефона, означает какие-то проблемы с драйверами.
Нажмите ОК, приложение установится и откроется окно со списком сопряжённых устройств:
Выберите ваш модуль и после соединения откроется главное окно программы:
На этом всё, далее можно приступать к изучению программирования под Android и добавлять свой функционал.
Здесь можно почитать о том, как сделать метеостанцию.
—>
Известит Вас о новых публикациях