Общение между компьютером и Android-устройством через Processing
Есть определённая категория людей, которая хотела бы писать программы, но боится серьёзных языков программирования. К ним можно отнести детей, гуманитариев, любителей мастерить, людей старшего поколения и т.д. Кто-то пробует использовать «детские» языки типа Scratch или другие упрощённые конструкторы.
На мой взгляд, хорошим вариантом для изучения может стать Processing, который не так часто упоминается на Хабре.
Processing — это простенькая среда разработки с языком Java с ограниченным числом классов. Здесь есть переменные, циклы, объекты. В первую очередь Processing расчитан на работу с графикой, анимацией, вычислениями. То, что так нравится детям. Всё наглядно и красиво.
Если у пользователя появится желание перейти на новый уровень и начать использовать полноценный язык Java, то все наработки не пропадут даром. Большая часть кода не потребует переработки и можно свободно копировать больше участки кода.
Processing постоянно развивается и доросла до третьей версии. У неё есть своё активное сообщество, которое делится своим исходным кодом.
Процесс установки простой — скачиваем и распаковываем архив. Запускаем исполняемый файл и мы готовы создавать программу.
Файл, в котором пишется и сохраняется исходный код, называется скетчем. Для создания полноценного окна достаточно написать одну строчку!
Конечно, от такого приложения толку мало и придётся писать код чуть посложнее. У стандартной программы обычно присутствуют два метода: setup() и draw(). Усложним пример.
Мы создали окно размером 480х120 пикселей. Если поместить курсор мыши в область окна и двигать им, то будут рисоваться белые круги, накладываясь друг на друга. Нажмите и держите левую или правую кнопку и продолжайте двигать мышь внутри окна. Теперь цвет круга сменится на чёрный.
Здесь могут оживиться ардуинщинки, увидев знакомый синтаксис. Ничего удивительного, Arduino IDE построена на основе Processing (как и другая программа для работы с микрокомпьютерами Wiring). Только вместо функции draw() они используют loop(). Но смысл остаётся прежним — в setup() происходит инициализация, в draw()/loop() крутится бесконечный цикл для обновления данных.
Это была разминка. Давайте перейдем к более сложным вещам. По умолчанию программа работает в режиме Java. Но Processing поддерживает и другие режимы, в частности, Android. В верхнем правом углу нажмите на выпадающий список и выберите команду Add Mode. .
В диалоговом окне выберите вариант Android Mode и нажмите кнопку Install.
На предыдущих скриншотах показаны уже установленные компоненты, у вас будет немного по-другому.
После загрузки необходимых файлов, вы сможете создавать полноценные приложения для Android (не забывайте переключаться в данный режим).
При желании вы можете использовать полноценный Android SDK, но такой подход будет выглядеть немного странным. Если вы знаете SDK, то почему не используете Android Studio? Поэтому мы будем использовать встроенные возможности Processing. Попробуем.
Присоединяем телефон к компьютеру через USB и запускаем программу. Можно также запустить через эмулятор (меню Sketch | Run in Emulator). Так он выглядит на компьютере.
По возможности используйте реальный телефон. Но если у вас iPhone, потерялся USB-кабель, не распознаётся телефон и 1000 других причин, то используйте эмулятор. Помните, на эмуляторе не все вещи можно выполнить. Но побаловаться вполне можно.
Если и этот квест вы прошли успешно, то приступаем к сложному этапу — подружить компьютер с телефоном. Мы напишем программу, которая будет передавать показания акселерометра телефона на компьютер, в свою очередь компьютер будет передавать статус нажатой кнопки мыши.
Для решения этой задачи нам понадобятся библиотеки: Ketai и oscP5.
Библиотека Ketai позволяет работать с датчиками, камерой, сетью и многое другое.
Библиотека oscP5 позволяет передавать сообщения между устройствами.
Устанавливаются они за пару щелчков. Открываем меню Sketch | Import Library | Add Library. и находим нужные библиотеки. Используйте фильтр для быстрого поиска.
Выбираем нужную библиотеку и нажимаем кнопку iInstall. Остальное программа сделает сама.
Для обмена сообщениями компьютер и телефон должны использовать общую Wi-Fi сеть. Далее следует узнать IP-адрес компьютера. В Windows это можно сделать через команду ipconfig .
Запомним адрес и впишем его в скетч для Android-режима.
Так как наш телефон будет передавать данные через интернет, то необходим включить разрешение на его использование. Идём в меню Android | Sketch Permissions и ставим флажок у пункта Internet.
Запускаем приложение на телефоне (не забудьте включить Wi-Fi). На телефоне мы увидим данные от акслелерометра, датчика расстояния, текст сообщения и два ip-адреса: свой и удалённого компьютера. Запоминаем адрес телефона и вбиваем его в скетч в режиме Java.
Запускаем скетч на компьютере. Телефон положите на стол. Наблюдайте за происходящим.
Нажимаем на кнопку мыши. Текст должен поменять на mousePressed: true.
Посмотрите на телефон. Там надпись синхронно сменится на mousePressed: 1.
Отпускайте и нажимайте кнопку мыши, чтобы увидеть, что оба устройства видят друг друга и передают информацию о себе. Аналогично вы можете вращать телефон в руках и видеть на своем мониторе изменения показаний датчика акселерометра.
Это ещё не всё! Положите телефон на стол и прикройте его ладонью. Сработает датчик приближения и окно десктопного приложения внезапно изменит свой цвет.
Уберите ладонь, информация снова проявится.
Текст «hello» также был получен с телефона. Вы можете поменять его в коде для телефона и перезапустить скетч, чтобы увидеть изменения.
В скетче для телефона я закомментировал код, позволяющий получить список всех датчиков. Можете убрать комментарий и посмотреть список в консоли.
Я не стану объяснять каждую строчку кода. Если кого-то заинтересует данная тема, то в любом случае придётся изучать документацию. В двух словах тут не опишешь.
Если бы вам пришлось писать подобный функционал в Android Studio и IDEA, то пришлось бы сначала изучить множество сопутствующих технологий и создавать сложные проекты с большим количеством кода. В Processing многие детали скрыты от разработчика. Конечно, сложных бизнес-приложений на нём не напишешь. Но напоминаю, что Processing предназначена в первую очередь, чтобы «поиграться» с графикой. И это вполне может стать первой ступенькой в мир программирования для ребёнка. Кроме того, Processing умеет общаться с платами Arduino через последовательный порт.
Таким образом, вы охватываете сразу три устройства: компьютер, телефон и плату микрокомпьютера. Умный дом в вашем распоряжении, нужно только проявить фантазию. Единственная проблема — мало ресурсов на русском языке. Самостоятельно разобраться будет сложновато, и не все родители смогут помочь. В этом случае следует поискать наставника или записаться на подходящие курсы.
На русском языке выпускалась пара книг для базового уровня, которые рассматривают работу на компьютере. Для работы с Android есть бесплатная — электронная книга на GitBook (на английском). Возможно, если будет время, буду пополнять свой вариант.
Источник
Android processing serial port
The Serial library reads and writes data to and from external devices one byte at a time. It allows two computers to send and receive data. This library has the flexibility to communicate with custom microcontroller devices and to use them as the input or output to Processing programs. The serial port is a nine pin I/O port that exists on many PCs and can be emulated through USB.
Issues related to the Serial library on different platforms are documented on the Processing Wiki. The source code is available on the processing GitHub repository.
When sending data to the console, such as via print() or println(), note that the console is relatively slow. It does not support high-speed, real-time output (such as at 60 frames per second). For real-time monitoring of serial values, render those values to the Processing window during draw().
Serial
Class for sending and receiving data using the serial communication protocol
Returns the number of bytes available
Sets the number of bytes to buffer before calling serialEvent()
Sets a specific byte to buffer until before calling serialEvent()
Empty the buffer, removes all the data stored there
Returns last byte received or -1 if there is none available
Returns the last byte received as a char or -1 if there is none available
Gets a list of all available serial ports
Returns a number between 0 and 255 for the next byte that’s waiting in the buffer
Reads a group of bytes from the buffer or null if there are none available
Reads from the port into a buffer of bytes up to and including a particular character
Returns the next byte in the buffer as a char
Returns all the data from the buffer as a String or null if there is nothing available
Combination of readBytesUntil() and readString()
Stops data communication on this port
Writes bytes, chars, ints, bytes[], Strings to the serial port
Serial Event
Called when data is available
Contact Us
Feel free to write us!
Processing is an open project initiated by Ben Fry and Casey Reas. It is developed by a team of volunteers around the world.
Источник
Android processing serial port
AndroidSerial for Processing
This is a Processing-for-Android library offering the serial communication.
This library works on Android 5.0 or later since it uses Android USB Host API.
This library also includes usb-serial-for-android containing FTDI serial driver and USB CDC/ACM serial driver working on Android. Since the project creates only AAR file by default, there is a shell script, update_libs.sh , to extract a jar file from the built AAR file. Use the script when you require the other revision of the project binary.
Note that this version is alpha release.
Build the source code (see below) or download a binary from the release page.
Unzip AndroidSerial-distribution.zip and copy all files including AndroidSerial directory to your libraries folder (e.g.
If you already install the older version of AndroidSerial library, remove it prior to copying the new one.
The usage of the library is almost same as processing.serial.Serial library.
The difference between processing.serial.Serial and this is a static method list() .
The following code does NOT work on the AndroidSerial library.
But this does work,
Other methods in processing.serial.Serial class should work without any changes.
You can get a working example from the sparkfun’s pulse sensor SEN-11574.
Install Android SDK Platform 23 or higher as well as Android SDK Tools and Android SDK Platform-tools or later (I tried Android SDK Platform 23/24, SDK Platform Tools 24.0.3, SDK Tools 25.2.2, and Processing 3.2.1)
Install Android mode on your Processing environment
Install this library (Unzip AndroidSerial-distribution.zip and copy all files including AndroidSerial directory to your libraries folder (e.g.
Download the Processing sketch from Documents section
Open the downloaded Processing sketch (not Arduino)
On the Processing IDE, choose Sketch -> Import Library -> Android Serial Library for Processing (This will insert import io.inventit.processing.android.serial.*; )
Modify the code as below (see here for the source code available at the sparkfun site)
Please make sure that you need to check and modify the index of Serial.list(this) at the line 62 in order to specify the valid port name
Create res/xml directories under the opened sketch directory (e.g.
Copy examples/PulseSensor11574/res/xml/device_fileter.xml to the created directory (e.g.
Copy examples/PulseSensor11574/AndroidManifest.xml to the opened sketch directory (e.g.
Connect your Android device to your computer and Run the code
The application may report Unexpected error on your Android screen but you can ignore it (tap OK )
Disconnect the Android device from the computer and connect your FTDI device or Arduino to the Android device with USB cable
Android asks you to choose an application to launch, then choose your application (e.g. PulseSensorAmpd_Processing_1dot1 )
Finally, you will see the same screen as your computer!
** Screenshot on Galaxy J **
You can build the project source code though you can download the built binary from our SourceForge project page.
Prior to building the project, you need to install the following software:
- JDK 6+ (Any JDK will be available)
- Apache Maven (Choose the latest one if possible)
- Gradle is required if you run update_libs.sh , which downloads and builds the other revision of usb-serial-for-android source code than b96f9ca
Then run the following command under the root of the project:
And you can find the artifact file named AndroidSerial-distribution.zip at target directory.
The directory structure of this application is as follows:
(X) is a working example for Sparkfun’s Pulse Sensor SEN-11574
Source Code License
All program source codes are available under the MIT style License.
Copyright (c) 2016 Inventit Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the «Software»), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED «AS IS», WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- usb-serial-for-android . LGPL, USB serial driver for Android
- Processing Core . LGPL, Processing core library
- Android . ASL 2.0, Android API Library
- SLFJ Android . MIT, Logging framework
- Robolectric . Android testing library (TEST USE ONLY)
- Mockito . Mock testing library (TEST USE ONLY)
0.2.0 : September 23, 2016
- Rename package to io.inventit.processing.android.serial
- Processing 3.2 support
- Use the latest version of usb-serial-for-android
- Android Mode 0252 support
0.1.0-alpha : February 29, 2016
- Processing 3 support and Processing 2 is no longer supported
0.0.2-alpha : June 20, 2013
- Fixes an issue where Arduino Due cannot be detected by usb-serial-for-android library. Now all Arduino devices are accepted (but not sure they all work properly. Give us your feedback)
- Adds unit testing libraries, Robolectric and Mockito
- The release binary has been moved to our SourceForge project page
Источник