Espruino:Примеры/HID-клавиатуры с поддержкой BLE: различия между версиями
Myagkij (обсуждение | вклад) (Новая страница: «{{Espruino/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[ www.espruino.com - ]</ref>= <syntaxhighlig...») |
Myagkij (обсуждение | вклад) |
||
(не показаны 4 промежуточные версии 2 участников) | |||
Строка 3: | Строка 3: | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
=<ref>[ www.espruino.com - ]</ref>= | =HID-клавиатуры с поддержкой BLE<ref>[https://www.espruino.com/BLE+Keyboard www.espruino.com - ]</ref>= | ||
[[BLE-устройства]]ми с [[HID-интерфейс]]ом (от ''«human interface device»'', т.е. ''«человеко-машинный интерфейс»'') могут быть, к примеру, клавиатуры, мышки и кнопки. Всё это кнопочные устройства, поэтому мы можем эмулировать их при помощи [[Puck.js]], тоже оснащённого кнопкой. | |||
{{Примечание1|Для сопряжения с [[Windows]] понадобится прошивка не ниже версии ''1v92'' (в этой версии была добавлена возможность привязки). Более ранние версии прошивки позволяют использовать [[Espruino]] в качестве клавиатуры на [[Android]], [[Mac OS]] и ''«Хромбуках»'', но всё же рекомендуем установить самую последнюю версию прошивки.}} | |||
{{Примечание1|При активном соединении [[Bluetooth HID]] включить нельзя. Чтобы он заработал (если вы подключились беспроводным способом), вам надо загрузить код, отключиться, а затем снова подключиться при помощи функции сопряжения вашей [[ОС]]. Если [[HID]] будет отключен, отправка HID-данных о нажатии клавиш будет выдавать исключение.}} | |||
[[BLE HID]] можно включить, задав [[HID]]-репорт в аргументе функции [http://wikihandbk.com/wiki/Espruino:Справочник_по_API/Класс_NRF/setServices() NRF.setServices()]. Чтобы упростить эту процедуру, в модули были добавлены наиболее часто используемые типы HID-репортов. | |||
== Клавиатуры == | |||
Эмуляция клавиатуры осуществляется при помощи модуля [https://www.espruino.com/modules/ble_hid_keyboard.js «ble_hid_keyboard»] (более подробно о модулях читайте [https://www.espruino.com/Modules тут]). | |||
Пользоваться им очень просто – просто вызовите [[NRF.setServices()]] и задайте в её аргументе HID-репорт, предоставленный этим модулем. После этого вы сможете воспользоваться методом [[.tap()]], чтобы с его помощью отправить информацию о нажатии на кнопку. Или же можете напрямую воспользоваться функцией NRF.sendHIDReport(). | |||
<syntaxhighlight lang="javascript"> | |||
var kb = require("ble_hid_keyboard"); | |||
NRF.setServices(undefined, { hid : kb.report }); | |||
function btnPressed() { | |||
// Отправляем 'a': | |||
kb.tap(kb.KEY.A, 0, function() { | |||
// Следом отправляем заглавную 'A': | |||
kb.tap(kb.KEY.A, kb.MODIFY.SHIFT); | |||
}); | |||
} | |||
// Запускаем btnPressed() при каждом нажатии на кнопку: | |||
setWatch(btnPressed, BTN, {edge:"rising",repeat:true,debounce:50}); | |||
</syntaxhighlight> | |||
== Светодиоды == | |||
Если вам нужно включить какой-то клавиатурный [[светодиод]] ({{клавиша|Caps Lock}}, {{клавиша|Num Lock}} и т.д.), то для этого нужно воспользоваться событием [http://wikihandbk.com/wiki/Espruino:Справочник_по_API/Класс_NRF/HID NRF.on('HID', ...)] и с его помощью отправить на [[Espruino]] соответствующее сообщение. | |||
* Бит 0: Num Lock | |||
* Бит 1: Caps Lock | |||
* Бит 2: Scroll Lock | |||
* Бит 3: Compose | |||
* Бит 4: Kana | |||
Например, код ниже включит светодиоды '''LED1''' и '''LED2''', отвечающие за {{клавиша|Num Lock}} и {{клавиша|Caps Lock}}: | |||
<syntaxhighlight lang="javascript"> | |||
NRF.on('HID', function(v) { | |||
LED1.write(v&1); | |||
LED2.write(v&2); | |||
}); | |||
</syntaxhighlight> | |||
Так вы можете отправлять на [[Espruino]] сообщения/данные безо всяких драйверов или специфического для платформ кода – просто переключая состояние индикаторов {{клавиша|Caps Lock}}, {{клавиша|Num Lock}} и других. | |||
== Клавиши для управления проигрывателем == | |||
Но клавиши управления проигрывателем на клавиатурах (проигрывание/стоп/громкость и т.д.) воспринимаются сервисами [[USB]] и [[BLE]] как совершенно отдельное устройство. | |||
Управление ими осуществляется с помощью модуля [https://www.espruino.com/modules/ble_hid_controls.js «ble_hid_controls»]. | |||
<syntaxhighlight lang="javascript"> | |||
var controls = require("ble_hid_controls"); | |||
NRF.setServices(undefined, { hid : controls.report }); | |||
// Проигрывание/остановка музыки: | |||
controls.playpause(); | |||
// Дважды отправляем volumeUp(): | |||
controls.volumeUp(function() { | |||
controls.volumeUp(); | |||
}); | |||
// Другие функции: | |||
//controls.next(); | |||
//controls.prev(); | |||
//controls.stop(); | |||
//controls.mute(); | |||
//controls.volumeDown(); | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Мышка == | |||
Кроме того, вы можете эмулировать мышку при помощи модуля [https://www.espruino.com/modules/ble_hid_mouse.js «ble_hid_mouse»]. Например: | |||
<syntaxhighlight lang="javascript"> | |||
var mouse = require("ble_hid_mouse"); | |||
NRF.setServices(undefined, { hid : mouse.report }); | |||
function btnPressed() { | |||
mouse.send(0,0,mouse.BUTTONS.LEFT); // движение по оси X, | |||
// движение по оси Y, | |||
// нажатия на кнопки | |||
} | |||
// запускаем btnPressed() при каждом нажатии на кнопку: | |||
setWatch(btnPressed, BTN, {edge:"rising",repeat:true,debounce:50}); | |||
</syntaxhighlight> | |||
== Управление с помощью низкоуровневого доступа == | |||
Вы можете эмулировать и многие другие устройства при помощи собственного [[HID-репорт]]а: | |||
<syntaxhighlight lang="javascript"> | |||
report = new Uint8Array([ | |||
]); | |||
NRF.setServices(undefined, { hid : report }); | |||
</syntaxhighlight> | |||
После этого можно вызвать [[NRF.sendHIDReport()]], чтобы отправить данные. Если это клавиатура, то это должен быть массив в следующем формате: | |||
<syntaxhighlight lang="javascript"> | |||
[модификатор, зарезервировано, клавиша1, клавиша2, клавиша3, клавиша4, клавиша5, клавиша6 ] | |||
</syntaxhighlight> | |||
Коды клавиатурных клавиш можно без труда найти в сети, но, например, для клавиши ''«a»'' это будет [0,0,4,0,0,0,0,0]. Чтобы отпустить её, отправьте [0,0,0,0,0,0,0,0]. | |||
{{Примечание1|Модификаторы заданы в '''require("ble_hid_keyboard").MODIFY''', а наиболее часто используемые клавиши – в '''require("ble_hid_keyboard").KEY'''.}} | |||
Вот список модификаторов: | |||
<syntaxhighlight lang="javascript"> | |||
1 : левый Control | |||
2 : левый Shift | |||
4 : левый Alt | |||
8 : левый GUI | |||
16 : правый Control | |||
32 : правый Shift | |||
64 : правый Alt | |||
128 : правый GUI | |||
</syntaxhighlight> | |||
То есть, чтобы отправить заглавную ''«A»'', отправьте [2,0,4,0,0,0,0,0], а затем [0,0,0,0,0,0,0,0]. | |||
<syntaxhighlight lang="javascript"> | |||
NRF.sendHIDReport([2,0,4], function() { | |||
NRF.sendHIDReport([0,0,0]) | |||
}) | |||
</syntaxhighlight> | |||
Коды клавиш можно найти в [https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf этом PDF-документе] в разделе «10 Keyboard/Keypad Page», но если вкратце, то они выглядят следующим образом: | |||
* От «a» до «z» – это 4-26 | |||
* От «1» до «9» – это 30-38 | |||
* Цифра «0» – это 39 | |||
* Клавиша Return – это 40 | |||
* Пробел – это 44 | |||
== Использование == | |||
* [http://wikihandbk.com/wiki/Espruino:Примеры/Управление_аудиопроигрывателем_с_помощью_BLE-функции_Puck.js Управление аудиопроигрывателем с помощью BLE-функции Puck.js] | |||
* [http://wikihandbk.com/wiki/Espruino:Примеры/Управление_видеопроигрывателем_с_помощью_спортивного_тренажера Видео, управляемое с помощью спортивного тренажера] | |||
=См.также= | =См.также= | ||
=Внешние ссылки= | =Внешние ссылки= | ||
Строка 19: | Строка 162: | ||
<references /> | <references /> | ||
{{Навигационная таблица/Espruino | {{Навигационная таблица/Портал/Espruino}} | ||
Текущая версия от 20:45, 22 мая 2023
HID-клавиатуры с поддержкой BLE[1]
BLE-устройствами с HID-интерфейсом (от «human interface device», т.е. «человеко-машинный интерфейс») могут быть, к примеру, клавиатуры, мышки и кнопки. Всё это кнопочные устройства, поэтому мы можем эмулировать их при помощи Puck.js, тоже оснащённого кнопкой.
BLE HID можно включить, задав HID-репорт в аргументе функции NRF.setServices(). Чтобы упростить эту процедуру, в модули были добавлены наиболее часто используемые типы HID-репортов.
Клавиатуры
Эмуляция клавиатуры осуществляется при помощи модуля «ble_hid_keyboard» (более подробно о модулях читайте тут).
Пользоваться им очень просто – просто вызовите NRF.setServices() и задайте в её аргументе HID-репорт, предоставленный этим модулем. После этого вы сможете воспользоваться методом .tap(), чтобы с его помощью отправить информацию о нажатии на кнопку. Или же можете напрямую воспользоваться функцией NRF.sendHIDReport().
var kb = require("ble_hid_keyboard");
NRF.setServices(undefined, { hid : kb.report });
function btnPressed() {
// Отправляем 'a':
kb.tap(kb.KEY.A, 0, function() {
// Следом отправляем заглавную 'A':
kb.tap(kb.KEY.A, kb.MODIFY.SHIFT);
});
}
// Запускаем btnPressed() при каждом нажатии на кнопку:
setWatch(btnPressed, BTN, {edge:"rising",repeat:true,debounce:50});
Светодиоды
Если вам нужно включить какой-то клавиатурный светодиод ( Caps Lock , Num Lock и т.д.), то для этого нужно воспользоваться событием NRF.on('HID', ...) и с его помощью отправить на Espruino соответствующее сообщение.
- Бит 0: Num Lock
- Бит 1: Caps Lock
- Бит 2: Scroll Lock
- Бит 3: Compose
- Бит 4: Kana
Например, код ниже включит светодиоды LED1 и LED2, отвечающие за Num Lock и Caps Lock :
NRF.on('HID', function(v) {
LED1.write(v&1);
LED2.write(v&2);
});
Так вы можете отправлять на Espruino сообщения/данные безо всяких драйверов или специфического для платформ кода – просто переключая состояние индикаторов Caps Lock , Num Lock и других.
Клавиши для управления проигрывателем
Но клавиши управления проигрывателем на клавиатурах (проигрывание/стоп/громкость и т.д.) воспринимаются сервисами USB и BLE как совершенно отдельное устройство.
Управление ими осуществляется с помощью модуля «ble_hid_controls».
var controls = require("ble_hid_controls");
NRF.setServices(undefined, { hid : controls.report });
// Проигрывание/остановка музыки:
controls.playpause();
// Дважды отправляем volumeUp():
controls.volumeUp(function() {
controls.volumeUp();
});
// Другие функции:
//controls.next();
//controls.prev();
//controls.stop();
//controls.mute();
//controls.volumeDown();
Мышка
Кроме того, вы можете эмулировать мышку при помощи модуля «ble_hid_mouse». Например:
var mouse = require("ble_hid_mouse");
NRF.setServices(undefined, { hid : mouse.report });
function btnPressed() {
mouse.send(0,0,mouse.BUTTONS.LEFT); // движение по оси X,
// движение по оси Y,
// нажатия на кнопки
}
// запускаем btnPressed() при каждом нажатии на кнопку:
setWatch(btnPressed, BTN, {edge:"rising",repeat:true,debounce:50});
Управление с помощью низкоуровневого доступа
Вы можете эмулировать и многие другие устройства при помощи собственного HID-репорта:
report = new Uint8Array([
]);
NRF.setServices(undefined, { hid : report });
После этого можно вызвать NRF.sendHIDReport(), чтобы отправить данные. Если это клавиатура, то это должен быть массив в следующем формате:
[модификатор, зарезервировано, клавиша1, клавиша2, клавиша3, клавиша4, клавиша5, клавиша6 ]
Коды клавиатурных клавиш можно без труда найти в сети, но, например, для клавиши «a» это будет [0,0,4,0,0,0,0,0]. Чтобы отпустить её, отправьте [0,0,0,0,0,0,0,0].
Вот список модификаторов:
1 : левый Control
2 : левый Shift
4 : левый Alt
8 : левый GUI
16 : правый Control
32 : правый Shift
64 : правый Alt
128 : правый GUI
То есть, чтобы отправить заглавную «A», отправьте [2,0,4,0,0,0,0,0], а затем [0,0,0,0,0,0,0,0].
NRF.sendHIDReport([2,0,4], function() {
NRF.sendHIDReport([0,0,0])
})
Коды клавиш можно найти в этом PDF-документе в разделе «10 Keyboard/Keypad Page», но если вкратце, то они выглядят следующим образом:
- От «a» до «z» – это 4-26
- От «1» до «9» – это 30-38
- Цифра «0» – это 39
- Клавиша Return – это 40
- Пробел – это 44
Использование
- Управление аудиопроигрывателем с помощью BLE-функции Puck.js
- Видео, управляемое с помощью спортивного тренажера
См.также
Внешние ссылки