Категории раздела |
|
Автомобильные гаджеты, ремонт...
[143]
|
Безопасность IT
[404]
|
Блоки питания, Power Banks, зарядки...
[508]
|
Видеорегистраторы
[186]
|
Гаджеты для спорта и здоровья...
[190]
|
Гаджеты, аксессуары...
[627]
|
Измерительная техника, инструменты
[437]
|
Накопители данных
[232]
|
Нетбуки, Ноутбуки, Ультрабуки
[689]
|
Мультиварки, блендеры и не только...
[162]
|
Планшеты
[764]
|
Радар-детекторы
[26]
|
Роботы-пылесосы
[37]
|
Своими руками
[360]
|
Сети, сетевые технологии, оборудование...
[273]
|
Смартфоны
[4959]
|
Фотокамеры, объективы, искусство фотографии..
[541]
|
Умный дом
[50]
|
Электронные книги
[101]
|
CB, LPD, PMR- связь...
[170]
|
DECT, IP-телефоны
[18]
|
Drones, boats, cars...
[108]
|
electric cars
[35]
|
GPS-навигаторы, трекеры...
[51]
|
Linux и не только
[3981]
|
mini computers и не только...
[409]
|
News IT, Это интересно, ликбез...
[1120]
|
Smart TV, UltraHD, приставки, проекторы...
[415]
|
Smart Watch
[268]
|
Sound: наушники, плееры, усилители...
[618]
|
Windows 10...
[301]
|
Windows 11
[37]
|
| |
|
|
| | |
| Главная » 2013 » Декабрь » 16 » Дешевая USB кнопка для PC
06:29 Дешевая USB кнопка для PC |
Дешевая USB кнопка для PC
Идея — запускать скриптик по нажатию физической кнопки, подключенной к компьютеру.
кнопка
Варианты:
- Arduino nano
— 1400р (ориг), 300р(не ориг). (плюсы: можно навесить много кнопок на 1
usb порт; минусы: надо паять + понять как она работает и на компьютере
придется держать постоянно программу, которая будет ждать нажатия
кнопки)
- USBbutton — 780р (плюсы: все красиво оформлено и сделано; минусы: высокая цена и она win-only)
- U-HID Nano — 1150р (плюсы: есть софт; минусы: высокаяя цена + необходимо паять)
- Usb устройство (почти любое) — 0-100р (плюсы: почти 0 себестоимость,
не надо программировать; минусы: linux, возможная пайка, повреждение
usb кабеля)
Все эксперименты я проводил на Raspberry PI с debian на борту (точнее прошивка raspbmc).
Для реализации подойдет любой дистрибутив, испльзующий udev для отслеживания системных устройств.
Устройство, на основе которого будет делаться кнопка может быть любым:
старая полусломаная usb клавиатура, мышка, камера да и вообще все что
цепляется по USB и может быть опознано системой.
На маркете нашел мышь за 70 руб, что может служить кнопкой и вполне конкурентоспособно с другими вариантами.
Делаем кнопку
Схема работы кнопки проста до безобразия
Пока кнопка нажата — вся цепь замкнута, на устройство подается питание и система видит, что подключено новое устройство.
Когда кнопку отжимаем, то происходит разрыв цепи и устройство пропадает из системы.
Эта логика и есть ключевая во всем процессе создании кнопки.
Я разобрал старую клавиатуру и добыл из нее микросхему
Проверка работоспособности кнопки:
Кратчайшая теория udev
Процесс udevd отслеживает подключение/отключение девайса и создает файл устройства в директории /dev/ (совсем образное объяснение, для любителей подробностей смотри ссылки в конце статьи)
Во время подключения устройств udevd проверяет список правил в директории /etc/udev/rules.d/
Правила могут жить как и в одном файле так и в нескольких.
Создадим файл и добавим правило:
pi@raspbmc:~$ cat /etc/udev/rules.d/20-usb_button.rules
ATTRS{name}=="LITEON Technology USB Multimedia Keyboard", ATTRS{phys}=="usb-bcm2708_usb-1.2/input0", ACTION=="add", RUN+="/bin/sh /home/pi/usb.sh"
в debian нет необходимсто перезапускать udev после изменения правил, все происходит автоматически.
Это правило выполняется только когда соблюдаются все условия:
ATTRS{name}==«LITEON Technology USB Multimedia Keyboard» (имя подключенного устройства совпадает)
ATTRS{phys}==«usb-bcm2708_usb-1.2/input0» (устройство подключено в конкретный USB порт. Мне это необходимо, тк использую 2 кнопки, сделанные из одинаковых клавиатур)
ACTION==«add» (правило работает только когда устройство тольок что добавлено, есть еще параметр "remove". Если не указать Action, то скрипт будет постоянно запускаться, пока подключено устройство)
RUN+="/bin/sh /home/pi/usb.sh" (собственно наш скрипт, который запускается по нажатию кнопки, без /bin/sh так и не запустился, также см P.S.01 ниже)
Список атрибутов можно узнать следующим образом:
pi@raspbmc:~$ udevadm info -a -p $(udevadm info -q path -n /dev/input/by-path/platform-bcm2708_usb-usb-0\:1.2\:1.0-event-kbd)
looking at device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.2/1-1.2:1.0/input/input107/event0':
KERNEL=="event0"
SUBSYSTEM=="input"
DRIVER==""
looking at parent device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.2/1-1.2:1.0/input/input107':
KERNELS=="input107"
SUBSYSTEMS=="input"
DRIVERS==""
ATTRS{name}=="LITEON Technology USB Multimedia Keyboard"
ATTRS{phys}=="usb-bcm2708_usb-1.2/input0"
ATTRS{uniq}==""
ATTRS{properties}=="0"
....
где /dev/input/by-path/platform-bcm2708_usb-usb-0\:1.2\:1.0-event-kbd — адрес устройства
адрес устройства в системе можно узнать в момент подключения устройства:
pi@raspbmc:~$ udevadm monitor --env |grep DEVLINKS
DEVLINKS=/dev/input/by-id/usb-LITEON_Technology_USB_Multimedia_Keyboard-event-kbd /dev/input/by-path/platform-bcm2708_usb-usb-0:1.2:1.0-event-kbd
для дебага я использовал правило:
SUBSYSTEM=="usb", ATTRS{ID_MODEL_ID}=="c312", SYMLINK+="ABC"
и проверял создался ли симлинк устройства /dev/ABC
Итог
Вот и все. Мы получили кнопку, по нажатию которой запускается скрипт в системе.
стоимость:
старая клавиатура — 0р
кнопка — 10р
корпус — 0 р
И самое главное что такая кнопка не требует знаний микроконтроллеров и особого умения паять, удобна и доступна каждому :)
P.S.00 про мой корпус для кнопки.
P.S.01 Наткнулся на интересный баг и не смог забороть: скрипт указанный в правиле запускается 2 раза. Может кто подскажет?
P.S.10 Кнопку необходимо держать около 2х секунд, так как необходимо дождаться инициализации устройства в системе
P.S.11 Если решите повторить проект с какими либо измененими, настоятельно рекомендую хотя бы пролистать список литературы
P.S.100 Скрипт на python для работы с udev github.com/bockro/misc usb_checker.py
http://habrahabr.ru/post/206122/
|
Категория: Linux и не только |
Просмотров: 816 |
Добавил: laptop
| Рейтинг: 0.0/0 |
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]
| |
| | |
|
Волк слабее льва и тигра, но в цирке волк не выступает!
Волк - единственный из зверей, который может пойти в бой на более сильного противника.
Если же он проиграл бой, то до последнего вздоха смотрит в глаза противника. После этого умирает...
Внимание! |
|
Администратор сайта laptop.ucoz.ru не несет ответственности за содержание рекламных объявлений. Все используемые на сайте зарегистрированные товарные знаки принадлежат своим законным владельцам! Используемая со сторонних источников информация публикуется с обязательными ссылками на эти источники.
| |
|
|