Реклама ⓘ
Главная » Arduino
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

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, а также все необходимые библиотеки

Прикрепленные файлы:

Теги:

Колтыков А.В. Опубликована: 2012 г. 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (9) | Я собрал (0) | Подписаться

0
Texno #
Гораздо удобнее использовать беспроводное соединение с андроидом, тем самым имеем дебаг в еклипсе и постоянный конект с ардуиной.
Но нужен рут.
Гугль даст ответ как это настроить - adb connect android_wifi_ip:5555
Ответить
0
Pavel #
Всё сделал как описано, ошибок не вызывает, но на нажатие клавиши на андройд плата никак не реагирует
Ответить
0
Павел #
Скачал полностью проекты на ардуино по ссылке, запускаю на андройде, нажимаю кнопку диод никак не реагирует. Помогите разобраться в чем проблема. Плата Mega ADK телефон HTC OneX+ android 4.1.1 уровень HTC SDK API 4.63 (не знаю что это значит, написано в телефоне)
Ответить
0
talibanich #
Без логов это может быть все, что угодно. Если планируется конструктивный диалог с предоставлением логов, а не телепатический сеанс, то лучше задать вопрос на соответствующем форуме.
Ответить
0
Роман #
Пытаюсь скомпилировать скетч, получаю следующие ошибки:
sketch_jun25b:5: error: variable or field 'adbEventHandler' declared void
sketch_jun25b:5: error: 'Connection' was not declared in this scope
sketch_jun25b:5: error: 'connection' was not declared in this scope
sketch_jun25b:5: error: 'adb_eventType' was not declared in this scope
sketch_jun25b:5: error: expected primary-expression before 'length'
sketch_jun25b:5: error: expected primary-expression before '*' token
sketch_jun25b:5: error: 'data' was not declared in this scope
sketch_jun25b:4: error: expected constructor, destructor, or type conversion before '*' token
sketch_jun25b:6: error: variable or field 'adbEventHandler' declared void
sketch_jun25b:6: error: 'Connection' was not declared in this scope
sketch_jun25b:6: error: 'connection' was not declared in this scope
sketch_jun25b:6: error: 'adb_eventType' was not declared in this scope
sketch_jun25b:6: error: expected primary-expression before 'length'
sketch_jun25b:6: error: expected primary-expression before '*' token
sketch_jun25b:6: error: 'data' was not declared in this scope
Импортирую библиотеку ADB, получаю такое:
sketch_jun25b:32: error: expected unqualified-id before '
Ответить
0
дмитрий #
Если мне к примеру нужно 10 кнопок на androide которые управляют 10 пинами на ардуино как примерно код будет выглядеть.
Ответить
0
Евгений #
Пропала строка, которую надо было в манифест записать. Что там было написано?
Ответить
0
talibanich #
В проекте посмотрите. Он прикреплен
Ответить
0
Сергей #
Плата Arduino Uno + Usb Host Shield 2.0.
Сделал как описано, но светодиод не загорается. Serial Monitor данные выводит в виде 1 0 и т.д. В чем может быть дело?
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Raspberry Pi 2
Raspberry Pi 2
DC-DC регулируемый преобразователь 1.5-37В 2А с индикатором USB-реле (2 канала)
вверх