Главная » Arduino
Призовой фонд
на октябрь 2021 г.
1. Рюкзак Mean Well
Компэл
2. Инвертор авто Mean Well 150 Ватт
Компэл
3. Термос MeanWell
Компэл
4. 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

Arduino UNO
Arduino UNO
МиниПК MK809V - 4 ядра, Android 4.4.2 Квадрокоптер Syma X11
вверх