8. Делаем из pyboard USB мышь

Pyboard это USB устройство, которое можно превратить в обычную USB мышь.

Для того чтобы сделать это, мы должны изменить конфигурацию USB в файле boot.py. Он будет выглядеть так

# boot.py -- run on boot-up
# can run arbitrary Python, but best to keep it minimal

import pyb
#pyb.main('main.py') # main script to run after this one
#pyb.usb_mode('CDC+MSC') # act as a serial and a storage device
#pyb.usb_mode('CDC+HID') # act as a serial device and a mouse

Чтобы включить режим мыши - раскомментируйте последнюю строку, сделав её похожей на

pyb.usb_mode('CDC+HID') # act as a serial device and a mouse

Если вы уже изменили ваш файл boot.py, то остаётся написать совсем немного кода:

import pyb
pyb.usb_mode('CDC+HID')

Это настроит pyboard как CDC (последовательный/serial) и HID (устройство для взаимодействия с человеком, в нашем случае - мышь) USB устройство когда он загрузится.

Извлеките/размонтируйте pyboard и перезапустите, используя кнопку RST. Теперь ваш компьютер должен распознать pyboard как мышь!

8.1. Отправка событий py-мыши компьютеру

Чтобы получить py-мышь - мы должны отправлять события py-мыши компьютеру. Первым делом используем REPL. Подключитесь к вашему pyboard, используя программу удалённого доступа и введите следующее

>>> pyb.hid((0, 10, 0, 0))

Ваш курсор должен передвинуться на 10 пикселей вправо! В команде выше вы отправили 4 единицы информации: о состоянии кнопки, x, y, и скроллинг. В данном случае число 10 означает что положение курсора должно измениться на десять пикселей в положительном направлении относительно оси x.

Давайте сделаем так, чтобы курсор вибрировал (влево и право):

>>> import math
>>> def osc(n, d):
...   for i in range(n):
...     pyb.hid((0, int(20 * math.sin(i / 10)), 0, 0))
...     pyb.delay(d)
...
>>> osc(100, 50)

Первый аргумент функции osc - количество событий, которые будут отправлены компьютеру. Второй - задержка (в миллисекундах) между событиями. Поэкспериментируйте с различными значениями.

Упражнение: сделайте так, чтобы курсор двигался по кругу.

8.2. Мышка из акселерометра

Тепреь давайте сделаем из pyboard настоящую мышку при помощи акселерометра. Следующий код можно ввести непосредственно в интерактивной строке REPL или написать в файл main.py. В данном случае мы расположим код в main.py так как, сделав это, мы научимся работать в безопасном режиме.

На данный момент pyboard выступает в роли последовательного USB устройства и HID (мышь). Поэтому мы не имеем доступа к файловой системе и не можем редактировать файл main.py.

Так же и файл boot.py мы не можем отредактировать чтобы выйти из HID-режима и вернуться к нормальному режиму USB устройства...

Чтобы выйти из этой ситуации нам необходимо перейти в безопасный режим. Это было описано в [безопасный режим и возврат к заводским настройкам](tut-reset), но мы повторим инструкции:

  1. Подключите pyboard по USB.
  2. Нажмите и удерживайте кнопку USR.
  3. Удерживая USR, нажмите и отпустите RST.
  4. Светодиоды начнут поочереди переключаться между режимами: зелёный, оранжевый, зелёный+оранжевый.
  5. В тот момент когда будет гореть только оранжевый светодиод - отпустите USR.
  6. Оранжевый светодиод должен быстро помигать 4 раза и выключиться.
  7. Теперь вы в безопасном режиме.

В безопасном режиме файлы boot.py и main.py``не выполняются и pyboard загружается с настройками по умолчанию. Это означает, что теперь у нас есть доступ к файловой системе (должен появиться USB диск) и мы можем редактировать ``main.py. (Оставим boot.py без изменений так как, после внесения изменений в main.py, мы по-прежнему хотим использовать HID-режим.)

В main.py напишем следующий код:

import pyb

switch = pyb.Switch()
accel = pyb.Accel()

while not switch():
    pyb.hid((0, accel.x(), accel.y(), 0))
    pyb.delay(20)

Сохраним наш файл, извлечём/размонтируем pyboard и перезагрузим его, используя кнопку RST. Теперь pyboard будет работать как мышь: Любое отклонение платы от горизонтального положения передвигает курсор мыши.

Нажмите USR чтобы прекратить работу программы.

Вы заметите, что ось y инвертирована. Это легко исправить: влего лишь поставим минус перед y-координатами в pyb.hid().

8.3. Восстановление pyboard к нормальному состоянию

Если мы оставим всё как есть, то каждый раз при подключении, pyboard будет вести себя как мышь. Возможно вы не хотите этого. Чтобы вернуться нормальное состояние, нужно первым делом войти в безопасный режим (смотри выше) и отредактировать файл boot.py. В boot.py нужно закомментировать (поставить в начало строки символ #) строку с CDC+HID настройками. Должно получиться следующее:

#pyb.usb_mode('CDC+HID') # act as a serial device and a mouse

Сохраним наш файл, извлечём/размонтируем pyboard и перезапустим его. Мы вернулись к нормальному режиму.