Android. Связываем телефон с компьютером

По умолчанию программа работает в режиме Java. Но Processing поддерживает и другие режимы, в частности, Android. В верхнем правом углу нажмите на выпадающий список и выберите команду Add Mode....

В диалоговом окне выберите вариант Android Mode и нажмите кнопку Install.

На предыдущих скриншотах показаны уже установленные компоненты, у вас будет немного по-другому.

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

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

Для решения этой задачи нам понадобятся библиотеки: Ketai и oscP5.

Библиотека Ketai позволяет работать с датчиками, камерой, сетью и многое другое.

Библиотека oscP5 позволяет передавать сообщения между устройствами.

Устанавливаются они за пару щелчков. Открываем меню Sketch | Import Library | Add Library... и находим нужные библиотеки. Используйте фильтр для быстрого поиска.

Выбираем нужную библиотеку и нажимаем кнопку iInstall. Остальное программа сделает сама.

Для обмена сообщениями компьютер и телефон должны использовать общую Wi-Fi сеть. Далее следует узнать IP-адрес компьютера. В Windows это можно сделать через команду ipconfig .

Запомним адрес и впишем его в скетч для Android-режима.

import netP5.*;
import oscP5.*;
import ketai.net.*;
import ketai.sensors.*;

OscP5 oscP5;
KetaiSensor sensor;

NetAddress remoteLocation;
float myAccelerometerX, myAccelerometerY, myAccelerometerZ;
float proximity;
String msg;
int x, y, p; 
String myIPAddress; 
String remoteAddress = "192.168.1.42";    // адрес вашего компьютера

void setup() {
  sensor = new KetaiSensor(this);
  //println(sensor.list()); // список всех датчиков
  orientation(PORTRAIT);
  textAlign(CENTER, CENTER);
  textSize(40);
  msg = "hello";
  initNetworkConnection();
  sensor.start();
}

void draw() {
  background(78, 93, 75);

  text("Remote Mouse Info: \n" + 
    "mouseX: " + x + "\n" +
    "mouseY: " + y + "\n" +
    "mousePressed: " + p + "\n\n" +
    "Local Accelerometer Data: \n" + 
    "x: " + nfp(myAccelerometerX, 1, 3) + "\n" +
    "y: " + nfp(myAccelerometerY, 1, 3) + "\n" +
    "z: " + nfp(myAccelerometerZ, 1, 3) + "\n" +
    "Датчик расстояния: " + proximity + "\n" +
    "Message: " + msg + "\n\n" +
    "Local IP Address: \n" + myIPAddress + "\n\n" +
    "Remote IP Address: \n" + remoteAddress, width/2, height/2);

  OscMessage myMessage = new OscMessage("accelerometerData"); 
  myMessage.add(myAccelerometerX);
  myMessage.add(myAccelerometerY);
  myMessage.add(myAccelerometerZ);
  myMessage.add(msg);
  myMessage.add(proximity);

  oscP5.send(myMessage, remoteLocation);
}

void oscEvent(OscMessage theOscMessage) {
  if (theOscMessage.checkTypetag("iii"))
  {
    x =  theOscMessage.get(0).intValue();
    y =  theOscMessage.get(1).intValue();
    p =  theOscMessage.get(2).intValue();
  }
}

void onAccelerometerEvent(float x, float y, float z)
{
  myAccelerometerX = x;
  myAccelerometerY = y;
  myAccelerometerZ = z;
}


void onProximityEvent(float d)
{
  proximity = d;
}

void initNetworkConnection()
{
  oscP5 = new OscP5(this, 12000);
  remoteLocation = new NetAddress(remoteAddress, 12000);
  myIPAddress = KetaiNet.getIP();
}

Так как наш телефон будет передавать данные через интернет, то необходим включить разрешение на его использование. Идём в меню Android | Sketch Permissions и ставим флажок у пункта Internet.

Запускаем приложение на телефоне (не забудьте включить Wi-Fi). На телефоне мы увидим данные от акслелерометра, датчика расстояния, текст сообщения и два ip-адреса: свой и удалённого компьютера. Запоминаем адрес телефона и вбиваем его в скетч в режиме Java.

import oscP5.*;
import netP5.*;

OscP5 oscP5;
NetAddress remoteLocation;
float accelerometerX, accelerometerY, accelerometerZ;
float proximity;
String msg;

void setup() {
  size(480, 480);
  oscP5 = new OscP5(this, 12000);
  remoteLocation = new NetAddress("192.168.1.43", 12000);  // ip-адрес телефона
  textAlign(CENTER, CENTER);
  textSize(24);
}

void draw() {
  background(78, 93, 75);
  text("Remote Accelerometer Info: " + "\n" +
    "x: "+ nfp(accelerometerX, 1, 3) + "\n" +
    "y: "+ nfp(accelerometerY, 1, 3) + "\n" +
    "z: "+ nfp(accelerometerZ, 1, 3) + "\n\n" +
    "Message: " + msg + "\n\n" +
    "Датчик расстояния: " + proximity + "\n\n" +
    "Local Info: \n" + 
    "mousePressed: " + mousePressed, width/2, height/2);

  if (proximity == 0.0)
  {
    background(10, 10, 45);
  }

  OscMessage myMessage = new OscMessage("mouseStatus");
  myMessage.add(mouseX);
  myMessage.add(mouseY);
  myMessage.add(int(mousePressed));
  oscP5.send(myMessage, remoteLocation);
}

void oscEvent(OscMessage theOscMessage) {
  if (theOscMessage.checkTypetag("fffsf"))
  {
    accelerometerX =  theOscMessage.get(0).floatValue();
    accelerometerY =  theOscMessage.get(1).floatValue();
    accelerometerZ =  theOscMessage.get(2).floatValue();
    msg = theOscMessage.get(3).stringValue();
    proximity = theOscMessage.get(4).floatValue();
  }
}

Запускаем скетч на компьютере. Телефон положите на стол. Наблюдайте за происходящим.

Нажимаем на кнопку мыши. Текст должен поменяться на mousePressed: true.

Посмотрите на телефон. Там надпись синхронно сменится на mousePressed: 1.

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

Это ещё не всё! Положите телефон на стол и прикройте его ладонью. Сработает датчик приближения и окно десктопного приложения внезапно изменит свой цвет.

Уберите ладонь, информация снова проявится.

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

results matching ""

    No results matching ""