PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Софт (http://pccar.ru/forumdisplay.php?f=172)
-   -   Serial Manager - автоматизация/управление Android с помощью Arduino (http://pccar.ru/showthread.php?t=24120)

DelleTenebre 18.04.2016 22:01

Serial Manager - автоматизация/управление Android с помощью Arduino
 
Serial Manager v1.6.8 (обновлён 11.09.2016)

Serial Manager 2 v2.2.2 (обновлён 18.06.2017)

Уже реализовано / Планы на будущее:
  • Подключение по USB | v1.0
  • Виджеты для отображения данных | v1.2
  • Интеграция с Tasker | v1.2
  • Настройки data bits, stop bits, parity для usb-подключения | v1.3
  • Виджеты для отображения данных - интеграция с Remote Inputs Manager | v1.3
  • Виджеты для отправки данных | v1.4
  • Ручной выбор устройства для подключения | v1.5
  • Bluetooth соединение | v1.5
  • Команда <ключ:значение> - действие отправки команды | v1.6.0
  • Более удобный выбор иконок и цвета для виджетов
  • Категория Run Shell с правами su | v1.6.0
  • Категория Эмуляция клавиатуры [ Root ] | v1.6.0
  • Уведомления поверх остальных окон (для распознанной команды) | v1.6.6
  • Отправление сообщений на контроллер с помощью Tasker, Automate и т.д. | v1.6.0 [ как настроить ]
  • Считывание состояния GPIO [ Root ] | v1.6.2 [ как настроить ]
  • Установка состояния GPIO: low, high, invert [ Root ] | v1.6.3 [ как настроить ]
  • Формулы и доп. функции для виджетов и уведомлений | v1.6.3 [ как настроить ]
  • Работа через WebSocket | v1.6.5 [ как настроить ]
  • Распознавание нажатий клавиш клавиатуры [ Root ] | v1.6.7 [ как настроить ]
  • Работа напрямую через последовательный порт (/dev/tty*) [ Root ] | v1.6.8 [ как настроить ]
  • Работа по I2C (/dev/i2c-*) [ Root ] | v1.6.8 [ как настроить ]

Примеры скетчей для Arduino:
Fake Serial Manager v1.0.0 - некоторые, например, GPS-приёмники или контроллер от YAM1966 могут определяться как Serial-устройство и SerialManger забирает порт на себя. FakeSerialManager просто "забирает" окошко "запускать приложение при подключении устройства". У программы нет Activity и ярлыка.

Памятка При добавлении новой команды <ключ:значение>, поля Ключ и Значение могут быть автоматически заполнены:
  • включите опцию Определить ключ/значение автоматически;
  • нажмите кнопку на внешнем устройстве (чтобы в serial пришла команда например);
  • поля Ключ и Значение автоматически будут заполнены.

Памятка Описание к эмулируемым клавишам клавиатуры можно посмотреть здесь.

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


https://cloud.githubusercontent.com/...a11287e663.png https://cloud.githubusercontent.com/...cdcd18af6f.png https://cloud.githubusercontent.com/...d2c06fd36d.png https://cloud.githubusercontent.com/...b2f97c5564.png


Примерный алгоритм работы такой:

USB & Bluetooth
При получении информации в формате <ключ:значение> будет исполнена заранее настроенная (на данный ключ) команда. Если ключ не был настроен в программе или была включена опция Сквозная команда, то создаётся Broadcast Intent, который могут получить сторонние программы.

При включенной опции Останавливать сервис при отключении экрана:
  • При блокировке экрана (ACTION_SCREEN_OFF), через 2 секунды и если экран остаётся выключенным, фоновый сервис завершит работу.
  • При разблокировке экрана (ACTION_USER_PRESENT), через 2 секунды и если экран остаётся включенным, программа автоматически подключается к Arduino.

USB
Запуск/остановка сервиса, считывающено информацию с последовательного порта, производится при получении ACTION_USB_DEVICE_ATTACHED / ACTION_USB_DEVICE_DETACHED.

Bluetooth
Сервис запускается/завершает работу при включении/отключении Bluetooth на устройстве (BluetoothAdapter.STATE_ON / BluetoothAdapter.STATE_TURNING_OFF).





Интеграция с Tasker (и ему подобных):

При отсутствии настроенного <ключ:значение> или при включенной опции Сквозная команда, Serial Manager создаёт Broadcast Intent со следующими параметрами:
  • Action: kg.delletenebre.serial.NEW_DATA
  • Extras: key, value

Виджеты отображающие данные

Используя встроенные виджеты Serial Manager Receive Вы сможете, например, выводить данные с подключенных к Arduino датчиков.

https://cloud.githubusercontent.com/...96057d970f.png https://cloud.githubusercontent.com/...4262473a7e.png

По умолчанию в виджетах используется шрифт Font Awesome и Вы можете совместно с текстом использовать иконки. Для вывода иконки необходимо использовать следующий формат \uXXXX, где XXXX код Unicode. Например для вывода иконки Android:

https://cloud.githubusercontent.com/...c12adabc15.png https://cloud.githubusercontent.com/...01dff052e4.png https://cloud.githubusercontent.com/...b13c2219d1.png

Можно использовать любой шрифт, для этого в настройках виджета необходимо включить опцию Использовать свой шрифт и указать путь к ttf файлу шрифта (предварительно скопированного во внутреннюю память устройства).

Для вывода текста по вертикали используется управляющий символ перевода на новую строку \n

https://cloud.githubusercontent.com/...b54d2b137e.png https://cloud.githubusercontent.com/...dc0b681424.png

Виджет отправки данных

Виджет Serial Manager Send позволяет отправлять данные на Arduino.

При включении опции Виджет-переключатель, Вы сможете последоватьльно отправлять разные данные, используя один и тот же виджет. Как пример - переключатель on/off. Демонстрационный скетч sketch_receive_from_android.ino имеет следующую логику: при считывании из последовательного порта on подаётся питание на пин 8, при получении off убирается питание. Подключив светодиод можно получить наглядную индикацию.

Добавьте новый виджет Serial Manager Send и настройте следующим образом:
  • Виджет-переключатель: ☑
  • Отправляемые данные: on|off
  • Текст / Иконка: \uf186|\uf185
  • Цвет шрифта: #9e9e9e|yellow
  • Размер шрифта: 64
Подключите Arduino к устройству Android и нажимайте на виджет. При отправленной команде on виджет будет иметь жёлтое солнце, при отправленной команде off - серый полумесяц.

https://cloud.githubusercontent.com/...dea836a333.png https://cloud.githubusercontent.com/...25edfbc1cd.png https://cloud.githubusercontent.com/...7810e0538d.png

Вы можете настроить сколько угодно переключаемых команд, для этого в поле Отправляемые данные добаляйте команды разделённые вертикальной чертой (pipe): |. Например pie|eclair|honey|marshmallow; данные будут отправляться следующим образом:
  • нажатие 1: pie
  • нажатие 2: eclair
  • нажатие 3: honey
  • нажатие 4: marshmallow
  • нажатие 5: pie
  • нажатие 6: eclair
  • нажатие 7: honey
  • ...
Таким же образом можно настроить поля: Текст / Иконка, Цвет шрифта, Размер шрифта, Цвет фона.

DelleTenebre 18.04.2016 22:21

Вложений: 10
Интеграция c Zooper Widget Pro и Tasker


С Arduino приходят следующие данные (прим. 20, 30, 40 - данные температурного датчика):




Вы хотите их вывести в Zooper Widget Pro.
Для этого в Tasker'е:
1.0 Создаём новый Profile: + > Event > System > Intent Received
1.1 В поле Action пишем kg.delletenebre.serial.NEW_DATA
1.2 Сохраняемся (нажимаем назад). При выборе задачи нажимаем на New Task
2.0 Задаём любое имя новой задачи, например, ZooperTemperatureData
2.1 Нажимаем + > Task > If
2.2 В поля Condition:
%key [Equals] InDoor
Сохраняем
2.3 Нажимаем + > Plugin > Zooper Widget Pro
2.4 Нажимаем на карандаш справа от Configuration
2.5 В поле ZW Переменная пишем indoortemp
В поле ZW Текст пишем %value
Нажимаем Сохранить
Сохраняемся (нажимаем назад)
2.6 Нажимаем + > Task > Else
2.7 Нажимаем + напротив If
2.8 В появившиеся поля пишем
%key [Equals] OutDoor
Сохраняем
2.9 Повторяем пункты 2.3, 2.4
2.10 В поле ZW Переменная пишем outdoortemp
В поле ZW Текст пишем %value
Нажимаем Сохранить
Сохраняемся (нажимаем назад)
2.11 Повторяем 2.6 - 2.10 для . Соответственно в условии: %key [Equals] Engine
В ZW Переменная пишем enginetemp
2.12 Нажимаем + > Task > End If
2.13 Нажимаем назад до тех пор пока не выйдем на главный экран Android'а

3.0 Добавляем виджет Zooper желаемого размера.
3.1 Выбираем желаемый вид (пустой или встроенный шаблон)
3.2 Заходим в Макет
3.3 Вверху нажимаем (+) ADD
3.4 Выбираем модуль Текст или Текст с форматированием
3.5 В категории Текст выбираем пункт Отредактировать вручную
3.6 В верхнем (почти неприметном) поле пишем #Tindoortemp#
Сохраняемся (кнопка OK)

3.? Для остальных аналогично с пункта 3.3, можно добавить в новые виджеты или для этого же виджета создать два модуля Текст или Текст с форматированием. Соответственно в пункте 3.6 будут значения #Toutdoortemp# и #Tenginetemp#

djdonatas 20.04.2016 23:58

Круто! А есть (будет) какой-то вариант получить данные с двух источников (устройств), например с двух ардуин или с V4 контроллера Юры +по блютусу (когда будет) с ардуины?

DelleTenebre 21.04.2016 09:29

Цитата:

Сообщение от djdonatas (Сообщение 358932)
вариант получить данные с двух источников

Хорошая идея, попробую реализовать USB + Bluetooth :)

ali_vlad 24.04.2016 10:12

У меня такое предложение: добавить реакции на команду в ком-порте и добавить в "Категория" "Управление питанием" - "Сон" и "Выключение".
Ещё хотелка: перехват и отслеживание уровня яркости с отправкой команд в ком-порт.

kotya 24.04.2016 11:49

подскажите,есть подобное на windows?

DelleTenebre 24.04.2016 19:42

Выпуск 1.5 - многое изменил/оптимизировал, надеюсь к лучшему :) Есть небольшой минус, при обновлении скорее всего удалятся настроенные виджеты, а их настройки останутся мусором лежать в папке программы. Поэтому лучше или их удалить предварительно, или удалить программу и накатить по новой.

djdonatas, добавил возможность соединения по USB и Bluetooth одновременно.

ali_vlad, Сон теперь должен работать по "Эмуляция клавиатуры" > POWER. Выключение пока не реализовано, есть два варианта (c root'ом и без) буду пробовать (оставлю тут чтобы не потерять):
Код:

Intent i = new Intent("android.intent.action.ACTION_REQUEST_SHUTDOWN");
i.putExtra("android.intent.extra.KEY_CONFIRM", true);
startActivity(i);

Код:

Runtime.getRuntime().exec(new String[]{ "su", "-c", "reboot -p" });

Цитата:

Сообщение от ali_vlad
Ещё хотелка: перехват и отслеживание уровня яркости с отправкой команд в ком-порт.

Уточните, пожалуйста, Вы хотите отправлять уровень яркости с android'a к arduino или от arduino к android.

kotya, для Windows подобного подсказать не смогу, никогда не встречал.

ali_vlad 24.04.2016 21:35

По поводу управления питанием: некоторые андроид-боксы не реагируют на клавиатурные кнопки "сон" и "power", только физической кнопкой на самой плате андроида.
По поводу перехвата яркости. В андроид-боксах есть бегунок изменения яркости, как в телефонах, но он естественно ничего не меняет, а менять яркость только на внешнем контроллере с пульта. Так вот суть моего предложения в следующем: прога при загрузке считыаает уровень яркости в системе и отсылает команду в ком-порт. Далее прога отслеживает состояние уровня яркости, и, если он изменяется, то отсылает соответствующую команду в ком-порт. На том конце ардуина или контроллер YAM уже обрабатывает поступившую команду, ну и занимается её выполнением. Как-то так...

djdonatas 24.04.2016 21:37

Воу воу! Очень круто, я б купил! Когда, конечно дойдут руки настроить все =)
Может тогда к "протоколам" и например http добавить с простеньким api?
Тогда, по идеи, вообще количество и тип "источников" будет неограниченно. Да и те-же, допустим, 5 ардуин смогут скидывать свою инфу на шестую, которая будет сервером и будет отдавать уже оформленные данные. Сервер может и локальным быть и внешним.
зы: а сотрудничество с Юрой и его v4 контроллером продолжается? будет реализована отправка данных с виджета в контроллер и в шину?

oleg707 24.04.2016 21:57

Цитата:

Сообщение от ali_vlad (Сообщение 359133)
По поводу управления питанием: некоторые андроид-боксы не реагируют на клавиатурные кнопки "сон" и "power", только физической кнопкой на самой плате андроида.
По поводу перехвата яркости. В андроид-боксах есть бегунок изменения яркости, как в телефонах, но он естественно ничего не меняет, а менять яркость только на внешнем контроллере с пульта. Так вот суть моего предложения в следующем: прога при загрузке считыаает уровень яркости в системе и отсылает команду в ком-порт. Далее прога отслеживает состояние уровня яркости, и, если он изменяется, то отсылает соответствующую команду в ком-порт. На том конце ардуина или контроллер YAM уже обрабатывает поступившую команду, ну и занимается её выполнением. Как-то так...

по поводу яркости не проще ли датчик освещенности в контроллере поставить? тупо +1 нога


Часовой пояс GMT +4, время: 06:45.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot