Делаем из битого планшета одноплатник: подключаем Android-устройства к дешевым микроконтроллерам через UART
В наше время, из-за санкций одноплатники стали стоить каких-то «конских» денег. Даже б/у RaspberryPi Zero стоит 2-3 тысячи рублей на барахолках, что, мягко скажем, не совсем лояльная цена для «самого дешевого одноплатного компьютера в мире». Конечно, Orange Pi Zero всё ещё можно купить в пределах 1.500-2.000 рублей, но как по мне и эта цена не слишком лояльна за те характеристики, который предлагает такой одноплатник. С другой стороны, Android-планшеты 10-летней давности продаются на барахолках по 100-300 рублей, что выглядит гораздо привлекательнее, причём на некоторые устройства практически без костылей можно установить полноценный дистрибутив Linux! Вероятно, многие читатели скажут мол «автор бомж» и будут правы: ведь в рамках этой статьи, я хочу рассказать о том, как использовать полурабочий древний планшет в качестве полноценного одноплатника путём подключения его к микроконтроллеру и выводу GPIO! Сегодня мы с вами: узнаем, как подключить микроконтроллер к шине UART в планшете и научимся работать с последовательной шиной в Android прямо из Java и нативных программ. Интересна моя концепция антикризисного одноплатника? Тогда добро пожаловать под кат!
❯ Зачем это нужно?
Пожалуй, нельзя сказать, что подобная концепция пристраивания старых планшетов — вопрос исключительно цены. 2-3 тысячи рублей не такие уж и большие деньги и при желании можно купить хотя-бы Б/У, но всё таки полноценный одноплатник с нормальной GPIO-гребенкой. Однако здесь стоит вопрос не столько дешевизны, сколько E-Waste: зачем выкидывать в помойку потенциально рабочие планшеты с живым процессором, если их можно пристроить куда-то ещё?
На самом деле, планшеты с ROOT-доступом уже из коробки могут выполнять весьма полезные задачи, как, например, хостинг http-сервера для домашней страницы, работать как панель с часиками и погодой, или, например, работать в качестве HMI-панели для оформления заказов в шаурмечной. Кроме того, многие планшеты на базе смартфонных чипсетов (MediaTek, Spreadtrum) имеют полноценный Bluetooth-модуль, что позволяет «подружить» планшет с микроконтроллером через радиоканал, что значительно расширяет возможный спектр применений.
Преимуществ у такого подхода много: у «пожилого» планшета уже есть большой, достаточно качественный (хороший TN, либо даже IPS) дисплей с тачскрином, который поддерживает мультитач, GPU для вывода 3D-графики, 3.5мм для вывода звука + встроенные динамики, а также весьма неплохое, по сравнению с дешевыми одноплатниками, железо. Звучит весьма вкусно для цены в 300 рублей: собрать хоть немного похожую конфигурацию на базе RPi выйдет в 10-15 тысяч рублей (учитывая дороговизну MIPI-матриц с тачскринами + цену самой «малинки» и обвязки для аудиотракта).
Но при всех перечисленных достоинствах, атрибутом любого полноценного одноплатника является наличие GPIO — и даже здесь мы сможем с вами выкрутится! Первый способ, о котором я чуть выше вскользь рассказал, позволяет реализовать общение с МК и «ногодрыг» через BT-радиоканал, но минусы такого подхода очевидны (МК с BT дороже, радиоканал потребляет дополнительную энергию, некоторые могут посчитать BT небезопасным). Однако есть и второй подход, который заключается в использовании диагностических пятачков UART на плате устройства для наших личных целей!
С таким подходом можно использовать как «голый» Linux, используя концепцию, которую я представил в этой статье, так и взаимодействовать из Java-приложений для Android (что даёт уже, как минимум, удобный GUI-фреймворк). Сегодняшняя статья будет «без воды», только чистая конкретика, поэтому давайте перейдем к реализации!
❯ Подготовка
Как я уже говорил выше — в рамках данной статьи мы рассмотрим использование UART в планшете для наших собственных целей. UART — это двунаправленная полнодуплексная цифровая шина, которая позволяет обеспечить стабильную передачу данных при относительно невысокой скорости, измеряемой вбодах. То есть, быстро стримить картинку с её помощью вы не сможете, но сможете, например, получить состояние входов МК, прочитать что-то на шине I2C, используя мост UART -> I2C или, например, прочитать показания датчиков, которые МК предварительно опросил.
Сама по себе концепция очень простая: многие китайские производители планшетов и смартфонов не только разводят UART в виде отдельного пятачка на плате, но и подписывают его, задействуя UART-канал как вывод для логов ядра, а иногда и предоставляя доступ к рутовой консоли! В свою очередь, из юзерспейса мы можем получить доступ к UART с помощью устройства/dev/ttyS<x>на подавляющем числе чипсетов и/dev/ttyMT<x>на MediaTek. Однако учтите, что в некоторых случаях придется патчить загрузчик, дабы редиректнуть логи ядра в /dev/null.
Однако наличие UART на плате — не всегда признак того, что он сконфигурирован в системе верно. Например, на смартфонах с чипсетами SC6820 нормально завести UART я так и не смог, а на некоторых устройствах на базе MT657x нужно патчить загрузчик, дабы он «увидел» нужный канал UART! В моём случае, героем статьи стал планшет Prestigio, у которого отказал тачскрин, но был доступен UART:
Конкретно в моём случае, после установки последней официальной прошивки планшет перестал слать логи на UART и устройство /dev/ttyMT3 оказалось доступным для наших операций, в вашем же случае может потребоваться настройка devicetree, или просто патчинг загрузчика, дабы редиректнуть консоль на другой вывод UART. Кроме того, необходимо обязательно получить root-доступ хотя-бы к adb shell, поскольку доступ к /dev/tty устройствам возможен только от имени суперпользователя. Как же проверить UART на возможность чтения/записи? Сначала нам необходимо взять ESP32 или любой UART-USB преобразователь, припаять сигнальные линии RX/TX и использовать любую программу для работы с последовательным портом, например Putty. Заходим в adb shell, и пишем что-нибудь в консоль:
Вуаля! Всё работает :)
Работает? Замечательно, значит мы сможем использовать планшет вместе с микроконтроллером! Переходим к практической реализации нашего приложения!
❯ Используем из Java
Я специально решил выделить для Java-подхода отдельный раздел, поскольку просто взять и открыть /dev/ttyMT3 с помощью FileInputStream не выйдет. Дело в том, что даже несмотря на наличие root-доступа, по факту ни одно Android-приложение его не имеет (за исключением подписанных системных в папке /system/app/) и для всех операций, требующих повышенных привилегий, либо распаковывают и запускают внешнюю нативную программу из под суперпользователя, либо с помощью специального костыля с запуском sh-программ читают/пишут нужные блочные устройства сами. Связано это с тем, что все Android-приложения работают в хост-процессе app_process, который форкается (отпочковывается) от «главного» процесса, который запущен из под «простого» пользователя, который не находится в группе system.
Здесь концепция также очень простая: su имеет аргумент -c, который позволяет запустить команду от имени root-пользователя и возвращает объект процесса, дабы мы потом могли перехватить stdout:
Таким образом, для чтения текстовых данных из UART'а нам достаточно лишь периодически «слушать» stdout команды cat и обрабатывать данные:
Костыль, но со вкусом :) Если вас не устраивает такой подход или ваше приложение значительно более комплексное, вы можете использовать UART и из под нативных программ.
❯ Используем из C
Работа с последовательными портами в Linux не отличается от работы с любыми другими файлами и устройствами: вызовов open, read, write и close обычно хватает и лишь иногда к ним в довесок нужен ioctl.
int fd = open("/dev/ttyMT3", O_RDWR);
int result = write(fd, command, strlen(command));
Для работы с терминалом необходимо использовать модуль termio который предоставляет все необходимые структуры для настройки режима работы терминала, в т.ч и бодрейт. Дело в том, что изначально последовательное устройство настроено на режим работы в качестве терминала, т.е драйвер отдаст данные только после того, как устройство на UART пошлёт \n, или превысит размер внутреннего буфера для сообщения. Если вам нужно работать с бинарными данными и получать их «на лету» — необходимо настроить последовательный порт в «binary» режим:
tcgetattr(modemFd, &tio);
tio.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
tio.c_oflag &= ~(OPOST);
tio.c_cflag |= (CS8);
tio.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG);
tcsetattr(modemFd, TCSAFLUSH, &tio);
Если же вам достаточно текстового терминального режима, то можно продолжить как есть и использовать fgets, fscanf и прочие удобные функции из libc! О том, как собрать нативную программу для смартфона и как вообще выбросить Android из него, читайте в моей отдельной статье.
❯ Заключение
Вот таким образом можно использовать проводную шину в планшете для собственных нужд! Как видите, совершенно ничего сложного и используя эти наработки, я реализовал уже не один проект! Надеюсь, материал вам был интересен и полезен :) Пишите своё мнение, можно ли использовать дешевые планшеты по 300 рублей в качестве одноплатников?
Статья была подготовлена при поддержке TimeWeb Cloud. Подписывайтесь на меня и @Timeweb.Cloud, дабы не пропускать новые статьи каждую неделю! Ну а больше подробностей о будущем контенте, как обычно, в первом комменте! Также у меня есть свой Telegram-канал, куда я выкладываю свои мысли, советы по ремонту и моддингу различных гаджетов, а также вовремя публикую ссылки на новые статьи!
Идея для браузерного плагина
Плагин, который вместо того, чтобы скрывать рекламу, показывает рядом с баннером, сколько рекламодатель платит за один клик.
В Питере шаверма и мосты, в Казани эчпочмаки и казан. А что в других городах?
Мы постарались сделать каждый город, с которого начинается еженедельный заед в нашей новой игре, по-настоящему уникальным. Оценить можно на странице совместной игры Torero и Пикабу.
Реклама АО «Кордиант», ИНН 7601001509
Как я начал писать текстовую MMORPG игру с огромным открытым миром
Приветствую!
Начать рассказ о себе без пары слов о прошлом было бы странно. Поэтому коротко и ясно, без лишних подробностей: мне 35 лет, и по меркам нынешней молодёжи, я уже "дед". Последние 10 лет я посвятил маркетингу и рекламе, а в свободное время запустил YouTube-канал по программированию, помогая новичкам осваивать эту невероятную сферу современного мира — IT.
О себе...
Мужчина 35-ти лет, смотрящий на игровой остров, как я в свои 35 смотрящий на будущее моей игры!
Моя семья — это моя опора: супруга и двое детей. Благословен тем, у кого есть время для хобби. Одно из моих — программирование.
Легенда о геймере, который стал создателем игры
Мои годы в играх
Моя молодость пронеслась в мире виртуальных приключений, где я накопил более 10 000 часов в таких играх, как:
Dota 2: 2,748.5 часов
CS:GO: 931.8 часов
RUST: 899.7 часов
Miscreated: 1,586.2 часа
Age of Empires 2, 3 & 4: примерно 700 часов
И множество других...
К 30 годам я решил отказаться от всех игр на ПК и консолях, отдав последние в дар родственникам.
Вдохновение из прошлого
Поворотным моментом стала статья о первых текстовых играх 1980-х. Вспомнив свои опыты с текстовыми играми во времена wap-интернета, я задумался: а что если совместить мои хобби в одном проекте?
Рождение Идеи: Текстовая MMORPG
Первые шаги
Начинал я без понятия о том, как создавать игры. Но теперь я знаю, что такое игровой сеттинг, ЛОР и другие ключевые элементы разработки. Моя цель — создать огромный виртуальный мир, где игрока не сковывает линейность.
Технические детали
Я начал с Python 3 и написал логику для генерации игровой карты размером в 1,000,000 ячеек — это 100 на 100 километров. Создать такой масштаб в текстовом формате было вызовом: каждая ячейка — это 100 на 100 метров.
Примерно через 3 дня стараний я сделал это:
Техническая картинка, которая получена сугубо скриптом Python
А в игре для игроков это выглядит красивее и примерно вот так:
По мере прокачки вы получаете больше информации и карта дает ее в том числе
Этапы Разработки
Альфа-версия: Игра уже доступна для тестирования с функциями изучения местности, крафта, добычи ресурсов и прочим.
Бета-версия: Очень скоро.
Релиз.
Еженедельные обновления.
Что дальше?
Я ищу активное участие и обратную связь. Ваши комментарии и советы помогут улучшить игру и сделать её интереснее для всех.
Присоединяйтесь!
Проверьте наш игровой бот: Telegram
Мой канал на YouTube: Andrievskii
Официальный сайт игры: Wild World Fun
Заключение
Я верю в силу честности и открытости. Поделитесь вашими впечатлениями и помогите мне сделать игру лучше!
P.S. Ради чего пост здесь?
Я не знаю, принято ли сейчас говорить правду, говорят это не модно и т.д. Но в свои 35 я верю, что даже горькая правда лучше сладкой лжи. Написал я здесь по следующим причинам:
Мне нужны игроки в игру
Мне интересно получить мнение со стороны
Мне интересен эффект от этой статьи, как маркетолога
Я верю, кто-то здесь поможет мне в развитии игры, как минимум советами и сюжетом
Давайте так, ваши комментарии и реакции пусть покажут мне, насколько стоит продолжать описания о игре здесь и вообще здешней аудитории это интересно или нет!
А пока вам скрины с телеграмм бота самой игры:
Скрины из самой игры, это примерно 30% того, что уже есть в игре...
Курсы по Android-разработке с нуля
Android-разработка – создание мобильных приложений для операционной системы Android, платформы с огромной пользовательской базой. Эта область востребована в различных секторах, от социальных сетей до финансов. Это привлекательная область для тех, кто хочет освоить новую профессию в IT или расширить свои навыки в программировании.
Обзор курсов
«Android-разработчик» от Яндекс Практикум с возможностью взять паузу.
«Android-разработчик с нуля» от Нетологии с самым большим количеством проектов.
«Профессия Android-разработчик» от Skillfactory – самая продолжительная программа.
«Android-разработчик: быстрый старт в профессии» от GeekBrains – самый короткий курс.
«Android-разработчик» от Skillbox, разработанный совместно с компанией Arcadia.
«Android Developer» от Otus с обучением сразу по двум уровням: Junior и Middle.
«Android-разработчик» от Яндекс Практикум
На курсе вы изучите основы написания кода на Java и Kotlin, освоите работу в среде разработки Android Studio. Вы также научитесь использовать популярные библиотеки и работать с асинхронными задачами при помощи Kotlin Coroutines. Вы сможете создавать мобильные приложения в соответствии с требованиями заказчика, участвовать в производстве приложения на любом этапе разработки, работать в команде с помощью системы контроля версий Git, находить и исправлять ошибки в своём и чужом коде, а также выбирать подходящие технологии при работе над проектом.
Цена: зависит от тарифа.
Продолжительность: 12 месяцев (или 15 месяцев на расширенном тарифе).
Трудоустройство: нет, но есть карьерный центр.
Документ об окончании: диплом о профессиональной переподготовке.
Плюсы:
первые уроки бесплатно;
каникулы;
пауза в обучении или перенос дедлайна;
налоговый вычет;
2-3 мобильных приложения в портфолио (зависит от тарифа).
Минусы:
нагрузка не варьируется в зависимости от уровня студента;
высокая нагрузка, 15 часов в неделю.
2. «Android-разработчик с нуля» от Нетология
На курсе вы освоите навыки разработки Android-приложений с использованием Kotlin с нуля. Вы научитесь адаптировать приложения под различные устройства на платформе Android, проектировать логику их работы, проводить автоматизированные тестирования и верстать графические интерфейсы. Вы научитесь настраивать интеграции с бэкендом приложения, что поможет вам создавать полноценные и функциональные мобильные приложения.
Цена: 212 000 ₽
Цена со скидкой: 120 800 ₽
Продолжительность: 14 месяцев.
Трудоустройство: нет, но есть центр развития карьеры.
Документ об окончании: диплом о профессиональной переподготовке.
Плюсы:
митапы с OneTwoTrip;
8 проектов в портфолио;
дополнительные модули;
тренажер;
налоговый вычет.
Минусы:
некоторым новичкам нагрузка может показаться высокой.
3. «Профессия Android-разработчик» от Skillfactory
Вы пройдете путь от начинающего мобильного разработчика к junior Android-разработчику за 8 месяцев. Затем вы углубитесь в продвинутые навыки в течение следующих 6 месяцев, изучая дополнительные возможности Android, работу в фоне, отладку и оптимизацию приложений. Завершите обучение 2-месячным итоговым проектом. После этого вы сможете начать поиск работы и получить поддержку в составлении резюме и подготовке к собеседованию от центра карьеры.
Цена: зависит от тарифа.
Продолжительность: 16 месяцев.
Трудоустройство: да, на сайте написано, что школа трудоустроит или вернет деньги.
Документ об окончании: сертификат.
Плюсы:
доступ к материалам навсегда;
учебная стажировка;
бонусный блок по тестированию и безопасности приложения;
скидка при покупке курса сразу.
Минусы:
встретили один отзыв с замечанием, что некоторые задания слишком сложные для новичка.
4. «Android-разработчик: быстрый старт в профессии» от GeekBrains
Вы изучите как базовые, так и продвинутые инструменты, решая практические задачи и получая быстрые результаты. Сможете выбрать популярные специализации и систематизировать свои знания через различные форматы обучения: лекции, семинары, самостоятельное изучение и доступ к материалам Soft Skills.
Цена: 251 280 ₽
Цена со скидкой: 145 764 ₽
Продолжительность: 9 месяцев.
Трудоустройство: да, на сайте написано, что школа трудоустроит или вернет деньги.
Документ об окончании: диплом о профессиональной переподготовке.
Плюсы:
база знаний для развития карьеры;
курс по нейросетям в подарок;
годовой доступ к платформе английского языка;
налоговый вычет.
Минусы:
есть жалобы на обратную связь по заданиям.
5. «Android-разработчик» от Skillbox
Вы освоите программирование на Kotlin, работу в Android Studio и использование Android SDK для создания динамичных приложений. Вы научитесь создавать анимации, тестировать приложения, проектировать стабильные и быстрые приложения с использованием популярных шаблонов проектирования. Добавите до 5 приложений в портфолио и получите опыт работы в команде.
Цена: 306 136 ₽
Цена со скидкой: 153 068 ₽
Продолжительность: 12 месяцев.
Трудоустройство: да, на сайте написано, что школа трудоустроит или вернет деньги.
Документ об окончании: сертификат установленного образца.
Плюсы:
до 5 приложений в портфолио;
доступ навсегда;
курс записан совместно с Arcadia (разработчик ПО для сферы образования);
дополнительные курсы;
налоговый вычет;
годовой доступ к урокам английского языка.
Минусы:
высокая нагрузка.
6. «Android Developer» от Otus
Вы освоите Kotlin, Android SDK, различные библиотеки и инструменты для разработки приложений под Android. Обучение состоит из двух ступеней, включая бонусный видеокурс по Java. На первой ступени вы изучите язык Kotlin, основы разработки приложений и тестирования. На второй ступени углубитесь в Android SDK, организацию инфраструктуры и проектирование мультимодульной архитектуры. Вы разработаете приложение, отражающее лучшие практики в архитектуре, чистом коде и дизайне.
Цена: 148 000 ₽
Продолжительность: 10 месяцев.
Трудоустройство: нет, но есть карьерные мероприятия.
Документ об окончании: диплом о профессиональной переподготовке.
Плюсы:
налоговый вычет;
Минусы:
не постоянный набор в группы.
Курсы в этой подборке позволят начать с основ и постепенно углубить свои знания и навыки в области Android-разработки. Независимо от того, являетесь ли вы начинающим или уже имеете опыт в программировании, эти курсы предлагают возможность изучить новые технологии и инструменты, необходимые для разработки качественных мобильных приложений.
Реклама. ООО «ЯНДЕКС», ИНН: 7736207543, ООО «Нетология», ИНН: 7726464125, ООО Скилфэктори, ИНН 9702009530, ООО ГикБреинс, ИНН 7726381870, ЧОУ ЧАСТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ДОПОЛНИТЕЛЬНОГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ ОБРАЗОВАТЕЛЬНЫЕ ТЕХНОЛОГИИ СКИЛБОКС (КОРОБКА НАВЫКОВ), ИНН 9704088880, ООО Отус онлайн-образование, ИНН 9705100963
Записки танцовщицы: Как я стала хакером
Я работаю танцовщицей. Стриптиз дело не дешёвое, поэтому в клуб приходят люди с деньгами. И люди, в большинстве своём, приходят за банальным общением. У кого-то проблемы на работе, у кого-то проблемы в семье, кому-то просто не с кем поговорить. Гостям нужно высказаться, получить поддержку. И одной из важных задач у нас это наладить контакт с гостем. Ведь именно от этого зависит сколько гость потратит денег и сколько ты заработаешь на этом.
Очень часто к нам приходят программисты. К ним нужен особый подход. Добиться расположения проще, если разбираешься в их проблемах. Я сама заканчивала школу с углублённым изучения математики и информатики и могу написать Hello World на C++. Как ни странно, этого достаточно чтобы произвести впечатление на программиста.
Однажды к нам пришёл очень озадаченный гость, после пары стаканов виски он начал рассказывать о проблемах на проекте в микросервисной архитектуры. А я, наобщавшись до этого с программистами и закончив физмат школу, ляпнула "ну да, с монолитом было бы проще". И тут, наш программист моментально отрезвел и ошарагеными глазами спросил "что ты сказала???". Я изо всех сил пыталась сделать вид что я в IT тоже что-то понимаю и пыталась поддержать разговор и мне это удалось. Отходя в уборную и перед выходом на сцену я быстро гуглила те фразы что он говорил до этого и возвращались к гостю продолжала разговор. В ту ночь гость потратил на меня 5 коктейлей и дал 40к чаевых, не заказав при этом ни одного привата. Тогда девочки пошутили что я хакнула мальчика и в шутку называли меня хакершой. А я после этого начала слушать подкасты ит-блогеров и смотреть новости ит сферы)
Ответ на пост «Трудности выбора профессии»
Чтобы не было нагрузки на видеопроцессор Матрицы - людей запирают в off is-ы.
Самая крутая профессия - таксист - ежедневно меняются виды. Но теперь там платят мало.
Поэтому выбирай - или сидеть полгода в off is-е, чтобы потом лететь на красочный яркий Бали или в Тайланд. Или работать руками, но с меняющимися пейзажами.
Трудности выбора профессии
Всё-таки сейчас молодёжи трудно определиться с будущей профессией - всё так быстро меняется в мире.
Вчера - всем требуются программисты, идите в IT, будете получать от 200к в месяц...
Сегодня - ИИ начинает писать код, скоро программисты будут не нужны!..
Завтра - ИИ вышел из под контроля, объявлена кибер-СВО, все на борьбу с дикими ИскИнами!
IT-служащие получают по 500к в месяц, льготную ипотеку и досрочное освобождение из бана на любых форумах!
Конкурс для мемоделов: с вас мем — с нас приз
Конкурс мемов объявляется открытым!
Выкручивайте остроумие на максимум и придумайте надпись для стикера из шаблонов ниже. Лучшие идеи войдут в стикерпак, а их авторы получат полугодовую подписку на сервис «Пакет».
Кто сделал и отправил мемас на конкурс — молодец! Результаты конкурса мы объявим уже 3 мая, поделимся лучшими шутками по мнению жюри и ссылкой на стикерпак в телеграме. Полные правила конкурса.
А пока предлагаем посмотреть видео, из которых мы сделали шаблоны для мемов. В главной роли Валентин Выгодный и «Пакет» от Х5 — сервис для выгодных покупок в «Пятёрочке» и «Перекрёстке».
Реклама ООО «Корпоративный центр ИКС 5», ИНН: 7728632689