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

Дурак подкидной и переводной

Карточные, Настольные, Логическая

Играть

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

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

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

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

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

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

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

Linux + Самоделки

С этим тегом используют

Windows IT Программирование Ubuntu IT юмор Компьютер Программист Своими руками Вертикальное видео Электроника YouTube Arduino Рукоделие с процессом Идея Все
4 поста сначала свежее
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
170
DELETED
2 года назад
Arduino & Pi
Серия Кибердека в свободное время

Старо как мир или "трекбол мне в кибердеку"⁠⁠

Если самоделки и колхоз вызывают у вас приступы кринжа - лучше пропустить этот пост😅

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

К нашим баранам. Как это выглядит, трекбол на фото светится фиолетовым. А сейчас подробнее.

Старо как мир или "трекбол мне в кибердеку" Пятничный тег моё, Электроника, Linux, Raspberry pi, Arduino, Самоделки, Программирование, Колхоз, Длиннопост

Начнем с того, что есть устройство на линуксе raspberry pi4. И очень хотелось бы сделать его переносным. С клавой все решается достаточно просто - монтированием в корпус к самому устройству или подключив через usb/bt и кладешь куда угодно.

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

Старо как мир или "трекбол мне в кибердеку" Пятничный тег моё, Электроника, Linux, Raspberry pi, Arduino, Самоделки, Программирование, Колхоз, Длиннопост

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

Так вот о чем это я? Мне для "кибердеки" нужна была мышь.

Исключая тачпад, есть два три стула:

Старо как мир или "трекбол мне в кибердеку" Пятничный тег моё, Электроника, Linux, Raspberry pi, Arduino, Самоделки, Программирование, Колхоз, Длиннопост
  1. Джойстик (различных видов)

  2. Трекбол

  3. Трекпоинт (такие стоят на линейке Thinkpad от Lenovo)

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

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

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

Я выбрал трекбол из-за экзотики, размера и цены.

На алишке можно найти по запросу ICSH044A или Blackberry Trackball, так как такие стояли на телефонах Blackberry.

Старо как мир или "трекбол мне в кибердеку" Пятничный тег моё, Электроника, Linux, Raspberry pi, Arduino, Самоделки, Программирование, Колхоз, Длиннопост

Также мне понадобилась Ардуинка, так как моя UNO не поддерживает работу USB HID, так что пришлось взять Pro Micro на чипе ATmega32U4 (который и позволяет в hid)

Старо как мир или "трекбол мне в кибердеку" Пятничный тег моё, Электроника, Linux, Raspberry pi, Arduino, Самоделки, Программирование, Колхоз, Длиннопост

Ладно, я слегка затянул с прелюдией...

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

Подсветку можно запитать на свой вкус, подав на подписанные контакты "+", выбирая или миксуя синий, красный, зеленый и белый. Здесь запитаны красный и синий, что дает фиолетовое свечение.

Старо как мир или "трекбол мне в кибердеку" Пятничный тег моё, Электроника, Linux, Raspberry pi, Arduino, Самоделки, Программирование, Колхоз, Длиннопост

Подключение к пинам ардуино:

right_pin  3

left_pin  4

down_pin  5

up_pin  6

Левая кнопка  7

Правая кнопка  8

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

Итак:

Старо как мир или "трекбол мне в кибердеку" Пятничный тег моё, Электроника, Linux, Raspberry pi, Arduino, Самоделки, Программирование, Колхоз, Длиннопост
Старо как мир или "трекбол мне в кибердеку" Пятничный тег моё, Электроника, Linux, Raspberry pi, Arduino, Самоделки, Программирование, Колхоз, Длиннопост

Если кому-то будет интересно могу снять видео, но демо-видео трекбола можно найти по ссылке на github, которую указывал выше.

Расположение подобрано для большого пальца правой руки.

Старо как мир или "трекбол мне в кибердеку" Пятничный тег моё, Электроника, Linux, Raspberry pi, Arduino, Самоделки, Программирование, Колхоз, Длиннопост

Итог:

Из плюсов:

Удивительно, но к этому действительно легко привыкнуть.

Подключается по USB и начинает работать сразу и в WIndows и в Linux.

Достаточно хорошая точность и отклик.

Из минусов:

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

Отсутствие скролла в собранной конструкции.

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

Показать полностью 9
[моё] Пятничный тег моё Электроника Linux Raspberry pi Arduino Самоделки Программирование Колхоз Длиннопост
57
43
DELETED
2 года назад
Серия Кибердека в свободное время

Кибердека или свой миникомп (во временном корпусе)⁠⁠

Кибердека или свой миникомп (во временном корпусе) Пятничное, Raspberry pi, Своими руками, Электроника, Arduino, Самоделки, Linux, Длиннопост
Кибердека или свой миникомп (во временном корпусе) Пятничное, Raspberry pi, Своими руками, Электроника, Arduino, Самоделки, Linux, Длиннопост
Кибердека или свой миникомп (во временном корпусе) Пятничное, Raspberry pi, Своими руками, Электроника, Arduino, Самоделки, Linux, Длиннопост
Показать полностью 3
[моё] Пятничное Raspberry pi Своими руками Электроника Arduino Самоделки Linux Длиннопост
18
Партнёрский материал Реклама
specials
specials

Сколько нужно времени, чтобы уложить теплый пол?⁠⁠

Точно не скажем, но в нашем проекте с этим можно справиться буквально за минуту одной левой!

Попробовать

Ремонт Теплый пол Текст
7
kaper.su
4 года назад

STM32 или как я покорял⁠⁠

STM32 или как я покорял Stm32, Linux, Разработчики, Длиннопост, Самоделки

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

И чем дальше я продвигался в изучении этого языка, тем сильнее у меня пропадал интерес к этой идее.

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

Другое дело когда ты решил изучить для себя совершенно неизвестную для себя штуку. Где каждое новое знание для тебя целое открытие, с которым лично я сразу же хочу делится. Правда обычно делится получается с теми кто под руку попался, и как правильно им это вообще не интересно (мама прости но это так)).

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


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


Теперь наконец то я вырвался из этого порочного круга.

И чтобы мне было веселее я решил заливать то, как я изучаю все эти штуковины.


Это прелюдия а щас по факту:

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

2) Почему stm32.  все просто, хочу заниматься булингом ардуинщиков

3) В качестве среды разработки буду использовать VSCODE , мы же тут все за опенсорс не правда ли. ( НЕТ ,все равно потому буду писать скорее всего на jetbrains, продался...).

4) Прошивать буду через стандартный китайский stlink, потому незабываем его качнуть и поставить , любым удобным способом https://github.com/stlink-org/stlink

5) Копию кода (урезанного) я буду заливать на гитхаб : https://github.com/IzyI

6) Я буду мега максимально субъективен. Буду писать только те моменты которые я не понял и те нюансы которые мне показались важными. А также буду давать ссылки на сторонние ресурсы. Откуда я черпал знания. У боле умных людей.

7) Писать буду на  СИ.  И код я так себе пишу, даже если это Python. И уж если решили ругать мой код, то помните что главный ответ на главный вопрос 42.

8)  Для сборки проектов буду использовать stm32cubemx https://www.st.com/en/development-tools/stm32cubemx.html ибо  удобство

9) Большая часть кода скорее всего будет написана на библиотеке HAL. Но постараюсь по мере освоения юзать и CMSIS . Вкратце если кто не знает то в мире STM32 существует 3 библиотеки которые юзают  разработчики :

- - **HAL** - набор драйверов позволяющая обращаться ко всей периферии микроконтроллера не сильно вдаваясь в суть .


**Плюсы:**

- скорость разработки

- мультиплатформенность (легко перенести код с одного stm32 на другой stm32 более жирный к примеру)

- простота работы.


**Минусы:**

- знающие говорят что местами глючная

- рано или поздно все равно надо лезть в кишки микроконтроллера

- жирноват по коду

- местами так се написана (многим не нравится).


*Отличный выбор если вам надо быстро поднять USB стек.*

*Херовый если вам надо выжать из микроконтроллера максимум. *

- - **СMSIS** - (Cortex Microcontroller Software Interface Standard) как вы не поняли это стандартное описания интерфейса для всех армов, включает в себя структуры описания регистров и стартовый набор макросов для работы.


**Плюсы:**

- работа напрямую с регистрами

- скорость кода и его размер

- чистота (прозрачность) кода

- скилы прокачиваются как у летчиков в 41-45 , ты либо выживешь во время вылета, либо тя собьют к (херам)

- можно делать просто волшебные штуки

- лапочка со всех сторон


**Минусы:**

- нет мультиплатформенности

- очень долгая разработка

* Отличный выбор если вы шарите и у вас много времени по жизни*

*Херовый если сроки горят или вы узнали что такое регистры месяц назад. *

- - **LL** - без понятия что за библиотека, да и в холиварах ее редко упоминают, а это значит нам это не интересно

А теперь коротко что нам надо для работы в Debian.

- компилятор:

sudo apt-get install gcc-arm-none-eabi


- openocd:

Эта штука отладчик, по идее понадобится потом

sudo apt-get install openocd


- stm32cubemx

Идем на офицальный STM сайт https://www.st.com/en/development-tools/stm32cubemx.html. Регаемся и качаем оттуда STM32cubemx.


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


Для винды я не думаю что стоит приводить пример ибо там все накликивается кнопками

Идем на офицальный STM сайт https://www.st.com/en/development-tools/stm32cubemx.html. Регаемся и качаем оттуда STM32cubemx. Также можете скачать и установить IDE STM32cubeide, я не совсем люблю подобный софт, но думаю что в будущем это может пригодится как никак STM32cubemx все же заточен на работу с этими микроконтроллерами.

VSCODE я думаю тоже разберетесь и установите https://code.visualstudio.com/. В целом, на чем писать не так важно, лишь бы удобно было. VSCODE бесплатный и там есть более менее работающий переход по функциям и автоподсказки (но это не точно).


Что-жь соберем заготовку на наш первый проект.


Запустим STM32cubemx находим вкладку File кликаем new project.

STM32 или как я покорял Stm32, Linux, Разработчики, Длиннопост, Самоделки

Теперь найдем нужный нам микроконтроллер и кликнем start project.

STM32 или как я покорял Stm32, Linux, Разработчики, Длиннопост, Самоделки

Теперь переходим на вкладку project Manager. Указываем в качестве названия t1 во вкладке toolchain указываем Makefile

STM32 или как я покорял Stm32, Linux, Разработчики, Длиннопост, Самоделки

Кликаем generate code открываем через VSCODE. в терминале заходим в папку пишем make. На выходе у нас появляется папка build в которой лежат готовый файлы для заливки кода.

STM32 или как я покорял Stm32, Linux, Разработчики, Длиннопост, Самоделки

Как вы видите в linux не так сложно все это запустить. Хотя если честно когда я только сел разбираться для меня это был просто пи*ц. Даже щас из за больших пробелов в знании в языке Си и сборке через Cmake и Make файл, я страдаю . Но чай разберемся.))


P.S Я не последняя инстанция. Но если что пишите.)

Показать полностью 4
[моё] Stm32 Linux Разработчики Длиннопост Самоделки
33
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии