Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
В Битве Героев вы будете уничтожать монстров, отправляться на приключения со своим кланом. Вас множество локаций, монстров, снаряжения. Приведи своего героя к победе!

Битва Героев

Приключения, Ролевые, Мидкорные

Играть

Топ прошлой недели

  • Rahlkan Rahlkan 1 пост
  • Tannhauser9 Tannhauser9 4 поста
  • alex.carrier alex.carrier 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

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

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
31
ShuricU
ShuricU
1 год назад

Как прошить stm32 микроконтроллер, распиновка микроконтроллера и программатора⁠⁠

[моё] Электроника Stm32 Видео YouTube Микроконтроллеры
2
3
ShuricU
ShuricU
1 год назад

Программаторы для прошивки микроконтроллеров а также микросхем памяти⁠⁠

Здравствуйте! В этом видео Вы можете узнать о программаторах, с помощью которых можно прошить микроконтроллер разных производителей, а также микросхемы памяти. А также об адаптерах переходниках для разных типов микросхем.

Stm32 Программатор Прошивка Дамп Микроконтроллеры Видео YouTube
2
19
DELETED
2 года назад

Управление шаговым двигателем на К1986ВЕ92QI⁠⁠

Доброго дня. Сразу говорю, я начинающий. Помогите, нужна помощь как можно скорее, 4 дня времени. Стоит задача реализовать управление шаговым двигателем без использования готовых драйверов, только лишь на наших отечественных компонентах. Всем будет управлять микроконтроллер К1986ВЕ92QI (отечественный аналог STM32). Двигатель АD-200-31.Нужно реализовать дробление шага на 8 микрошагов и чтобы ток, подаваемый на обмотки ШД, менялся ступенчато в виде синусоиды от 0 до 2.8 А (фото приложил), при этом напряжение питания обмоток оставалось стабильным 24В и происходила вовремя переполюсовка посредством управления ключами Н-моста. Управляться это должно при помощи двух Н-мостов (фото приложил). Ступенчатое изменение тока по синусоиде, скорее всего, должно управляться при помощи компараторов (но это не точно).
Необходимо:
1) Составить схему подключения всех элементов к микроконтроллеру.
2) Составить программу управления шаговым двигателем на языке С.
3) Реализовать включение реверса двигателя и управление системой по интерфейсу RS-422.
4) Сделать возможность выбора скорости вращения ротора со скоростями 0.25, 0.5, 1, 2, 4, 8, 10, 20 град/сек.

Если надо, мог скинуть модель схемы в протеусе на atmega128 и кодом программы.

Управление шаговым двигателем на К1986ВЕ92QI Stm32, Микроконтроллеры, Шаговые двигатели, Управление
Управление шаговым двигателем на К1986ВЕ92QI Stm32, Микроконтроллеры, Шаговые двигатели, Управление
Показать полностью 2
Stm32 Микроконтроллеры Шаговые двигатели Управление
57
17
sergsv1
2 года назад

Плата разработчика LILYGO® TTGO T-Display ESP32 Development Board WiFi и Bluetooth модуль с дисплеем⁠⁠

Плата разработчика LILYGO® TTGO T-Display

Очень удобный модуль разработчика. На основе микроконтроллера esp32 с дисплеем, а также со многими дополнительными модулями. Как замена популярных плат Arduino.

Для вас новинка:

Плата разработчика LILYGO® TTGO T-Display ESP32 Development Board WiFi и Bluetooth модуль с дисплеем Электроника, Электрика, Arduino, Esp8266, Esp32, Микроконтроллеры, Микрокомпьютер, Радиоэлектроника, Радиотехника, Радиоуправление, Радиолюбители, Умный дом, Интернет вещей, Длиннопост

Это плата позволяет очень быстро собрать какое-то конечное устройство. Особенно если оно у вас было реализовано на модуле Arduino и вы решили это переделать на более мощную и новую платформу.

Плата разработчика LILYGO® TTGO T-Display ESP32 Development Board WiFi и Bluetooth модуль с дисплеем Электроника, Электрика, Arduino, Esp8266, Esp32, Микроконтроллеры, Микрокомпьютер, Радиоэлектроника, Радиотехника, Радиоуправление, Радиолюбители, Умный дом, Интернет вещей, Длиннопост

Модуль TTGO T-Display ESP32 WiFi Bluetooth с контроллером ESP32, цветным дисплеем и схемой зарядки и питания от литиевого аккумулятора. Позволяет быстро собрать макет устройства сбора, отображения и обработки информации с датчиков. Использование контроллера ESP32 и схемы зарядки позволит собрать автономные и портативные устройства для которых важны быстродействие, малые размеры и малое потребление тока.

Характеристики:

  • Чипсет: ESPRESSIF-ESP32 240MHz Xtensa® двухядерный 32-бит LX6 микропроцессор

  • Память программ: QSPI flash 16МБ

  • Оперативная память:520 КБ SRAM

  • Кнопки: Сброс

  • Конвертер USB в TTL: CH9102

  • Интерфейсы: UART, SPI, SDIO, I2C, LED PWM, TV PWM, I2S, IRGPIO,ADC, интерфейс емкостного экрана, DACLNA предусилитель

  • Дисплей: IPS ST7789V 1.14 дюйма

  • Рабочее напряжение: 2.7В — 4.2В

  • Рабочий ток: примерно 60мА

  • Ток в спящем режиме: 120мкА

  • Диапазон рабочих температур: -40 ~ +85 °C

  • Размеры: 51.52 x 25.04 x 8.54мм

  • Питание модуля:

    • Источник питания: USB 5В/1А

    • Ток заряда аккумулятора: 500мА

    • Аккумулятор: 3.7В литиевый с JST разъёмом

    • Разъём питания: 2х контактный шаг 1.25мм

    • USB разъём: Type-C

  • Wi-Fi характеристики:

    • Стандарт: FCC/CE-RED/IC/TELEC/KCC/SRRC/NCC

    • Протоколы: 802.11 b/g/n (802.11n, скорость до 150Mbps) A-MPDU и A-MSDU полимеризация 0.4мкс

    • Частотный диапазон: 2.4ГГц ~ 2.5ГГц (2400МГц — 2483.5МГц)

    • Выходная мощность передатчика: 22dBm

    • Расстояние устойчивой связи: 300м

  • Bluetooth характеристики:

    • Протокол: Поддерживается bluetooth V4.2BR/EDR и BLE стандарт

    • Чувствительность приемника: -97dBm NZIF Class-1, Cl ass-2 & Class-3 emitter AFH

Характеристики контроллера и интегрированных модулей

Плата разработчика LILYGO® TTGO T-Display ESP32 Development Board WiFi и Bluetooth модуль с дисплеем Электроника, Электрика, Arduino, Esp8266, Esp32, Микроконтроллеры, Микрокомпьютер, Радиоэлектроника, Радиотехника, Радиоуправление, Радиолюбители, Умный дом, Интернет вещей, Длиннопост

Характеристики встроенного дисплея и ещё некоторые доп. параметры

На борту контроллера встроен цветной LCD дисплей

Плата разработчика LILYGO® TTGO T-Display ESP32 Development Board WiFi и Bluetooth модуль с дисплеем Электроника, Электрика, Arduino, Esp8266, Esp32, Микроконтроллеры, Микрокомпьютер, Радиоэлектроника, Радиотехника, Радиоуправление, Радиолюбители, Умный дом, Интернет вещей, Длиннопост

Возможности по питанию

Плата имеет возможность использовать в качестве источника питания литиевой аккумулятор. Также она имеет контроллер заряда этих аккумуляторов.

Плата разработчика LILYGO® TTGO T-Display ESP32 Development Board WiFi и Bluetooth модуль с дисплеем Электроника, Электрика, Arduino, Esp8266, Esp32, Микроконтроллеры, Микрокомпьютер, Радиоэлектроника, Радиотехника, Радиоуправление, Радиолюбители, Умный дом, Интернет вещей, Длиннопост

Распиновка МОДУЛЯ

Расположение внешних выводов модуля микроконтроллера.

Многие выводы поддерживают различные функции.

Плата разработчика LILYGO® TTGO T-Display ESP32 Development Board WiFi и Bluetooth модуль с дисплеем Электроника, Электрика, Arduino, Esp8266, Esp32, Микроконтроллеры, Микрокомпьютер, Радиоэлектроника, Радиотехника, Радиоуправление, Радиолюбители, Умный дом, Интернет вещей, Длиннопост

Габаритные РАЗМЕРЫ

Габаритные размеры платы модуля а также расстояние между выводами

Плата разработчика LILYGO® TTGO T-Display ESP32 Development Board WiFi и Bluetooth модуль с дисплеем Электроника, Электрика, Arduino, Esp8266, Esp32, Микроконтроллеры, Микрокомпьютер, Радиоэлектроника, Радиотехника, Радиоуправление, Радиолюбители, Умный дом, Интернет вещей, Длиннопост

Ссылки: Статья с САЙТА : http://schip.com.ua/plata-razrabotchika-lilygo-ttgo-display/

Показать полностью 7
Электроника Электрика Arduino Esp8266 Esp32 Микроконтроллеры Микрокомпьютер Радиоэлектроника Радиотехника Радиоуправление Радиолюбители Умный дом Интернет вещей Длиннопост
7
155
sergsv1
2 года назад

Комплект КИТ -Микроконтроллер ESP32 и Модуль камеры 2MP с режимом ночного видения⁠⁠

Комплект КИТ -Контроллер ESP32 CAM 2,4 ГГц WiFi Bluetooth 8 МБ PSRAM OV2640 Модуль камеры

Кто интересуется микроконтроллерами Arduino, ESP и им подобными.

Для вас новинка:

Модуль ESP32-CAM-MB представляет собой небольшой модуль Кит. Микроконтроллер и камера размером .

Комплект КИТ -Микроконтроллер ESP32 и Модуль камеры 2MP с режимом ночного видения Электроника, Самоделки, Esp32, Esp8266, Микроконтроллеры, Умный дом, Интернет вещей, Радиоэлектроника, Радиотехника, Радиоуправление, Длиннопост

Этот модуль может работать независимо. Совершенно новая плата разработки + WiFi + Bluetooth основана на конструкции ESP32, использует встроенные антенны на печатной плате.

Оснащена двухъядерным высокопроизводительным 32-разрядным процессорам LX6, использует 7-ступенчатую конвейерную структуру и возможность регулировки частоты — составляет от 80 МГц до 240 МГц.

Сверхнизкое энергопотребление, ток глубокого сна всего 6 мА.

Комплект КИТ -Микроконтроллер ESP32 и Модуль камеры 2MP с режимом ночного видения Электроника, Самоделки, Esp32, Esp8266, Микроконтроллеры, Умный дом, Интернет вещей, Радиоэлектроника, Радиотехника, Радиоуправление, Длиннопост

HK-ESP32-CAM-MB использует интерфейс micro USB, который удобен и надежен в режиме подключения, который удобен и подходит для различных аппаратных терминалов IoT.

Распиновка МОДУЛЯ

Этот модуль можно использовать независимо от камеры как полноценный микроконтроллер ESP

Комплект КИТ -Микроконтроллер ESP32 и Модуль камеры 2MP с режимом ночного видения Электроника, Самоделки, Esp32, Esp8266, Микроконтроллеры, Умный дом, Интернет вещей, Радиоэлектроника, Радиотехника, Радиоуправление, Длиннопост

Комплектация

В этом комплекте Кит могут на выбор поставляться различные типы камер.

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

Комплект КИТ -Микроконтроллер ESP32 и Модуль камеры 2MP с режимом ночного видения Электроника, Самоделки, Esp32, Esp8266, Микроконтроллеры, Умный дом, Интернет вещей, Радиоэлектроника, Радиотехника, Радиоуправление, Длиннопост

Основные параметры производительности

1 Двухъядерный процессор можно использовать в различных режимах.

2 Основная частота до 240 МГц, а вычислительная мощность до 600 dmips.

3 Встроенная SRAM 520 КБ, внешняя PSRAM 8 МБ

4 Поддержка UART/SPI/I2C/PWM/ADC/DAC и других интерфейсов

5 Поддержка вспышки OV70 и OV2640

6 Поддержка загрузки изображения по Wi-Fi

7 Поддержка TF-карты

8 Поддержка нескольких режимов сна.

9 Встроенный Lwip и FreeRTOS

10 Поддержка режима работы STA/AP/STA+AP

11 Поддержка интеллектуальной конфигурации/конфигурации сети с одним ключом AirKiss

12 Поддержка вторичного развития

* * * * * * Дополнительно -Сценарий приложения

1 Передача изображения домашнего смарт-устройства

2 Для беспроводного мониторинга

3 Умное сельское хозяйство

4 Беспроводная идентификация 4QR

5 беспроводной сигнал системы позиционирования

6 и другие IoT-приложения

Комплект КИТ -Микроконтроллер ESP32 и Модуль камеры 2MP с режимом ночного видения Электроника, Самоделки, Esp32, Esp8266, Микроконтроллеры, Умный дом, Интернет вещей, Радиоэлектроника, Радиотехника, Радиоуправление, Длиннопост

Образцы фотографий с камеры и камерой

Комплект КИТ -Микроконтроллер ESP32 и Модуль камеры 2MP с режимом ночного видения Электроника, Самоделки, Esp32, Esp8266, Микроконтроллеры, Умный дом, Интернет вещей, Радиоэлектроника, Радиотехника, Радиоуправление, Длиннопост
Комплект КИТ -Микроконтроллер ESP32 и Модуль камеры 2MP с режимом ночного видения Электроника, Самоделки, Esp32, Esp8266, Микроконтроллеры, Умный дом, Интернет вещей, Радиоэлектроника, Радиотехника, Радиоуправление, Длиннопост

Статья с сайта http://schip.com.ua/kit-kontroller-esp32-i-kamery-2mp/

Показать полностью 7
Электроника Самоделки Esp32 Esp8266 Микроконтроллеры Умный дом Интернет вещей Радиоэлектроника Радиотехника Радиоуправление Длиннопост
16
89
d383838
2 года назад

Аналогово-ламповые штуки? Есть у меня их⁠⁠

Вижу тут поток пошел постов с приемниками и часами с ламповыми индикаторами.

Отмечусь и я.

Аналоговый регулятор громкости и выбора источника звука из начала 00х

Городился для усилителя Одисей-100У. Вот он на фото. Фото не мое. В усилителе ДУ не было изначально чем сильно напрягало. Делать какое-то электронное управление громкостью не хотелось т.к. везде очень большие искажения.

Аналогово-ламповые штуки? Есть у меня их Arduino, Электроника, Intel, Ламповость, Аналоговый звук, Сделано в СССР, Самоделки, Длиннопост, Микроконтроллеры

Это вам на ардуины с Сями и загрузчиками. Только хардкор. Ассемблер и УФ ПЗУ.

Аналогово-ламповые штуки? Есть у меня их Arduino, Электроника, Intel, Ламповость, Аналоговый звук, Сделано в СССР, Самоделки, Длиннопост, Микроконтроллеры

Шаговый электродвигатель от 3х фазного электросчетчика. Шестерни от него же.

Аналогово-ламповые штуки? Есть у меня их Arduino, Электроника, Intel, Ламповость, Аналоговый звук, Сделано в СССР, Самоделки, Длиннопост, Микроконтроллеры
Аналогово-ламповые штуки? Есть у меня их Arduino, Электроника, Intel, Ламповость, Аналоговый звук, Сделано в СССР, Самоделки, Длиннопост, Микроконтроллеры

Декодирование сигналов ИК управления аппаратное на К1506ХЛ2 с выдачей чистой команды в последовательном коде в процессор. Герконы на соплях временно т.к. программа не умела на тот момент считать до крайних положений.

До готового устройства контроллер не дожил совсем чуть чуть: квартиру обнесли и уперли усилитель и все остальное оставив винил и колонки.

И да, дурная голова рукам покоя не дает

Показать полностью 3
[моё] Arduino Электроника Intel Ламповость Аналоговый звук Сделано в СССР Самоделки Длиннопост Микроконтроллеры
16
78
3Dfsd2021
3Dfsd2021
2 года назад
TECHNO BROTHER

Как GhatGPT умеет общаться с микроконтроллерами⁠⁠

И меня не обошло сие новомодное поветрие. Нашел чат в телеграме с доступом к ChatGPT и стал думать: а что бы такое его спросить? Давайте сначала теста ради что-нибудь простенькое:

Как GhatGPT умеет общаться с микроконтроллерами Arduino, Эксперимент, Stm32, Си, Программирование, Микроконтроллеры, ChatGPT, Нейронные сети, Длиннопост

Потрясающе! Но может ли оно объяснить, что там в коде за что отвечает?

Как GhatGPT умеет общаться с микроконтроллерами Arduino, Эксперимент, Stm32, Си, Программирование, Микроконтроллеры, ChatGPT, Нейронные сети, Длиннопост

Обалдеть. Оно почти понимает. А вот интересно, оно умеет только стандартный Си?

Как GhatGPT умеет общаться с микроконтроллерами Arduino, Эксперимент, Stm32, Си, Программирование, Микроконтроллеры, ChatGPT, Нейронные сети, Длиннопост

Однако. Оно умеет под STM32, причем самым пионерским ардуиновским способом - считая такты процессора. Но, тем не менее, под SPL. Умеет ли оно использовать таймер?

Как GhatGPT умеет общаться с микроконтроллерами Arduino, Эксперимент, Stm32, Си, Программирование, Микроконтроллеры, ChatGPT, Нейронные сети, Длиннопост
Как GhatGPT умеет общаться с микроконтроллерами Arduino, Эксперимент, Stm32, Си, Программирование, Микроконтроллеры, ChatGPT, Нейронные сети, Длиннопост

Так, и что мы видим? Мы видим, что инициализировать таймер оно умеет. И с правильными значениями. Но в процедуре прерывания оно не использует! И вместо этого вводит дополнительную процедуру, считающую такты процессора.

Таймер же оно использует, чтобы сделать задержку в 1 секунду в главном цикле! Напоминает известный анекдот: как вскипятить пустой чайник? налить воду и поставить на огонь. а если в чайнике уже есть вода? Вылить и тем самым свести условия задачи к предыдущему :) Возможно, робот неправильно меня понял :)

Как GhatGPT умеет общаться с микроконтроллерами Arduino, Эксперимент, Stm32, Си, Программирование, Микроконтроллеры, ChatGPT, Нейронные сети, Длиннопост
Как GhatGPT умеет общаться с микроконтроллерами Arduino, Эксперимент, Stm32, Си, Программирование, Микроконтроллеры, ChatGPT, Нейронные сети, Длиннопост

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

Вердикт - человек пока что пишет программы под STM32 лучше этой штуки. Но эта штука пишет уже лучше ардуиновского пионера. Где-то и такой подход сойдет.

Показать полностью 7
[моё] Arduino Эксперимент Stm32 Си Программирование Микроконтроллеры ChatGPT Нейронные сети Длиннопост
14
194
monobogdan
monobogdan
2 года назад
TECHNO BROTHER

Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 8 кнопок и микроконтроллера⁠⁠

Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 8 кнопок и микроконтроллера Смартфон, Телефон, Идея, Своими руками, Arduino, Embedded, Встраиваемые системы, Планшет, Игры, Консоли, Самоделки, Моддинг, Android, Linux, Java, C++, Kernel, Покупка, Raspberry pi, Микроконтроллеры, Видео, Длиннопост

К сожалению, в наше время многие старые, но весьма неплохие по характеристикам гаджеты отправляются напрямую в помойку, и их владельцы не подозревают, что им можно найти применение. Сервер, мультимедийная-станция, да даже просто как TV-приставка — люди в упор не замечают сфер, где старенький планшет мог бы быть полезен. Но как быть, если посвящаешь жизнь портативным гаджетам, кодингу и копанию в железе? Правильно: сделать довольно мощную игровую консоль из старого планшета самому! Сегодня вам расскажу, как я сделал свою портативную приставку из планшета с нерабочим тачскрином, Raspberry Pi Pico и 8 кнопок! За рабочим результатом прячется несколько дней работы: поиск UART на плате, разработка контроллера геймпада на базе RPi Pico, написание приложения-сервиса, которое слушает события и отправляет их в подсистему ввода Linux в обход Android. Интересно? Тогда жду вас под катом!

❯ Мотивация


Прошло уже практически 10 лет с того момента, как у меня появилась моя первая портативная консоль. Несмотря на то, что я был заядлым ПК-игроком, я уже успел посмотреть на PS3 и PSP, но денег на их покупку у меня особо не было, да и к тому времени уже был в наличии Android-планшет. Но к моему 13-летию в 2014 году, когда я ходил и выбирал себе будущий девайс на день рождения, отец и мама решили подарить мне мою первую портативную консоль. Изначально, я уговаривал её купить мне целых два девайса, но бюджет был ограничен 4.000 рублей, а я хотел взять смартфон Fly IQ239 и консоль JXD S601 одновременно:

Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 8 кнопок и микроконтроллера Смартфон, Телефон, Идея, Своими руками, Arduino, Embedded, Встраиваемые системы, Планшет, Игры, Консоли, Самоделки, Моддинг, Android, Linux, Java, C++, Kernel, Покупка, Raspberry pi, Микроконтроллеры, Видео, Длиннопост


Однако, увидев здоровую 7-дюймовую консоль в магазине TREC (думаю, жители южной части РФ помнят такой), мама уговорила меня взять именно её, мотивируя это «ну и чего ты будешь тыкаться в этот мелкий экран? Возьми большую». После покупки гаджета, я был доволен: играл какие-то игрушки с ретро-платформ, устанавливал игры на Android, сидел в ВК через Kate Mobile. Что еще нужно было школяру? Однако, планшет прожил у меня недолго: с очередного лага я психанул и ударил по нему кулачком, унеся на тот свет и дисплей и тачскрин. Так консолька и пролежала в подвале около 8 лет. Впрочем, мне продолжали импонировать подобные устройства и в прошлом году я купил и написал про несколько подобных девайсов.

Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 8 кнопок и микроконтроллера Смартфон, Телефон, Идея, Своими руками, Arduino, Embedded, Встраиваемые системы, Планшет, Игры, Консоли, Самоделки, Моддинг, Android, Linux, Java, C++, Kernel, Покупка, Raspberry pi, Микроконтроллеры, Видео, Длиннопост



Несколько месяцев назад, мой читатель Кирилл Севостьянов с Хабра прислал мне HTC HD2 в качестве донора и планшет Prestigio PMP7170B3G, который был рабочим, но… у него отказал тачскрин. Я всё думал, чего бы с ним сделать и решил реализовать игровую консольку своими руками из подручных средств. Идея крутилась в голове довольно давно, но реализовал я её только сейчас.

❯ Что нам нужно сделать?


Итак, что должно быть у портативной консоли? Чипсет, дисплей, звук, ОС — это всё нам уже предоставляет планшет. Нам остаётся лишь сделать свой геймпад. Давайте подумаем, что нам будет нужно для того, чтобы его сделать и передавать от него события на планшет:

  • Контроллер для геймпада: тут нам подойдет практически любой микроконтроллер, который работает от 3.3в. Выбор большой: Arduino Pro Mini 3.3v, ESP32, RPi Pico. Я остановился на последнем: недавно я взял себе две штучки «пощупать» их — и они мне очень понравились!

  • Физический интерфейс: с планшетом нужно как-то общаться. У нас есть три варианта: USB (не факт, что поддержка преобразователей включена в ядре), UART и SPI/I2C на пятачках тачскрина (потребуют написания драйвера т. к. в android-устройствах нет прямого доступа к SPI/I2C из userland'а). Я остановился на UART: его легко найти на большинстве китайских планшетов, а если не получилось — то на помощь может прийти схема платы.

  • Программная реализация: как это будет работать? Я решил реализовать геймпад в виде сервиса на Android, который слушает состояния кнопок с UART и «инжектит» события напрямую в драйвер ввода. Таким образом, поддержка нашего геймпада появляется даже в самой системе — можно управлять менюшкой или приложениями как с клавиатуры!


    С планом определились, пора начать с программной части: сначала нам обязательно понадобится ROOT-доступ. Его получение на разных девайсах отличается — на prestigio уже был порт CWM и я просто поставил SuperSU. Без ROOT доступа мы не сможем использовать UART!

Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 8 кнопок и микроконтроллера Смартфон, Телефон, Идея, Своими руками, Arduino, Embedded, Встраиваемые системы, Планшет, Игры, Консоли, Самоделки, Моддинг, Android, Linux, Java, C++, Kernel, Покупка, Raspberry pi, Микроконтроллеры, Видео, Длиннопост


Теперь нам нужно найти пятачки UART на плате. Разведен он не везде, но в случае устройств на MediaTek — почти всегда, ещё и пятачки подписаны. На моём планшете он нашёлся сразу: был между двух металлических экранов и соответствовал 4-ому каналу UART. Получить к нему доступ можно в /dev/ttyMT3. Я использую ESP32 в качестве UART преобразователя: подпаиваемся к RX/TX, запускаем putty и заходим в adb shell. Определяем бодрейт (скорость) нашего UART порта — на MediaTek он обычно равен 921600, на других чипсетах — 115200. Пытаемся что-то вывести и хоба — мы уже можем «поболтать» с планшетом!

Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 8 кнопок и микроконтроллера Смартфон, Телефон, Идея, Своими руками, Arduino, Embedded, Встраиваемые системы, Планшет, Игры, Консоли, Самоделки, Моддинг, Android, Linux, Java, C++, Kernel, Покупка, Raspberry pi, Микроконтроллеры, Видео, Длиннопост

❯ Приложение-сервис


Итак, у нас уже есть доступ к UART и мы можем общаться с планшетом из внешнего мира. Но получить события с кнопок пол дела, нужно их ещё и послать в систему. Для этого есть целых три способа:

  1. InputManager.injectInputEvent — именно этим методом пользуется команда input, которую вы можете использовать через adb. Но увы, он работает только при наличие разрешения INJECT_EVENTS, который доступен только системным приложениям — находятся они в /system/app и подписаны тем же сертификатом, что и остальная прошивка.

  2. Модуль uinput дает возможность создать виртуальное устройство ввода и посылать события из userland'а — т. е. из прикладного приложения. У моего планшета было устройство /dev/uinput, но lsmod показывал, что сам модуль не загружен. Так что отметаем — он есть не везде.

  3. Прямой инжект событий в character устройство — весьма грязный хак, который позволяет инжектить события, не притворяясь системным приложением, но имеет некоторые ограничения. Именно его я и выбрал и о ограничениях ниже.


Сначала нам нужно узнать, какие кнопки поддерживают загруженные устройства ввода в системе. Для этого используем команду getevent -li. Там есть разные устройства ввода, в том числе и тачскрин (если вам нужно симулировать нажатия на экран), мне же подошёл драйвер физических кнопок mtk-kpd. Он занимается обработкой кнопок громкости, включения и т. п. Тут важно обратить внимание на то, что если попытаться послать кнопку, которое устройство не реализует (например пробел), то ничего не произойдет:

Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 8 кнопок и микроконтроллера Смартфон, Телефон, Идея, Своими руками, Arduino, Embedded, Встраиваемые системы, Планшет, Игры, Консоли, Самоделки, Моддинг, Android, Linux, Java, C++, Kernel, Покупка, Raspberry pi, Микроконтроллеры, Видео, Длиннопост



Инжект событий я писал на C, т. к. это требовало прямой записи input_event, а в Java прокинул его через Jni. Концепция простая: открываем устройство /dev/input/event2 и посылаем в него события ввода и синхронизации (это обязательно!), которые затем Android читает и обрабатывает:

#include <linux/uinput.h>

#include <fcntl.h>

#include <unistd.h>

#include <stdio.h>

#include <stdlib.h>

#include <android/log.h>

#include <jni.h>

int uinput;

extern "C" JNIEXPORT void JNICALL Java_com_monobogdan_inputservicebridge_InputNative_init(JNIEnv *env, jclass clazz) {

uinput = open("/dev/input/event2", O_WRONLY);

__android_log_print(ANDROID_LOG_DEBUG , "Test", uinput >= 0 ? "Open event OK" : "Failed to open event"); }

void emit(int fd, int type, int code, int val) {

struct input_event ie; ie.type = type;

ie.code = code; ie.value = val;

ie.time.tv_sec = 0;

ie.time.tv_usec = 0;

write(fd, &ie, sizeof(ie)); }

extern "C" JNIEXPORT void JNICALL Java_com_monobogdan_inputservicebridge_InputNative_sendKeyEvent(JNIEnv *env, jclass clazz, jint key_code, jboolean pressed) {

__android_log_print(ANDROID_LOG_DEBUG , "Test", "Send");

emit(uinput, EV_KEY, key_code, (bool)pressed ? 1 : 0);

emit(uinput, EV_SYN, SYN_REPORT, 0);

}

Основной обработкой занимается сервис, который я реализовал в отдельном потоке: он слушает события с UART и посылает соответствующие изменения состояния через sendKeyEvent. На вход приходят простые сообщения вида:

U L где U/D — нажато, не нажато, а L — однобайтовый идентификатор кнопки. В случае L — это влево, R — вправо и т. п. Вся доступная раскладка хранится в словаре. Причём само чтение из UART реализовано костылем с чтением «чужого» stdout, т. к. android-приложения не умеют сами по себе работать с root правами. В теории, это могло дать неприятный оверхед, но на практике никакого серьезного инпут лага это не создает. Не забываем сделать устройство event записываемым — ставим ему права 777:

package com.monobogdan.inputservicebridge;

public class InputListener extends Service {

private static final int tty = 3;

private InputManager iManager;

private Map<Character, Integer> keyMap;

private Method injectMethod;

private Process runAsRoot(String cmd)

{

try {

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

}

catch (IOException e)

{

e.printStackTrace();

return null;

}

}

@override

public void onCreate() {

super.onCreate();

// According to linux key map (input-event-codes.h)

keyMap = new HashMap<>();

keyMap.put('U', 103);

keyMap.put('D', 108);

keyMap.put('L', 105);

keyMap.put('R', 106);

keyMap.put('E', 115);

keyMap.put('B', 158);

keyMap.put('A', 232);

keyMap.put('C', 212);

InputNative.init();

try {

runAsRoot("chmod 777 /dev/input/event2").waitFor();

} catch (InterruptedException e) {

throw new RuntimeException(e);

}

Executors.newSingleThreadExecutor().execute(new Runnable() {

@override

public void run() {

Process proc = runAsRoot("cat /dev/ttyMT" + tty);

BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));

while(true)

{

try {

String line = reader.readLine();

if(line != null && line.length() > 0) {

Log.i("Hi", "run: " + line);

boolean pressing = line.charAt(0) == 'D';

int keyCode = keyMap.get(line.charAt(2));

Log.i("TAG", "run: " + keyCode);

InputNative.sendKeyEvent(keyCode, pressing);

}

}

catch(IOException e)

{

e.printStackTrace();

}

/*try {

Thread.sleep(1000 / 30);

} catch (InterruptedException e) {

e.printStackTrace();

}*/

}

}

});

}

@override

public IBinder onBind(Intent intent) {

return null;

}

}

Таким образом, если мы отправляем с ПК «D L» — система считает, что мы зажали стрелку влево, а U L — считает что мы отпустили. Но если mtk-kpd поддерживает стрелки и еще некоторые действия без каких либо проблем, то enter в список обрабатываемых кнопок не входит: придется мудрить! И тут нам приходит на помощь механизм трансляции кодов кнопок в действия: они хранятся в специальных файлах .kl в /system/usr/keylayout/. Я назначил DPAD_CENTER на… кнопку регулировки громкости звука! Ну, а почему бы и нет. :) Таким образом можно переназначить уже имеющиеся кнопки громкости на, например, start/select.

Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 8 кнопок и микроконтроллера Смартфон, Телефон, Идея, Своими руками, Arduino, Embedded, Встраиваемые системы, Планшет, Игры, Консоли, Самоделки, Моддинг, Android, Linux, Java, C++, Kernel, Покупка, Raspberry pi, Микроконтроллеры, Видео, Длиннопост

❯ Геймпад


После того, как сервис был готов и отлажен, нужно было реализовать хардварную часть проекта — сам геймпад. В качестве контроллера я, как уже говорил, выбрал Raspberry Pi Pico на базе МК RP2040 — бодреньком контроллере с двумя ARM Cortex-M0 ядрами. Стоит копейки, а в отличии от ESP'шек, его SDK не такое перегруженное и выглядит более приближенным к bare-metal.

Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 8 кнопок и микроконтроллера Смартфон, Телефон, Идея, Своими руками, Arduino, Embedded, Встраиваемые системы, Планшет, Игры, Консоли, Самоделки, Моддинг, Android, Linux, Java, C++, Kernel, Покупка, Raspberry pi, Микроконтроллеры, Видео, Длиннопост



На данный момент, я решил развести все кнопки на бредборде — макетной плате без пайки, т. к. макеток для пайки у меня под рукой не было. Сделал примитивный геймпад:

Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 8 кнопок и микроконтроллера Смартфон, Телефон, Идея, Своими руками, Arduino, Embedded, Встраиваемые системы, Планшет, Игры, Консоли, Самоделки, Моддинг, Android, Linux, Java, C++, Kernel, Покупка, Raspberry pi, Микроконтроллеры, Видео, Длиннопост



Развел на соответствующие GPIO:

Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 8 кнопок и микроконтроллера Смартфон, Телефон, Идея, Своими руками, Arduino, Embedded, Встраиваемые системы, Планшет, Игры, Консоли, Самоделки, Моддинг, Android, Linux, Java, C++, Kernel, Покупка, Raspberry pi, Микроконтроллеры, Видео, Длиннопост



И написал примитивную прошивку, которая отслеживает состояние кнопок. В прошивке точно так же есть словарь, задающий ассоциацию между физическими пинами и «виртуальными» кнопками. При нажатии или отжатии кнопки, программа изменяет стейт и отсылает новое состояние планшету.

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include "pico/stdlib.h"

#include "pico/time.h"

#include "hardware/uart.h"

struct keyMap

{

int gpio;

char key;

bool pressed;

int lastTick;

};

keyMap keys[] = {

{

15,

'L',

false,

0

},

{

14,

'U',

false,

0

},

{

13,

'D',

false,

0

},

{

12,

'R',

false,

0

},

{

11,

'E',

false,

0

},

{

10,

'B',

false,

0

},

{

20,

'A',

false,

0

},

{

21,

'C',

false,

0

}

};

#define KEY_NUM 8

int main() {

stdio_init_all();

uart_init(uart0, 921600);

gpio_set_function(PICO_DEFAULT_UART_TX_PIN, GPIO_FUNC_UART);

gpio_set_function(PICO_DEFAULT_UART_RX_PIN, GPIO_FUNC_UART);

sleep_ms(1000); // Allow serial monitor to settle

for(int i = 0; i < KEY_NUM; i++)

{

gpio_init(keys[i].gpio);

gpio_set_dir(keys[i].gpio, false);

gpio_pull_up(keys[i].gpio);

}

while(true)

{

int now = time_us_32();

for(int i = 0; i < KEY_NUM; i++)

{

char buf[5];

buf[1] = ' ';

buf[3] = '\n';

buf[4] = 0;

if(!gpio_get(keys[i].gpio) && !keys[i].pressed && now - keys[i].lastTick > 15500)

{

buf[0] = 'D';

buf[2] = keys[i].key;

puts(buf);

keys[i].lastTick = now;

keys[i].pressed = true;

continue;

}

if(gpio_get(keys[i].gpio) && keys[i].pressed && now - keys[i].lastTick > 15500)

{

buf[0] = 'U';

buf[2] = keys[i].key;

puts(buf);

keys[i].pressed = false;

keys[i].lastTick = now;

}

}

}

}

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

Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 8 кнопок и микроконтроллера Смартфон, Телефон, Идея, Своими руками, Arduino, Embedded, Встраиваемые системы, Планшет, Игры, Консоли, Самоделки, Моддинг, Android, Linux, Java, C++, Kernel, Покупка, Raspberry pi, Микроконтроллеры, Видео, Длиннопост



А почему бы не попробовать поиграть в какую-нибудь игру? Ну мы же консоль вроде делаем: берём эмулятор NES, биндим кнопки в настройках и наслаждаемся игрой в Марио!

❯ Заключение


Реализация этого проекта заняла у меня не так уж и много времени: всего около 3-х дней работы по вечерам. Вероятно кто-то спросит: «а чего ты просто Bluetooth геймпад не купил?». Так это не прикольно ведь. Гораздо приятнее играть в девайс, к которому ты приложил руку сам. Более того, не у всех старых планшетов есть BT. Обошёлся на данной стадии проект недорого: планшет мне подарили бесплатно (точно также у вас дома может лежать подобный), RPi Pico — 350 рублей, кнопки по 10 рублей/штучка.

В целом, я сам по себе обожаю копаться в различных железках и их софтварной части (вспомнить хотя-бы статью про перекомпиляциюu-boot из вендорских исходников для нонейм консоли), а созидать что-то свое вообще вызывает какие-то нереальные всплески эндорфина — оно и понятно! :)

Однако несмотря на то, что мы уже имеем рабочий «прототип», проект далёк от завершения: я намерен довести его до конца и окончательно перевоплотить старый планшет в автономную игровую консоль (и рассказать об этом во второй части статьи). Для этого мне понадобится распечатать корпус и кнопки на 3D-принтере. К сожалению, у меня в городе ни у кого особо нет 3D-принтеров, поэтому начну копить на Ender 3, а от вас, читателей, с удовольствием почитаю мнение в комментариях и советы касательно выбора принтера!

Статья подготовлена при поддержке TimeWeb Cloud. Подписывайтесь на меня и @Timeweb.Cloud, чтобы не пропускать еженедельные статьи про моддинг различных гаджетов!

Показать полностью 10 1
[моё] Смартфон Телефон Идея Своими руками Arduino Embedded Встраиваемые системы Планшет Игры Консоли Самоделки Моддинг Android Linux Java C++ Kernel Покупка Raspberry pi Микроконтроллеры Видео Длиннопост
33
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии