LINUX.ORG.RU

Возможна ли на практике передача пары мегабайт данных по BT от внешнего устройства в Android-приложение в спящем телефоне?

 , ,


0

2

Самодельный девайс на базе какой-то ARM-платки с BT-интерфейсом лежит на столе, телефон лежит в кармане в обычном спящем режиме. Беру устройство, нажимаю на нём кнопку, устройство думает и сливает «в телефон» (в моё самописное android-приложение) 5 мегабайт произвольных данных в пределах минуты, а приложение это обрабатывает и засылает на какой-то сервер в интернете. Возможно ли такое на практике? Судя по тому, что умные браслеты что-то там сливают в телефон иногда, вопрос имеет право на жизнь, но я не знаю когда они это сливают - возможно только когда юзер берёт в руки телефон происходит этот апдейт?

Есть какие-то принципиальные препятствия в современных аппаратно-софтварных архитектурах типичных android-телефонов на то, чтобы какое-то спаренное с ними BT-устройство внезапно в любой момент времени по своей инициативе начало лить «в телефон» (в какое-то приложение) мегабайты данных, когда телефон просто спокойно спал на столе?

Дайте пару ключевых слов, названий каких-то методов API в андроиде, в которые мне надо погуглить, чтобы понять всю эту картину и что-то попробовать поделать?

Устройство - его пока нет, но предположительно это будет raspberry pi zero 2w с каким-то самописным софтом на сишечке. Задача устройства будет по нажатию кнопки проснуться, начать запись и кодирование звука в OPUS 25kpbs, а после минуты записи слить это по BT в приложение на телефоне. Этакий тупой диктофон для быстрых речевых заметок без собственных мозгов. Кстати принимаются советы о том, какую компактную ARM-платку можно поюзать для оцифровки звука с внешнего микрофона: у этого zero 2w я чё-то не нашёл встроенного audio adc. Нужен хотя-бы 1 канал 44100 hz и питание на электретный микрофон, ну либо mems-микрофоны встроенные в платку, что менее удобно, поскольку хочется подключить проводную гарнитуру.



Последнее исправление: lesopilorama (всего исправлений: 1)
Ответ на: комментарий от futurama

Задача: достал из кармана девайс, нажал вслепую одну кнопку, услышал двойной «пик пик» (девайс начал запись), сказал мысль, нажал кнопку ещё раз, услышал методию «тудуду» и уверен, что твоя мысль уже на сервер поехала - тебе на сайт, в телеграм канал или ещё куда, засунул девайс обратно в карман и забыл. sdcard - это какой-то нешуточный объём ручной возни и неблагодарность изобратетелям радио.

lesopilorama
() автор топика
Последнее исправление: lesopilorama (всего исправлений: 3)

Тебе не нужна ARM-плата. Достаточно любого готового BT-audio модуля к которому подключен микрофон, кнопка и батарейка. В настройках модуля надо указать что он только источник звука. Настраиваются модули обычно AT-командами засунутыми в их последовательный порт. Некоторые позволяют это делать и через bluetooth тоже. В телефоне цепляешься к модулю своей софтиной и слушаешь. Если используются какие-нибудь HFP или HSP профили, например, то по каналу rfcomm для AT команд будут приезжать текстовые уведомления о состоянии модуля, которые можно использовать для начала/конца записи.

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

Или вообще купить готовый Bluetooth микрофон (по сути стандартный BT модуль, аккумулятор, кнопки и микрофон в корпусе) ну и софтину свою научить с ним общаться.

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от Stanson

Нет. Это надо возиться с телефоном. То есть, доставать, открывать своё приложение, тыкать там «поехали». Телефон брать в руки вообще не хочется, кроме одного раза, когда ты девайс с телефоном спарил. Ну и в андроиде такая схема будет занимать канал «звонок», т.е. этот модуль будет работать как BT-гарнитура с поганым качеством и андроид-система будет постоянно висеть «в звонке», мешая другим нормальным звонкам, которые реально звонки.

lesopilorama
() автор топика
Последнее исправление: lesopilorama (всего исправлений: 2)
Ответ на: комментарий от u5er

Не спасиба. Костыль. Говорю же что телефон трогать не хочется. Если бы я хотел трогать телефон, я бы сделал бота для телеги, которому я голосовухи отправляю. Простоты и надёжности решения хочется как у 446-мгц рации охранника пятёрочки - вкл/выкл и PTT кнопка и чтоб всегда работало.

lesopilorama
() автор топика
Последнее исправление: lesopilorama (всего исправлений: 4)
Ответ на: комментарий от futurama

А какой канал связи? Взять железку с wi-fi и железка будет ждать, пока известная ей точка доступа появится («юзер пришёл домой»)? Энергозатратно и тормозно по скорости поступления контента в эфир. Телефон - такая точка доступа, которая всегда с собой, а BT - наименее энергоёмкий радиоканал, особенно когда спит. Оперативы ARM-платки хватит, чтобы похранить контент сколько-то минут, пока «BT-инфраструктура» раздупляется, чтобы его передать-принять. Оперативы щас дают много - от 256 до 1 гига - этого хватит, чтобы похранить мой .OGG файлик длиной в минуту. С 100500-кратным запасом, причём, потому что кодировать речь с помощью OPUS на более чем 25 килобита - уже немного смысла. А если если у меня уже оператива начала терять данные, то железка считай умерла совсем, тут уже не до чего-то остального.

lesopilorama
() автор топика
Последнее исправление: lesopilorama (всего исправлений: 1)

У жены на часах есть поиск телефона, телефон говорит «I’m here». Значит возможно телефон разбудить по-крайней мере. Наверное можно и данные передать. Телефон самсунг, часы хуавэй

anonymous
()

Я бы попробовал что то типа такого:

  • Bluetooth микрофон с динамиком(с креплением типа как петлички).
  • Bluetooth кнопка или даже две которые посылают сигналы на телефон.
  • На телефоне приложение выполняющее скрипт. Скрипт простой:
    • ждет сигнал начала записи, по сигналу посылает звук начала записи.
    • начинает запись с bluetooth микрофона.
    • по кнопке останова прекращает запись и посылает звук окончания записи.
    • запись поместить в очередь, так как может не быть соединения и когда появится тогда отправить накопившееся в очереди.

Вообще все это можно попробовать сделать уже из готовых bluetooth устройст и приложений, только скрипт надо будет написать ну или свое приложение. Если есть bluetooth кнопка с динамиком то вообще можно петличкой обойтись. А если есть петличка с динамиком и кнопками которые можно отловить на телефоне то вообще шикарно.

Также нужно учитывать что приложению может понадобиться разрешение на запись звука в фоне.

V1KT0P ★★
()

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

Первый пункт, я так понимаю, реализуется тем, что приложение висит в фоне. Сервисом там или как я не знаю. Второе говорит о том, что не нужен постоянный коннект.

Так что по крайней мере это всё возможно.

Dispetcher14 ★★★★★
()

5 мегабайтов в пределах минуты это довольно много, близко к теоретическому максимуму. Рассчитывай на скорость в 10 раз ниже. И даже с ней могут быть проблемы в особо неудачной ситуации. К примеру я сейчас переделываю ble устройство на работу с буферизацией. Мне надо передать за 10 секунд мегабит данных (т.е. нужна скорость в 10 КБ/с примерно). Изначально был буфер на 50 КБ, т.е. на 5 секунд, казалось, что этого хватит, но оказалось, что бывают ситуации, когда не хватает, пришлось приделывать дополнительную память на плату.

То, что ты хочешь, называется Android Foreground Service и это адский геморрой. Я такую задачу не делал, но предвижу кучу борьбы с андроидом, будь готов. Современный андроид ОЧЕНЬ не любит, когда приложения что-то пытаются делать в фоне. Ещё ключевые слова для поиска - Companion Device. В теории с нужными разрешениями андроид будет держать твоё приложение запущенным, пока видит девайс…

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

vbr ★★★★
()
Последнее исправление: vbr (всего исправлений: 6)
Ответ на: комментарий от lesopilorama

Это надо возиться с телефоном.

Нет, не надо.

То есть, доставать, открывать своё приложение, тыкать там «поехали».

Тыкать ты будешь на кнопку на микрофоне. А приложение твоё, которое в фоне висит, получит команду начать запись.

Ну и в андроиде такая схема будет занимать канал «звонок», т.е. этот модуль будет работать как BT-гарнитура с поганым качеством и андроид-система будет постоянно висеть «в звонке», мешая другим нормальным звонкам, которые реально звонки.

Не будет она ничего занимать, если твоё приложение будет этот девайс оприходовать.

Блин, почитай чего-нибудь про BT, что-ли…

Stanson ★★★★★
()

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

einhander ★★★★★
()
Ответ на: комментарий от Stanson

То что ты предлагаешь - не умеет гнать приемлимый битрейт риалтайм в телефон и зажато в рамки существующих звонильных кодеков. Качество речи там как из унитаза традиционно. Не катит. На уровень OPUS 25 kpbs эта звонильно-блютусная помойка никогда не поднимется. По этой причине на рынке не существует bluetooth микрофонов примерно вообще никаких нормальных.

lesopilorama
() автор топика
Последнее исправление: lesopilorama (всего исправлений: 1)

Дайте пару ключевых слов, названий каких-то методов API в андроиде, в которые мне надо погуглить, чтобы понять всю эту картину и что-то попробовать поделать?

Foreground service

Наверное это… У тебя вся суть чтобы твоё приложение висело в фоне всегда активным и по событию что-то делало, писало/читало звук, сеть по блютусу/вафаю, да чё угодно без разницы, главное чтобы висело в фоне и ловило события, кнопок/датчиков/сети/блютуса тут уже как у тебя душа пожелает.

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

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от lesopilorama

Это всё костыли. Не надежно.

Что именно не надёжно? Ты про полностью готовые железки или про самостоятельные? При готовых железках будет ясно что что-то не так если не будет сигнала в динамике, а сигнал будет только если приложение начало писать звук с микрофона но в файл попадет только то что после сигналов на динамик. Если вдруг не удалось соедениться с динамиком или что-то с прогой на андроиде то просто звука не будет на динамике, что уже является сигналом что что-то не так.

Я не спорю что свое железное решение лучше так как всё контролируешь, но можно и не заморачиваться если есть уже куча готовых устройств. Если найти что то типа Bluetooth Push to Talk где есть: соединение по блютузу, микрофон, динамик и кнопки начала и остановки записи, то надо только программу под него написать. Я бы даже попробовал поискать Bluetooth PTT в которой можно прошить свою прошивку. Готовое железо упакованное в компактное пространство с корпусом надо только под свои нужды прошивку переписать.

а после минуты записи слить это по BT в приложение на телефоне

Если критически надо записать даже если нет сейчас связи с телефоном то да, свое решение надо. Я что-то подумал что устроит даже в случае когда рядом всегда есть телефон.

у этого zero 2w я чё-то не нашёл встроенного audio adc. Нужен хотя-бы 1 канал 44100 hz и питание на электретный микрофон, ну либо mems-микрофоны встроенные в платку, что менее удобно, поскольку хочется подключить проводную гарнитуру.

Ты собираешься свою плату паять с дополнительной переферией подключать или навесной монтаж? Так там есть как минимум два SPI интерфейса, для них есть ADC конверторы.

Если нет то почему не взять плату где уже есть мини-джек для микрофона? Если нужно именно zero 2w то к ней можно докупить Raspberry Pi Codec Zero на котором и микрофон уже есть и мини-джек.

Или еще проще взять USB звуковую карту, они дешевые и компактные и тогда все вообще упрощается.

V1KT0P ★★
()
Ответ на: комментарий от V1KT0P

Короче ты не предлагаешь шагов в указанном направлении, пытаешься свернуть куда-то. Требуется только указанное направление прорабатывать, остальные обдуманы и признаны костылём и полумерами. Если мне надо свернуть с моего направления, то самое надёжное - взять телепхоне, открыть телегу и бахнуть голосовуху запиненному вверху боту, голосовуха сохранится даже если нет связи.

У BT нет возможности принять с внешнего микрофона звук с приличным качеством, отличным от «звонки» или «из унитаза», по этой причине на рынке не существует bluetooth-микрофонов, которые можно использовать для записи речи при сьёмке интервью или видосов. Все беспроводные микрофоны имеют USB-C «хост», в который они пуляют свой кастомный сигнал в 2.4GHz или 5ghz как старые радиомышки в век до современных версий блютусов.

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

Ты собираешься свою плату паять с дополнительной переферией подключать или навесной монтаж? Так там есть как минимум два SPI интерфейса, для них есть ADC конверторы.

Если нет то почему не взять плату где уже есть мини-джек для микрофона? Если нужно именно zero 2w то к ней можно докупить Raspberry Pi Codec Zero на котором и микрофон уже есть и мини-джек.

Это всё не важно, тут будет самый короткий путь (с требованием уместить в габариты nokia 3310). Главный цимес треда - пнуть спящий телефон через BT в рандомное время и слить ему произвольный мегабайт данных за какое-то обозримое время, хотя-бы за 1…5 минут.

lesopilorama
() автор топика
Последнее исправление: lesopilorama (всего исправлений: 4)
Ответ на: комментарий от lesopilorama

Качество речи там как из унитаза традиционно.

Ты шепелявишь, что-ли? Тогда да, кодек HFP хреново жмёт такое.

А если с речью нормально всё - то качества HFP более чем достаточно для голосовых заметок.

Или ты голосовые заметки тенором под скрипку с флейтой исполняешь?

Если тебе нужно для голосовых заметок под скрипку с флейтой, то всё равно BT модуля более достаточно - просто надо брать с CSR или другими микрухами под которые есть свободно доступные SDK. Нужно сделать его источником A2DP (обычно в SDK искаропки есть готовый профиль), а софтина в телефоне должна быть приёмником A2DP. И никаких малин-ардуин опять нафиг не надо. BT модуль, кнопка, микрофон, аккумулятор. Всё.

Скорее всего, в продаже есть Bluetooth микрофоны на микрухах которые можно перешить под другой профиль или залить свою прошивку.

Вообще это болезнь какая-то, когда DIYщик зачем-то подключает BT модуль к какой-нибудь ардуине или ещё какой малине при том, что в BT модуле процессора более чем достаточно для практически любых задач DIYщика. CSR-овский SDK для BlueCore, например, утёк 20 лет назад, а из-за того что он, разумеется, gcc использует, как и 99% всех SDK для BT микрух, то оно прекрасно работает под линуксом. Я им кучу всяких BT штук делал из стандартных BT-20 модулей с BC212 в то время когда ESP8266/ESP32 даже в проекте не было, ибо Espressif ещё не существовал. От того что потом назовут IoT - выключатели/датчики дома до всяких KWP1281/CAN затычек в авто, чтоб на телефоне с Симбианом всякие графики оборотов и пр. показывались в реалтайме или там сигналку чтобы машину телефоном открывать.

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

Stanson ★★★★★
()
Ответ на: комментарий от Stanson

А если с речью нормально всё - то качества HFP более чем достаточно для голосовых заметок. Или ты голосовые заметки тенором под скрипку с флейтой исполняешь?

Да, там бывает что с фортепиано. Или шёл мимо гитары, хоба поцоны смотрите песню сочинил. И хочется чтобы было слышно что-то килогерц до десяти приблизительно.

lesopilorama
() автор топика
Ответ на: комментарий от Stanson

Вообще это болезнь какая-то, когда DIYщик зачем-то подключает BT модуль к какой-нибудь ардуине или ещё какой малине при том, что в BT модуле процессора более чем достаточно для практически любых задач DIYщика

Ну с моей задачей оно не справится. Так что /thread этого обсуждя можно смело совершить.

lesopilorama
() автор топика

Какие же вы болваны. Такое может быть лишь у всех тех кто имеет доступ, а это корпорация телефонной фирмы, ну и дальше по-списку. Как Си-классы. В курсах о программировании? Забудь и не вспоминай никогда!

anonymous
()
Ответ на: комментарий от Stanson

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

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

lesopilorama
() автор топика
Ответ на: комментарий от Stanson

Скорее всего,

Дальше, разумеется, нечетал. «Скорее всего» - так и я могу балаболить.

Вообще это болезнь какая-то,

Очередное моралофажество. Но артемий лебедев в интернете уже есть, слезай с трона.

lesopilorama
() автор топика
Ответ на: комментарий от anonymous

Какие же вы болваны. Такое может быть лишь у всех тех кто имеет доступ, а это корпорация телефонной фирмы, ну и дальше по-списку. Как Си-классы. В курсах о программировании? Забудь и не вспоминай никогда!

Ты бухаешь чтоли. Ещё один подзаборный.

lesopilorama
() автор топика
Ответ на: комментарий от Stanson

Короче ты жесть как обосрался с этим постом. Решение-то о пробуждении андроид-приложения будет, нет? Чем туда отправлять аудио и каким образом - риалтайм через A2DP или в виде кастомного потока байтиков после окончания записи в самом девайсе - уже вообще вторичный вопрос. Только вот риалтайм не хочется потому, что самостоятельная запись в девайсе даёт кучу свободы апгрейда кодеков потом в одном месте и смены канала связи.

lesopilorama
() автор топика
Последнее исправление: lesopilorama (всего исправлений: 1)
Ответ на: комментарий от Stanson

софтина в телефоне должна быть приёмником A2DP.

Похоже ты и тут умудрился жесточайше обоссаться. Как из брансбойта жахнуло! Блютус так вообще не умеет работать в текущих реалиях 21 века, чтобы A2DP гнать из микрофона обратно в девайс. Иначе на рынке бы существовали нормальные BT-микрофоны для интервью.

lesopilorama
() автор топика
Последнее исправление: lesopilorama (всего исправлений: 2)