Ios and android bluetooth controller

«Каких Марин?» или управляем контроллером через bluetooth с помощью мобильного приложения на Xamarin (Android)

В прошлой статье я пообещал рассказать, о том как подключать CANNY 3 tiny с помощью UART к bluetooth. И поскольку на этих майских особо не разгуляешься, было принято решение провести время с пользой и таки сдержать обещание. Но просто подключить контроллер к Bluetooth адаптеру HC-06, было бы слишком просто для Хабра.

Поэтому мы не просто всё подключим, но еще и напишем для нашей схемы примитивнейшее приложение для Android используя C# и Xamarin.

Если вы любите мониторить «концевики» и герконы, так как это люблю я, милости прошу под кат.

Вот о чем пойдет речь сегодня:

Часть I: Введение

Начну с хорошего, если не считать вставок программного кода на C#, то в этот раз статья будет сравнительно небольшая, потому что основные приемы работы с контроллером мы разобрали раньше. Чтобы не повторяться лишний раз, вот список статей, в которых мы уже разбирали основные приёмы работы с контроллером CANNY:

  1. «Раз, два, три – ёлочка гори!» или мой первый взгляд на контроллер CANNY 3 tiny — в этой статье мы разбирали что из себя представляет контроллер, а также азы работы в среде разработки CannyLab.
  2. «У Предназначения масса обличий. » или автоматизируем управление автолампой с помощью CANNY 3 tiny и фоторезистора — в этой статье мы разбирали работу с USB Virtual COM-port, подключение датчиков к АЦП, а также высокочастотный ШИМ на выходах контроллера.
  3. «Как зеницу ока. » или делаем простенькую охранную систему на базе микроконтроллера (CANNY или Arduino) и Raspberry PI — в этой статье мы разбирали работу с UART, а также повторили ранее пройденное.

При подготовке данной статьи я использовал следующее железо: контроллер CANNY 3 tiny, bluetooth адаптер HC-06, концевой выключатель (концевик Trema-модуль), геркон, старые проводные наушники, макетную плату, провода, «крокодилы».

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

Все что будет изложено в данной статье, выдумано чисто в учебно-демонстрационных целях. Я просто хотел показать, некоторые приемы работы с контроллером, а также, чтобы купленные в свое время железки хоть как-то отработали свою стоимость.

Несмотря на далекий от реальности характер решаемой задачи мы представим, что делаем систему мониторинга за раздвижной дверью купе. Когда она начнет движение, сработает геркон, а в конце пути даст сигнал концевик. Если нам надо будет привлечь внимание, например, чтобы дверь обратно закрыли, мы подадим «писклявый» сигнал через динамик. Правда динамика у меня нет, но зато есть старые наушники.

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

Часть II: Подключение схемы и программа для CANNY 3 tiny

Для начала, чтобы никого в авторских правах не обидеть уточню, что идею подключить контроллер к HC-06, по управлять им через приложение «Serial bluetooth terminal» и некоторые приемы при разработке диаграммы, я позаимствовал с форума, но само собой я их адаптировал под свою задачу.

Схема подключения выглядит следующим образом:

Концевик и геркон подключены к выводам контроллера №6 и №5, наушники к выводу №4 (у него есть ВЧ ШИМ), UART RX – это вывод № 1, UART TX – вывод № 2, вывод № 3 используется для подачи «+5В», вывод «-» — для связи с «землей».

Вот как это выглядит в сборе:

Диаграмму (программу) для СANNY 3 tiny я разрабатывал в CannyLab версии 1.42, возможно в других версиях среды разработки и с другими контроллерами, надо будет внести изменения в диаграмму.

Вот, что получилось:

Блоки связанные с настройкой контроллера и отправкой сообщения по UART, разбирали в прошлой статье.

Разберём подробней два оставшихся.

Блок «Получение сообщения по UART», отвечает за включение сирены(наушников). В принципе он нужен, чтобы разобрать пример, получения сообщения по UART.

Вначале мы проверяем есть ли полученные данные в UART, если есть, то подаем на вход «Е» D-триггера единицу, в таком случае триггер копирует значение со входа “D” в который мы запишем первые два символа из сообщения пришедшего по UART. Я не хотел всё усложнять поэтому дальше мы используем простую схему. Предполагаем, что по UART к нам придет любое число от 00 до 99, переводим это число из символьной формы в числовую (рекомендую почитать как работает блок конвертера у меня с ним был небольшой «затык»). Дальше любое значение «>0» на входе детектора переднего фронта вызывает единичный сигнал, который включит на 5 секунд выход №4, работающий в режиме ВЧ ШИМ.

Читайте также:  Visual studio android emulator with android studio

Вы можете в настройках поиграться с периодом заполнения ВЧ ШИМ, от этого будет зависеть, звук в наушниках.

Перейдем к блоку «Формирование сообщения». Его реализация на первый взгляд может показаться необычной. Объясняется это тем, что я толком не разобрался как работать с программой Serial bluetooth terminal и с аналогичным bluetooth протоколом в Xamarin.

Забегу немножко вперёд и скажу, что я так и не научился гарантированно получать на смартфоне отправленное с контроллера сообщение. Если с проводным UART в прошлой статье все было очевидно, то с Bluetooth на практике вместо отправленного сообщения может прочитаться только его часть и смысл передаваемой команды нарушиться.

Я решил, что самое простое решение — это передавать одно число, которое гарантированно дойдет до адресата без потерь.

В нашем случае мы мониторим дискретное состояние геркона и концевика. То есть у нас всего 4 возможные комбинации: геркон и концевик выключены, включен только кто-то один, оба включены.

Поскольку геркон и концевик дают дискретный сигнал (0/1) нужно как-то их различить. Для этого умножим значение сигнала геркона на 2. Теперь получается, что сумма сигналов даст нам значения от 0 до 3.

Теперь разберем не очевидный вариант с прибавлением к этому значению пятидесяти. Дело в том, что CannyLab передает в UART пару символов, то есть вместо 3 допустим 03, но как я говорил есть риск потери части информации. Например, из значения 01, программа на смартфоне может прочитать только первый «0», а это уже будет ошибка.

Можно было бы заморочиться и преобразовать данные, заменив, например символ «D1» регистра какой-нибудь буквой или пробелом, но я решил сделать проще. Я превратил значение 01 в 51 (02 в 52 и т.д.). Пятерка не несет сигнала и я ее вырезаю на уровне программы для смартфона. Таким образом, у нас всегда гарантированно остается полезная часть сообщения.

Загружаем программу в контроллер, нажимаем «запустить», если все работает как задумано, то HC-06 начнет периодически мигать красным светодиодом.

Далее сопрягаем смартфон с адаптером. Теперь можно проверить работоспособность в приложении «Serial Bluetooth terminal» или любом другом с похожим функционалом.

Запишите адрес Bluetooth адаптера, он нам пригодится в следующей главе.

Как видите данные приходят, в зависимости от состояния датчиков, а если отправить «11», то в наушниках послышится противный писк. Можно было бы на этом и остановиться, но давайте набросаем примитивное приложение.

Программу для контроллера и исходный код программы для смартфона можно скачать с GitHub

Хотелось бы отметить, что вам не обязательно реализовывать всё в железе именно на контроллерах CANNY, вы вполне можете написать программу для Arduino или другого любимого вами контроллера. Изначально я и сам планировал написать дополнительно еще и версию скетча для Arduino, но поскольку убил почти все майские праздники, на подключение CANNY и приложение для смартфона у меня уже просто не осталось сил.

Часть III: Пишем приложение на Xamarin для Android

Я знаю, что Xamarin скажем мягко – не самое популярное решение для мобильной разработки. И возможно у вас уже возник вопрос: «Почему я его выбрал?». Ответить на него мне бы хотелось словами из одноименной песни Псоя Короленко:

Честно, нет никаких объективных причин. Просто пару лет назад я учил азы C# и все хотел посмотреть, что такое Xamarin. И теперь из-за «самоизоляции» наконец-то дошли руки.

Ну и еще раз напомню. Я первый раз встречаюсь с Xamarin и это мое первое приложение для Android. Не стоит слепо копировать мой кривой код, если вдруг вы сможете найти более красивое решение, воспользуйтесь им.

При разработке своей программы я опирался на этот материал. Статья не особо разжевана, да еще и на испанском, поэтому я всё-таки счел уместным поделиться с вами своей вариацией на эту тему.

Я собирал программу в Visual studio 2019 community edition.

Первым делом создадим новый пустой проект для Android (Xamarin), как на картинке.

Я вносил изменения только в три файла, целиком их можно просмотреть на GitHub, а тут разберем только важные части:

В стандартный шаблон добавлены 2 разрешения:

activity_main.xml
Был убран контейнер по умолчанию (RelativeLayout). Вместо него был добавлен, контейнер LinearLayout просто потому, что он проще. В данном контейнере все элементы выравниваются по вертикали, растягиваясь на всю ширину экрана.

Любому человеку немного знакомому с HTML вёрсткой или XML не составит труда разобраться со структурой пользовательского интерфейса. У нас есть три доступных только для чтения текстовых поля (TextView), один переключатель(Switch), который работает по сути как чекбокс и одна самая обычная кнопка(Button). Элементы можно разместить на форме путем перетаскивания из конструктора, а в окне свойств или в коде задать им более удобные Id, текстовые заглушки и другие параметры.

Читайте также:  Геометрия даш приватный сервер андроид

Осталось описать логику программы.

Ниже под спойлером код целиком для удобства

Теперь по частям.

Блоки с подключением пространств имен, объявлением класса и т.п. я пропущу.

Создаём переменные с которыми позже свяжем элементы пользовательского интерфейса:

Дальше идет, код из примера на который я опирался. Переменные (поля) необходимые для работы тех или иных методов.

Нам здесь важно вбить адрес вашего модуля HC-06 в поле address.

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

Этот метод создается автоматически, наша задача связать в нем объекты UI с полями класса, а также привязать обработчики для реакций на события ( startSiren.Click и bltSwitch.CheckedChange ).

Проверяем подключение по Bluetooth:

Включение сирены. По сути просто отправка символов «11» в контроллер:

Проверка состояния переключателя (если смещен в право значит включён):

При включении начинаем соединение с Bluetooth.

Реализация непосредственно подключения:

А вот один из самых важных методов — непосредственно считывание данных:

Многие элементы метода я оставил как в примере, как я понимаю вначале создается соединение с потоком данных, если в буфере с прочитанными данными, что-то есть то оно считывается в переменную valor . При этом как я и обещал, цифру «5» мы просто удалим.

Дальше мы убираем из считанного сообщения все символы кроме цифр string command = new string(valor.Where(char.IsDigit).ToArray());

Ну а после уже все просто в зависимости от того какое число нам пришло, выводим тот или иной статус в UI.

Эти два метода я кардинально не менял:

Как я понимаю в данном блоке кода реализованы отправка сообщения и обработчик события на зарос разрешения доступа к Bluetooth.

Как ни странно, но все работает:

Часть IV: Заключение

Вот как работа программы выглядит в натуре:

Вот таким был мой первый опыт разработки приложений для смартфона на Android.

Хотелось бы отметить, что VS 2019 и Xamarin на моем стареньком компьютере работают очень медленно.

При первой сборке проекта, я реально успел съесть еще этих мягких французских булок да выпить чаю. Также само приложение получилось откровенно убогое, переключатель «вкл/выкл» работает очень не удобно, но с другой стороны учитывая, что я лишь немного знаком с базовыми приёмами разработки для .NET, а также то, что я вообще не программист, я смог даже не проходя целиком ни одного туториала и ни одного урока, за день набросать свое первое приложение. Поэтому порог вхождения для создания элементарного приложения получается достаточно низкий.

Я так понимаю, контроллеры CANNY можно использовать при тюнинге автомобилей, особенно отечественных так, что вполне можно сделать какую-нибудь «фичу» и написать к ней приложение для смартфона. Главное помнить, что при питании от бортовой сети автомобиля на выходах контроллера будет тоже напряжение что и на входе (например, 12 В вместо 5 В). Не забудьте защитить Bluetooth адаптер, чтобы он ненароком не вышел из строя.

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

Источник

Как выбрать геймпад для вашего смартфона

реклама

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

Интерфейс подключения

Если вы планируете подружить геймпад со своим мобильным устройством, в первую очередь нужно обратить внимание на поддержку игровым контроллером подключения по Bluetooth. Конечно, вы можете подключить проводной геймпад к телефону, через переходник micro-USB — USB, или через OTG-кабель, но это сработает только с устройствами на Android. К тому же, такой способ подключения не удобен в плане эксплуатации:

Однако, если речь идёт об устройствах под управлением Android, к таким устройствам можно подключить геймпад не только с помощью Bluetooth и проводного соединения, но и с помощью проприетарного 2.4ГГц USB-приёмника из комплекта некоторых моделей беспроводных геймпадов. В таком случае можно обойтись без поддержки Bluetooth, но и такой способ подключения не совсем удобен, ведь вам понадобится дополнительный переходник или OTG-кабель. А если говорить о подключении геймпадов к устройствам на iOS, к этой мобильной платформе геймпады можно подключать только по Bluetooth. Без вариантов.

Читайте также:  Wi fi direct для android

реклама

Поэтому, для подключения игрового контроллера к смартфону или планшету, Bluetooth — наше всё:

Совместимость

реклама

Android: совместимость игрового контроллера с устройствами на Android зависит от версии ОС, прошивки, вендора и погоды на Марсе. Но в большинстве случаев, начиная с Android версии 8.0 и старше, любой геймпад с поддержкой Bluetooth будет корректно работать с вашим смартфоном и определяться в играх, при условии, что в них есть поддержка управления с помощью контроллера. Тем не менее, перед покупкой геймпада, имеет смысл изучить вопрос его совместимости с вашей моделью смартфона/планшета или прихватить смартфон/планшет в магазин и проверить совместимость на месте. Мало ли.

iOS: с iOS дело обстоит похуже. На сегодняшний день, полноценной поддержкой в iOS и iPadOS наделены геймпады следующих вендоров: Gamevice, Steelseries (не все), Microsoft (XBox One геймпад с поддержкой Bluetooth, в iOS 13 и старше), Sony (DUALSHOCK 4, в iOS 13 и старше) и ещё целый ряд геймпадов из Китая, из более менее известных — геймпады Gamesir (не все). MFI (Made for iPhone) совместимые геймпады будут работать «из коробки» во всех играх, где есть поддержка игрового контроллера:

А вот множество прочих геймпадов из поднебесной, с декларируемой ”iOS совместимостью”, как правило умеют подключаться по Bluetooth к устройствам от Apple, но не работают полноценно, как MFI совместимые девайсы. Такие геймпады определяются системой, как клавиатуры или iCade устройства, и работают в рамках собственного приложения-клиента с фиксированным набором игр, доступных только внутри приложения. К тому же, само приложение-клиент зачастую приходится качать и ставить через пятую точку. На выходе мы получаем с десяток странных игр на китайском, плюс всякое неинтересном казуальном старье из App Store. Но не факт, что даже это старьё заработает с таким геймпадом:

реклама

Отдельной строкой стоят игровые устройства, идущие в комплекте с собственным софтом для маппинга управления. Тут дела обстоят значительно интересней. За счёт маппинга у вас появляется возможность использовать такой контроллер практически в любой игре, есть в ней поддержка геймпада или её нет (об этом в конце статьи):


Steam Controller: совместим и с iOS, и с Android, но только в рамках собственного приложения Steam Link, позволяющего стримить игры с ПК на экран смартфона или планшета. Приложение доступно для скачивания в App Store и Google Play. Кому интересно, вот тут об этом изложено подробней. Всерьёз рассматривать Steam Controller для полноценного мобильного гейминга не приходится, но в рамках собственного приложения контроллер работает отлично:

Держатели для смартфона

Без таких приспособлений играть геймпадом в игры на телефоне неудобно. Если вы выбираете геймпад с прицелом на мобильный гейминг, важно чтобы возможность крепить смартфон была «из коробки». Впрочем, на Али можно найти «держалки» для любого геймпада, но придётся подождать доставки. Варианты крепления телефона бывают: в виде отдельного, съёмного держателя:

непосредственно самого геймпада, выступающего в роли держателя:

или крепления типа зажим, для моно-геймпадов:

Маппинговые сервисы

Относительное новое явление в индустрии мобильных игр. Отчасти, такие приложения можно считать читерскими. Они нужны для игр, в которых нет поддержки геймпадов вовсе. С помощью маппинга, в таких играх можно полноценно задействовать не только геймпады, но и клавиатуры с мышью (с помощью специального адаптера). В приложениях-клиентах от производителя поддерживаются геймпады только собственного производства. Совместимости с геймпадами сторонних вендоров в них нет. Но для Android всё же есть одно универсальное приложение-маппер — Octopus. Возможно есть и другие, но я знаю только про это. Под iOS универсального приложения точно нет. Для понимания, как это работает, вот вам пара примеров настройки маппинга через сервис Flydigi Flashplay™ для геймпадов одноименного бренда:

А так всё это выглядит непосредственно в процессе игры:


Ретро гейминг

Для платформы Android существует множество эмуляторов старых игровых консолей. Вот те, которыми пользуюсь я:

— John SNES (Super Nintendo);
— John NES (Nintendo Entertainment System, Dandy);
— MAME4droid (Multiple Arcade Machine Emulator);
— PPSSPP — PSP emulator (PlayStation Portable);
— ePSXe (PlayStation One);
— Colleen (Atari 8Bit: 400, 800, XL and XE series);
— Genplusdroid (Sega MegaDrive/Sega Genesis).

Пример игры в контру через эмулятор NES:

Лично для меня, эмуляторы старых консолей — это наиболее подходящая область применения для связки телефон-геймпад. В полноформатные игры я предпочитаю играть на ПК, сидя перед экраном нормального размера. Но конечно же — это вопрос дискуссионный.

Для более подробного ознакомления с вопросом, в теме по геймпадам есть ссылки на обзоры некоторых приведённых в статье для примера устройств.

Источник

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