8. pyboard を USB マウスとして動作させる¶
pyboard は USB デバイスであり、デフォルトの USB フラッシュドライブの代わりにマウスとして機能するように設定できます。
これを行うには、最初に boot.py
ファイルを編集して、USB 構成を変更する必要があります。まだ boot.py
を一度も編集してない場合は、次のような内容になっています:
# boot.py -- USB とファイルシステムを設定するため、ブート時に実行します
# アプリケーションのコードは main.py に置いてください
import pyb
#pyb.main('main.py') # main script to run after this one
#pyb.usb_mode('VCP+MSC') # act as a serial and a storage device
#pyb.usb_mode('VCP+HID') # act as a serial device and a mouse
マウスモードを有効にするには、ファイルの最後の行のコメントを外して、次のようにします:
pyb.usb_mode('VCP+HID') # act as a serial device and a mouse
すでに boot.py
ファイルを変更していた場合、動作させるのに必要な最小限のコードは次のとおりです:
import pyb
pyb.usb_mode('VCP+HID')
これは、起動時に VCP (仮想COMポート、すなわちシリアルポート)および HID (Human Interface Device、ここではマウス) USB デバイスとして構成するように pyboard に指示します。
pyboard ドライブを取り出し/アンマウントし、RST スイッチを使用してリセットします。これで PC は pyboard をマウスとして検出するはずです!
8.1. 手動でマウスイベントを送信する¶
To get the py-mouse to do anything we need to send mouse events to the PC.
We will first do this manually using the REPL prompt. Connect to your
pyboard using your serial program and type the following (no need to type
the #
and text following it):
>>> hid = pyb.USB_HID()
>>> hid.send((0, 100, 0, 0)) # (button status, x-direction, y-direction, scroll)
Your mouse should move 100 pixels to the right! In the command above you are sending 4 pieces of information: button status, x-direction, y-direction, and scroll. The number 100 is telling the PC that the mouse moved 100 pixels in the x direction.
マウスを左右に振動させてみましょう:
>>> import math
>>> def osc(n, d):
... for i in range(n):
... hid.send((0, int(20 * math.sin(i / 10)), 0, 0))
... pyb.delay(d)
...
>>> osc(100, 50)
関数 osc
第1引数は送信するマウスイベントの数であり、第2引数はイベント間の遅延(ミリ秒単位)です。違う値に変えて遊んでみてください。
練習問題: マウスを円状に回してください。
8.2. 加速度センサーでマウス操作する¶
今度は、加速度センサーを使って、マウスを pyboard の角度に基づいて移動させます。次のコードは、REPL プロンプトで直接入力することも、main.pyファイルに入れることもできます。ここでは、セーフモードに入る方法を学習するために main.py
にコードを入れることにします。
現時点では、pyboard がシリアル USB デバイスと HID (マウス)として動作しています。したがって、ファイルシステムにアクセスして main.py
ファイルを編集することはできません。
また、 boot.py
も編集できないので、HID モードから抜け出して、USB ドライブが使える通常のモードに戻ることもできません...
これを回避するには セーフモード に入る必要があります。これは [セーフモードのチュートリアル](tut-reset)に説明されていますが、ここでも手順を示しておきます:
USR スイッチを押し続けます。
USR を押しながら、RST スイッチを押して放します。
その後、LED が緑からオレンジ、緑+オレンジへ、そして元に戻るということを繰り返します。
オレンジの LED だけが点灯 するまで USR を押し続け、USR スイッチを放します。
オレンジの LED はすばやく4回点滅してから消灯します。
これでセーフモードになりました。
セーフモードでは boot.py
と main.py
ファイルは実行されないので、pyboard はデフォルト設定で起動します。つまり、ファイルシステムにアクセスできるようになり(USBドライブが表示されます)、 main.py
を編集できます。(main.py
の編集を終えてから HID モードに戻したいので、boot.py
はそのままの状態にしておきます。)
main.py
に次のコードを書き込みます:
import pyb
switch = pyb.Switch()
accel = pyb.Accel()
hid = pyb.USB_HID()
while not switch():
hid.send((0, accel.x(), accel.y(), 0))
pyb.delay(20)
ファイルを保存し、pyboard ドライブの取り出し/アンマウントを行い、RST スイッチを使ってリセットします。これでマウスとして機能し、ボードの角度によってマウスが動きます。それを試してみて、さらにマウスを静かにできるかを確かめてください!
マウスの動きを止めるには、USR スイッチを押します。
y軸は反転していることに気づくでしょう。これは簡単に修正できます: 上記のコードの hid.send()
のy座標の前にマイナス記号を付けるだけです。
8.3. pyboardを通常の状態に戻す¶
pyboard をそのままにしておくと、USB に繋ぐたびにマウスのように振る舞います。おそらくは通常の状態に戻したいと思うでしょう。これを行うには、最初にセーフモードに入り(上記参照)、 boot.py
ファイルを編集する必要があります。boot.py
ファイルの VCP+HID
設定の行をコメントアウト(該当行の先頭に # を置きます)。それは次のようになります:
#pyb.usb_mode('VCP+HID') # act as a serial device and a mouse
ファイルを保存し、ドライブの取り出し/アンマウント、および pyboard のリセットを行います。これで通常の動作モードに戻ります。