Как стать автором
Обновить

Делаем из битого планшета одноплатник: подключаем Android-устройства к дешевым микроконтроллерам через UART

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров34K
Всего голосов 73: ↑72 и ↓1+91
Комментарии61

Комментарии 61

Друзья! Надеюсь материал вам был полезен. Теперь, по традиции, рассмотрим наш будущий контент-план:

  1. Проект с машиной потихоньку развивается. Само собой машина не новая, потребовала после покупки некоторые вложения (система охлаждения не герметична, а по мнению прошлого владельца доводить антифриз до кипения, который при разгерметизации кипит на 95гр. и кататься на вентиляторе - норма). Я сейчас вообще почти денег, у меня долг 20 тыщ и надо купить радиатор с новым расширительным, но ребята из ТаймВеба помогают, за что им большое спасибо.

  2. Меня давно просят вернуть "классические" обзорно-технические статьи на редкие и диковинные смартфоны. Таковым на следующей неделе станет BlackBerry Priv - очень редкий, ценный и дорогой смартфон с QWERTY-клавиатурой! Я ходил с этим девайсом на протяжении более полугода как с основным и готов расписать все плюсики и минусы этого красавца.

  3. Многие читатели-олды давно предлагают мне параллельно с текстовым блогом пилить и видосы на YouTube. Я с этим согласен и у меня уже есть некоторые мысли для первых видосов (в основном, адаптация прошлых статей, потом будут параллельно видосы с новыми статьями). Осталось подкопить на китайскую пародию на гопро, штатив, петличку и адекватный микро для закадровой записи (уложусь в пределах 10-15к т.к все самое бомжатское) и думаю можно начинать :)

А ещё вчера мне подогнали крутейший девайс - Nokia N900!

А пару недель назад, ко мне приезжал читатель (тоже из Ейска) и лично привез Xperia X8, за что ему большое спасибо :) Очень приятно.

можно больше инфы или ссылку про "проект с машиной", перерыл ваши статьи до конца 2023 и не нашёл упоминаний

Это будущий проект, он только на подходе.

MaFrance351 верно подметил, проект пока только в планах. Сейчас занимаюсь машиной.

Двигатель УЗАМ-412 чувствует себя "нормально" при негерметичной системе охлаждения. Скорее всего речь о нем.

вообще-то исходные моторы хорошо работают и на 70* термостате. даже безопаснее.

Именно. Без давления, антифриз кипит на 90-95гр. УЗАМ и классический мотор работает и при 80 нормально

Салют, а я свой HTC One отправил вместе с «Дезиркой» и буком, или он у меня где-то валяется ещё? Там выход на матрицу вроде бы убился (ну или сама матрица, не сильно легче). Пытался вроде Линягу вкорячить, должен быть разлочен бут. С ним такое прокатит?

Привет. Да, они у меня :)

Хуан пока не смотрел, дезирку тоже. Периодически пинай в личку, я время от времени очень сильно в работу ухожу :)

Где конкретно выход на матрицу убился? На дезике? Ну, там буты лоченные с завода, но если HSPL живой то легко разлачиваются и да, линух тогда можно вкорячить) Но думаю там скорее шлейф крякнул.

Дезик жив, Х Уан сдох. Криво вставил шлейф и не заметил, всё пожёг %( обидно до чертей

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

А что мешает подключить Rpi Pico как USB serial устройство? Просто подключив через переходник к usb. Это должно работать без аппаратного ковыряния телефона/планшета, если он достаточно современный конечно. Отсутствие возможности зарядки телефона без отключения как единственный минут.

Нет дров на UART -> USB преобразователь к сожалению. Пробовал и не на одном девайсе.

Но! Если есть исходный код ядра для устройства, то ничего не мешает собрать внешний линкуемый модуль и потом просто сделать insmod :)

А вот интересно, на каких устройствах нет этого драйвера, а на каких есть? На моём Google Pixel 8 Pro я подключал esp32-c3 по usb к смартфону, и через какой-то serial terminal из Google Play без всякого рута мог работать с последовательным портом, полноценно читал и писал в порт. Т.е. usb-serial драйвер в ядра есть, со стороны андроида тоже что-то есть, раз рут не требуется. Andoid 14, версия ядра 5.15.131-android14-11-gd99d9fe08e0c-ab11209359

Не факт, что драйвер в ядре есть. Возможно прям в программе USB-стек заюзали напрямую, Android это позволяет!

чем дальше чем больше драйверов, но никто ничего не гарантирует...

До кучи:

можно без ESP32 обойтись.

Так в Pico нет конвертера USB-UART. Там программная его реализация средствами самого чипа RP2040. Поэтому запросто может быть, что FT232 или CH340 работают, а малина - неа.

Верно

Добрый день! У меня тоже есть в плане подключение старых телефонов/планшетов к (абстрактному) МК для отображения данных от них и для передачи им команд. Меня интересует реализация обозначенной задачи стандартными средствами как со стороны пациента (Андроид), так и со стороны МК, то есть без написания "своих" драйверов, "своего" USB-стека и т.п. По этой задаче еще конь не валялся, но тут подвернулась ваша публикация. Поэтому, пользуясь случаем, хочу... :)

Нет дров на UART -> USB преобразователь к сожалению. Пробовал и не на одном девайсе.

Но ниже вы пишите

Так что идея с USB вполне имеет право на жизнь.

Вы не стали реализовывать соединение через USB-стек, потому что тогда не получилось бы "общаться" с пациентом через терминал с ПК (хотя бы в целях отладки на начальном этапе)? Или же в целом реализовывать общение пациента с МК через USB-соединение слишком затруднительно? Какой МК можно использовать в качестве USB-хоста, если не надеяться на наличие хоста на чипсете телефона/планшета? ESP32? Я прочитал ваше утверждение по этому вопросу ниже, но вы все-таки его загнули в сторону AllWinner... Или с хостом на МК лучше не связываться, и подбирать пациента с наличием хоста?

Можете поподробнее прояснить ваш опыт по этим вопросам?

я наверное еще больше запутаю но попробую по рассуждать

драйвера популярных usb-serial микросхем (FTDI, CP, CH, Prolific) в андройды вообще включать никто не обещал но они встроены в ядро линукса и поэтому производителю нет особых проблем есть включить. В ESP32 в половине случаев тоже такие мосты стоят. Плюс сразу такой момент что на serial реле не повесить.

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

Собственно этот протокол прекрасно умеют реализовать самые простые контроллеры начиная с Atmega, тот же arduino, есть куча готовых библиотек/стэков и примеров, в основном в клиентском режиме

Более навороченный вариант есть именно для андройдов, используеться можно сказать специальный микроконтроллер который реализует специализированный хост для андройдов, (ADK или как то так называется), но широкого распространения это похоже не получило.

Наконец есть вариант обычной IP сети по RNDIS USB, тоже штатный протокол, что почти тоже самое что просто к ESP32 по WiFi подключится. НО RNDIS хост уже на линуксе проще сделать, а для WiFi есть и ESP32 и еще пара вариантов. Подключать андройды к самоделкам по WiFi и BLE - более чем популярно.

HID - это OTG, а оно появилось примерно в Android 5 и не в каждой модели.

OTG появился во времена планшетов на Android 2.3 и HID, очевидно, поддерживал сразу. OTG не было лишь в бюджетных ранних смартфонах, со времен MT6572 OTG был почти везде.

Почему не получилось? В Android есть API а-ля libusb для работы с устройствами из юзерспейса.

Без OTG можно только к уарту подцепится. И обычно уарт есть везде, даже +- открытый, просто иногда его нужно выцеплять из обвязки :)

При этом, у RPi Pico, как вы верно отметили, есть USB и стек TinyUSB. т.е фактически никто не мешает заюзать USB Accessory API, или напрямую дергать API для USB (в стиле libusb) линукса и напрямую управлять bulk-транзакциями :)

«ногодрыг» через BT-радиоканал

Идея не нова была даже платка с PIC.

Хорош еще вариант с USB входом, но вроде не часто такие делали.

USB-хосты есть даже на самых дешевых планшетах тех лет. Почему? Потому что в чипсетах помимо OTG-хоста был еще и полноценные USB-хосты, куда очень часто подключали Wi-Fi модули. Именно поэтому они выполнены в виде отдельных плат.

Убедится в этом можно, глянув на плату любого планшета на аллвиннере тех лет :) Так что идея с USB вполне имеет право на жизнь. А вот с BT есть куча проблем.

Хмм... А я то к экрану фоторезисторы прижимаю...

у вас есть андроид приложение для засветки участков экрана? Можно посмотреть исходники/проект?

Вот если б можно было дергать ноги через libgpiod, то было бы интереснее и проще использовать

В MTK GPIO можно из sysfs дергать, если вы сможете их достать с проца :) Также, можно экспортировать i2c в юзерспейс, я рассказывал как с аккаунта-псевдонима

@MDXE1337

Почти у всех этих устройств есть еще один итерфейс - тот, который для SIM карты предназначался. Его никак задействовать нельзя? Я понимаю, что это сомнительно, но вдруг?

AT команды в контроллер сотового модема Android как то же посылает.

Да и у (micro)SD интерфейса, помнится, был какой-то режим, который не запоминающее устройство, а для всяких хитрых устройств расширения.

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

Интерфейсом SIM управляет прошивка радиомодуля. Android общается с модемом с помощью RIL - абстракции от конкретной системы команд для модема, настолько лоулевельных операций там нет.

У MicroSD есть два режима: SDIO и SPI. Однако работает с ним модуль MMC, который не умеет обычно ничего, кроме как читать SD-карты)

Через ЦАП единственный адекватный вариант - так передают программы на спектрум через "аукс".

Android общается с модемом с помощью RIL - абстракции от конкретной системы команд для модема, настолько лоулевельных операций там нет.

Т.е. с sendEnvelopeWithStatus на практике ничего полезного сделать нельзя?

 Однако работает с ним модуль MMC, который не умеет обычно ничего, кроме как читать SD-карты)

Выходит, те NFC SD, которые в свое время пытались выпускать для тех, у кого прямо в телефоне интерфейса не было - работали с весьма ограниченным числом моделей телефонов?

Т.е. с sendEnvelopeWithStatus на практике ничего полезного сделать нельзя?

Маловероятно.

Выходит, те NFC SD, которые в свое время пытались выпускать для тех, у кого прямо в телефоне интерфейса не было - работали с весьма ограниченным числом моделей телефонов?

Видимо так. Я вообще особо не видел SDIO модулей в форм-факторе MicroSD (не SD)

Смотри фокус. Есть такая штука как "меню SIM" - оно же "SIM Toolkit". И это меню фактически работает не на самом телефоне, а именно на SIM-карте. Телефон рисует меню, но на каждое действие пользователя отправляет в симку запросы.

Поэтому если ты собрал эмулятор симки на микроконтроллере, то именно через это меню можно кидать в него команды. Так, например, работали в своё время сим-карты "20 в 1".

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

SDIO (точнее, подключение чего-то иного, нежели карт памяти) в потребительских девайсах уже мало где остался. Это КПКшное явление.

hp250g4 ноут (модификация аля планшет на n3050) стоит wifi/bt модуль usb/sdio и таких множество.

поскольку просто взять и открыть /dev/ttyMT3 с помощью FileInputStream 

здесь должна быть картинка с Арагорном

Боромиром

Тоже думал на эту тему. Я бы наверное в сторону блютуз полез. Т. К. Работал немного с ним на андройде и есп. Но с совсем старыми где андройд меньше 6 будут проблемы подружить с современным андройд сдк.
Uart вариант хороший, но у каждого устройства надо ещё его найти выходы и настроить связь с ними, не универсально.

Но с совсем старыми где андройд меньше 6 будут проблемы подружить с современным андройд сдк.

Ноль проблем. Пилю под Android 2.2+, юзая самый последний SDK :)

В статье ни слова про SELinux - а он может мешать работать с устройством UARTа, даже если его chmodнуть на 666.

SELinux можно выключить до ребута командой setenforce 0 под рутом, или же пропатчить cmdline в boot.img добавив туда параметр androidboot.selinux=permissive

Хотя, есть информация что трюк с cmdline может не прокатить если build variant == user. Подробнее: https://source.android.com/docs/security/features/selinux/validate?hl=en

Одноплатники хороши для какого нибудь законченного проекта - поставил например openwrt и забыл, где то оно там маршрутизирует. Да пару тысяч можно найти плату ATX с каким нибудь Core2DUO - воткнуть туда proxmox, нарезать 5 виртуалок по 512 мб памяти и Linux в придачу ( тут и роутер, почтовый сервер, web сервер, чат, sql база ... ). И есть уже на чем разбежаться фантазии

Только к плате ATX потребуется ещё и блок питания с корпусом, все это будет гудеть вентиляторами и есть ватт 60 вместо 5, да и места занимать в разы больше. :)

Да пару тысяч можно найти плату ATX с каким нибудь Core2DUO

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

И жрать такая сборка будет довольно много :)

А сборка из смартфона 2016-2020?

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

такие маитериалы как раз полезны тем у кого такой планшетник уже есть. При покупке я бы все равно посоветовал потратитсья на новый одноплатник и не изобретать велосипеды. Ну а если изобретать то на каком нить интересном одноплатнике за 700 руб.

как-то пропущен вопрос запуска линукс на произвольном планшете. А это самое трудное. Что касается UART, какое там напряжение может быть?

Обычно там 1,8 или 3,3 В. Иногда бывает, что к трём вольтам выводы толерантны, но всё равно лучше использовать преобразователь уровней, иначе есть риск спалить.

Ничего там не нужно использовать, диагностический UART на пятаках (не из обвязки) всегда 3.3В.

На аллвиннерах частенько достаточно прост образ на микросд записать и он сам подтянется :)

А ещё у наверное можно uart из hdmi выцепить если он есть.

Вопрос: Яблочный планшет можно так заюзать? На руках много 32-битных мощных планшетов, которые сброшены производителем с поддержки и обновлений. Тот же ipad 4

Первый айпад теоретически можно. Теортически.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий