Espruino:Примеры/HID-клавиатуры с поддержкой BLE: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
Нет описания правки
Строка 5: Строка 5:
=HID-клавиатуры с поддержкой BLE<ref>[https://www.espruino.com/BLE+Keyboard www.espruino.com - ]</ref>=
=HID-клавиатуры с поддержкой BLE<ref>[https://www.espruino.com/BLE+Keyboard www.espruino.com - ]</ref>=


BLE-устройствами с HID-интерфейсом (от «human interface device», т.е. «человеко-машинный интерфейс») могут быть, к примеру, клавиатуры, мышки и кнопки. Всё это кнопочные устройства, поэтому мы можем эмулировать их при помощи Puck.js, тоже оснащённого кнопкой.
[[BLE-устройства]]ми с [[HID-интерфейс]]ом (от ''«human interface device»'', т.е. ''«человеко-машинный интерфейс»'') могут быть, к примеру, клавиатуры, мышки и кнопки. Всё это кнопочные устройства, поэтому мы можем эмулировать их при помощи [[Puck.js]], тоже оснащённого кнопкой.


'''Примечание:''' Для сопряжения с Windows понадобится прошивка не ниже версии 1v92 (в этой версии была добавлена возможность привязки). Более ранние версии прошивки позволяют использовать Espruino в качестве клавиатуры на Android, Mac OS и «Хромбуках», но всё же рекомендуем установить самую последнюю версию прошивки.
'''Примечание:''' Для сопряжения с [[Windows]] понадобится прошивка не ниже версии ''1v92'' (в этой версии была добавлена возможность привязки). Более ранние версии прошивки позволяют использовать [[Espruino]] в качестве клавиатуры на [[Android]], [[Mac OS]] и ''«Хромбуках»'', но всё же рекомендуем установить самую последнюю версию прошивки.


Примечание: При активном соединении Bluetooth HID включить нельзя. Чтобы он заработал (если вы подключились беспроводным способом), вам надо загрузить код, отключиться, а затем снова подключиться при помощи функции сопряжения вашей ОС. Если HID будет отключен, отправка HID-данных о нажатии клавиш будет выдавать исключение.
'''Примечание:''' При активном соединении [[Bluetooth HID]] включить нельзя. Чтобы он заработал (если вы подключились беспроводным способом), вам надо загрузить код, отключиться, а затем снова подключиться при помощи функции сопряжения вашей [[ОС]]. Если [[HID]] будет отключен, отправка HID-данных о нажатии клавиш будет выдавать исключение.


BLE HID можно включить, задав HID-репорт в аргументе функции [http://wikihandbk.com/wiki/Espruino:Справочник_по_API/Класс_NRF/setServices() NRF.setServices()]. Чтобы упростить эту процедуру, в модули были добавлены наиболее часто используемые типы HID-репортов.
[[BLE HID]] можно включить, задав [[HID]]-репорт в аргументе функции [http://wikihandbk.com/wiki/Espruino:Справочник_по_API/Класс_NRF/setServices() NRF.setServices()]. Чтобы упростить эту процедуру, в модули были добавлены наиболее часто используемые типы HID-репортов.


== Клавиатуры ==
== Клавиатуры ==
Строка 17: Строка 17:
Эмуляция клавиатуры осуществляется при помощи модуля [https://www.espruino.com/modules/ble_hid_keyboard.js «ble_hid_keyboard»] (более подробно о модулях читайте [https://www.espruino.com/Modules тут]).  
Эмуляция клавиатуры осуществляется при помощи модуля [https://www.espruino.com/modules/ble_hid_keyboard.js «ble_hid_keyboard»] (более подробно о модулях читайте [https://www.espruino.com/Modules тут]).  


Пользоваться им очень просто – просто вызовите NRF.setServices() и задайте в её аргументе HID-репорт, предоставленный этим модулем. После этого вы сможете воспользоваться методом .tap(), чтобы с его помощью отправить информацию о нажатии на кнопку. Или же можете напрямую воспользоваться функцией NRF.sendHIDReport().
Пользоваться им очень просто – просто вызовите [[NRF.setServices()]] и задайте в её аргументе HID-репорт, предоставленный этим модулем. После этого вы сможете воспользоваться методом [[.tap()]], чтобы с его помощью отправить информацию о нажатии на кнопку. Или же можете напрямую воспользоваться функцией NRF.sendHIDReport().


<syntaxhighlight lang="javascript" enclose="div">
<syntaxhighlight lang="javascript" enclose="div">
Строка 37: Строка 37:
== Светодиоды ==
== Светодиоды ==


Если вам нужно включить какой-то клавиатурный светодиод (Caps Lock, Num Lock и т.д.), то для этого нужно воспользоваться событием [http://wikihandbk.com/wiki/Espruino:Справочник_по_API/Класс_NRF/HID NRF.on('HID', ...)] и с его помощью отправить на Espruino соответствующее сообщение.
Если вам нужно включить какой-то клавиатурный [[светодиод]] ({{клавиша|Caps Lock}}, {{клавиша|Num Lock}} и т.д.), то для этого нужно воспользоваться событием [http://wikihandbk.com/wiki/Espruino:Справочник_по_API/Класс_NRF/HID NRF.on('HID', ...)] и с его помощью отправить на [[Espruino]] соответствующее сообщение.


* Бит 0: Num Lock
* Бит 0: Num Lock
Строка 45: Строка 45:
* Бит 4: Kana  
* Бит 4: Kana  


Например, код ниже включит светодиоды LED1 и LED2, отвечающие за Num Lock и Caps Lock:
Например, код ниже включит светодиоды '''LED1''' и '''LED2''', отвечающие за {{клавиша|Num Lock}} и {{клавиша|Caps Lock}}:


<syntaxhighlight lang="javascript" enclose="div">
<syntaxhighlight lang="javascript" enclose="div">
Строка 54: Строка 54:
</syntaxhighlight>
</syntaxhighlight>


Так вы можете отправлять на Espruino сообщения/данные безо всяких драйверов или специфического для платформ кода – просто переключая состояние индикаторов Caps Lock, Num Lock и других.
Так вы можете отправлять на [[Espruino]] сообщения/данные безо всяких драйверов или специфического для платформ кода – просто переключая состояние индикаторов {{клавиша|Caps Lock}}, {{клавиша|Num Lock}} и других.


== Клавиши для управления проигрывателем ==
== Клавиши для управления проигрывателем ==


Но клавиши управления проигрывателем на клавиатурах (проигрывание/стоп/громкость и т.д.) воспринимаются сервисами USB и BLE как совершенно отдельное устройство.
Но клавиши управления проигрывателем на клавиатурах (проигрывание/стоп/громкость и т.д.) воспринимаются сервисами [[USB]] и [[BLE]] как совершенно отдельное устройство.


Управление ими осуществляется с помощью модуля [https://www.espruino.com/modules/ble_hid_controls.js «ble_hid_controls»].
Управление ими осуществляется с помощью модуля [https://www.espruino.com/modules/ble_hid_controls.js «ble_hid_controls»].
Строка 102: Строка 102:
== Управление с помощью низкоуровневого доступа ==
== Управление с помощью низкоуровневого доступа ==


Вы можете эмулировать и многие другие устройства при помощи собственного HID-репорта:
Вы можете эмулировать и многие другие устройства при помощи собственного [[HID-репорт]]а:


<syntaxhighlight lang="javascript" enclose="div">
<syntaxhighlight lang="javascript" enclose="div">
Строка 110: Строка 110:
</syntaxhighlight>
</syntaxhighlight>


После этого можно вызвать NRF.sendHIDReport(), чтобы отправить данные. Если это клавиатура, то это должен быть массив в следующем формате:
После этого можно вызвать [[NRF.sendHIDReport()]], чтобы отправить данные. Если это клавиатура, то это должен быть массив в следующем формате:


<syntaxhighlight lang="javascript" enclose="div">
<syntaxhighlight lang="javascript" enclose="div">
Строка 116: Строка 116:
</syntaxhighlight>
</syntaxhighlight>


Коды клавиатурных клавиш можно без труда найти в сети, но, например, для клавиши «a» это будет [0,0,4,0,0,0,0,0]. Чтобы отпустить её, отправьте [0,0,0,0,0,0,0,0].
Коды клавиатурных клавиш можно без труда найти в сети, но, например, для клавиши ''«a»'' это будет [0,0,4,0,0,0,0,0]. Чтобы отпустить её, отправьте [0,0,0,0,0,0,0,0].


Примечание: Модификаторы заданы в require("ble_hid_keyboard").MODIFY, а наиболее часто используемые клавиши – в require("ble_hid_keyboard").KEY.
Примечание: Модификаторы заданы в '''require("ble_hid_keyboard").MODIFY''', а наиболее часто используемые клавиши – в '''require("ble_hid_keyboard").KEY'''.


Вот список модификаторов:
Вот список модификаторов:
Строка 133: Строка 133:
</syntaxhighlight>
</syntaxhighlight>


То есть, чтобы отправить заглавную «A», отправьте [2,0,4,0,0,0,0,0], а затем [0,0,0,0,0,0,0,0].
То есть, чтобы отправить заглавную ''«A»'', отправьте [2,0,4,0,0,0,0,0], а затем [0,0,0,0,0,0,0,0].


<syntaxhighlight lang="javascript" enclose="div">
<syntaxhighlight lang="javascript" enclose="div">

Версия от 18:25, 7 июля 2021

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


HID-клавиатуры с поддержкой BLE[1]

BLE-устройствами с HID-интерфейсом (от «human interface device», т.е. «человеко-машинный интерфейс») могут быть, к примеру, клавиатуры, мышки и кнопки. Всё это кнопочные устройства, поэтому мы можем эмулировать их при помощи Puck.js, тоже оснащённого кнопкой.

Примечание: Для сопряжения с Windows понадобится прошивка не ниже версии 1v92 (в этой версии была добавлена возможность привязки). Более ранние версии прошивки позволяют использовать Espruino в качестве клавиатуры на Android, Mac OS и «Хромбуках», но всё же рекомендуем установить самую последнюю версию прошивки.

Примечание: При активном соединении Bluetooth HID включить нельзя. Чтобы он заработал (если вы подключились беспроводным способом), вам надо загрузить код, отключиться, а затем снова подключиться при помощи функции сопряжения вашей ОС. Если HID будет отключен, отправка HID-данных о нажатии клавиш будет выдавать исключение.

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].

Примечание: Модификаторы заданы в require("ble_hid_keyboard").MODIFY, а наиболее часто используемые клавиши – в require("ble_hid_keyboard").KEY.

Вот список модификаторов:

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

Использование

См.также

Внешние ссылки