Android и Arduino. Привет Arduino из Android

Во второй части статьи мы рассмотрели установку и настройку необходимого нам программного обеспечения для разработки под ADK и Android. Теперь, когда у нас все готово для работы, мы можем создать наш первый проект. И по традиции — это будет проект со светодиодом.

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

Программа для Arduino

Создаем новый проект. Наш исходный код будет очень простой:

 #include  #include   Connection * connection;  void adbEventHandler(Connection * connection, adb_eventType event, uint16_t length, uint8_t * data) {   if (event == ADB_CONNECTION_RECEIVE)   // Если приняли данные   {     digitalWrite(13, data[0]);   // Изменяем состояние LED в зависимости от принятой переменной     } }  void setup() {   pinMode(13,OUTPUT);  // Используем встроенный светодиод L платы Seeeduino ADK   ADB::init();   connection = ADB::addConnection("tcp:4568", true, adbEventHandler);   }  void loop() {   ADB::poll(); } 

Вкратце — мы инициализируем и создаем ADB соединение, а также определяем функцию adbEventHandler(), которая будет вызываться каждый раз, когда будут приниматься данные от Android-устройства. Когда данные приняты, то мы записываем принятый байт при помощи функции digitalWrite(), тем самым зажигая или гася светодиод.

Теперь компилируем скетч и загружаем его в нашу плату.

Программа для Android

Открываем Eclipse IDE и создаем новый проект: New -> Project… Откроется окошко, в котором находим папку Android и выбираем пункт Android Application Project. Нажимаем кнопку Next, и заполняем название проекта и некоторые параметры.

Android Application

Далее нажимаем Next и формируем иконку приложения и др. После нажатия кнопки Finish ваше приложение готово. Теперь в окне Package Explorer щелкните правой кнопкой на вашем проект и выберите свойства проекта: Properties. Удостовертесь, что в качестве Target Name у вас выбран Google API, а не Android.

Android Application

Затем открываем файл манифеста AndroidManifest.xml и в нем прописываем строку, для того, чтобы ОС Android дала нам разрешение на доступ к соответствующим службам:

Далее, копируем необходимые библиотеки для обеспечения работы MicroBridge режима: /src/org/microbridge/server и в этой папке 4 файла. Взять их вы можете с архива в конце статьи или с оригинального примера от seeed studio.

Package Explorer

Теперь нам необходимо на activity (окно приложения) добавить графические элементы для взаимодействия с пользователем. Пока что у нас будет всего 2 элемента: текст и ToggleButton (кнопка с 2-мя состояниями).
Формировать пользовательский интерфейс можно двумя способами: при помощи графического расположения (простым перетаскиванием и компоновкой) и при помощи XML-файла. Воспользуемся Graphical Layout. Для этого, в окне ресурсов приложения щелкаем по файлу /res/layout/activity_main.xml. И в появившееся окно перетаскиваем ToggleButton:

Graphical Layout

Теперь открываем наш основной файл /src/com/example/arduino52/MainActivity.java, все в нем удаляем и копируем следующие строки:

 package com.example.arduino52;  import java.io.IOException; import org.microbridge.server.Server;  import android.os.Bundle; import android.util.Log; import android.app.Activity; import android.widget.ToggleButton; import android.widget.CompoundButton;  public class MainActivity extends Activity implements CompoundButton.OnCheckedChangeListener {  	Server server = null; 	     @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);                  ToggleButton mButton = (ToggleButton)findViewById(R.id.toggleButton1);         mButton.setOnCheckedChangeListener(this);                  // Создаем TCP сервер (на основе сервера MicroBridge LightWeight)      	try      	{      		server = new Server(4568); //Этот же порт необходимо использовать и на ADK-плате      		server.start();			      	} catch (IOException e)      	{      		Log.e("arduino52", "Unable to start TCP server", e);      		System.exit(-1);      	}      	     }          @Override     protected void onDestroy (){     	super.onDestroy();     	server.stop();     }      	public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 		byte data;  		if(isChecked)	// Если кнопка нажата 		{ 			data = 1; 		} 		else 		{ 			data = 0; 		}  		try 		{ 			//Посылаем данные 			server.send(new byte[] {(byte) data}); 		} catch (IOException e) 		{ 			Log.e("arduino52", "Problem sending TCP message", e); 		}		 	}   } 

Приложение на Android несколько сложнее, всю структуру его я расписывать не буду, для этого есть специализированные сайты и книги. Расскажу лишь основные моменты, которые нужны для нашего проекта.
Итак вначале инициализируется наш MicroBridge сервер, которые вешается на 4568 порт. Точно такой же порт должен стоят в вашем скетче Arduino.
Затем обьявляется обработчик onCheckedChanged (), который вызывается каждый раз при изменении состояния нашей кнопки ToggleButton. Далее, в зависимости от состояния кнопки, в переменную data мы сохраняем 1 или 0. И после, происходит попытка отправить эти данные функцией server.send ()

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

После этого перетыкаем USB кабель от Android к плате (наверняка у вас на Android устройстве только один USB-порт) и смотрим за результатом.

Теперь поговорим немного об отладке. Средства разработки под Android предоставляют хорошие возможности для отладки: Dalvik Debug Monitor. Но т.к. мы переподключаем USB-кабель, то лишаемся некоторых возможностей отладки в режиме реального времени. Лично я, для отладки использовал бесплатное приложение CatLog доступное из Android Play, возможно вы найдете более изящное решение.

Плюс Arduino ADK плат в том, что большинство из них имеют 2 USB разъема — один работает как хост для соединения с Android устройством, а второй подключен к компьютеру для обмена данными, загрузки скетчей и/или питания. Т.е. вы свободно можете пользоваться утилитой Port Monitor из Android IDE.

Ниже вы можете скачать проекты для Arduino и Android, а также все необходимые библиотеки