今回はRaspberryPi Pico通称ラズパイピコでキーボード操作をしてみます。
もともと、ArduinoのLeonardoもしくは互換機のpro microでも
同じことはできるのですが、RaspberryPi Picoでもやってみることにします。
パソコンの操作を物理キーや、センサーでできると、
電子工作の幅が広がりますよね。
例えば、フォトセンサーに反応したときに
キーボードのEnterを押す機能を入れておいて、
また別に作ったソフトのスタートのトリガーにする。
なんて使い方ですね。
この方法だと、好きなセンサーがキーボードのエンターキー代わりになります。もちろんマウスのクリックだって設定可能です。
生産現場だと、パソコンはほぼほぼ必須になっていますが、
同時にキーボードとマウス操作が必要になることが多いです。
ただ、キーボードとマウス操作って、人が必ずしもやらないといけない
作業かというと、そうではないです。
装置にセンサーをつけておいて、そのセンサーが
反応したら自動的に動作開始にしておけば、
マウスもキーボードも操作不要なわけです。
※注意点:microPythonではなく、CircuitPythonを使用します。
CircuitPythonの導入方法についても解説しますのでご安心ください。
RaspberryPiPicoを使用してキーボード・マウスを操作する方法が理解できる。
Youtubeチャンネルにさまざまな動画を上げています。
↓↓↓こちらからYoutubeチャンネルにアクセス!! ↓↓↓
今回使用するもの【用意するもの】
今回キーボード操作に必要なものは以下のものです。
単純に時間が経ったら自動でキーボード操作を入れるようなプログラムだったら、
ジャンパーワイヤーやスイッチ類、ブレッドボードは不要です。
ただ、人間の入力があったほうがイメージしやすいので今回は使用します。
RaspberryPiPico(ラズパイピコ)
ラズパイピコです。今回はこいつが主役なので必ず入手しておきましょう。
入手する方法ですが、秋月電子や、switchscienceなどで通販で購入可能です。
もし面倒であれば、一応Amazonでも取り扱いはあります。
ただ、ちょっと転売価格なのであまりオススメはできません….
microB USBケーブル
↑のラズパイピコの写真に写っていますが、
PCとの接続にmicroB USBケーブルが必要になります。
手持ちであればそれで大丈夫ですが、もし持っていないよ。
という場合は、Amazonで買いましょう。
家電量販店だと高品質なのは間違いないですが、
そこまでの品質は必要ない場合が多いので、Amazonの中国製で十分です。
安いですし….
ジャンパーワイヤー
ジャンパーワイヤーは今回スイッチを使う関係で必要です。
配線に使うイメージですね。ブレッドボードにさせればなんでもOKです。
ちなみに、ジャンパーワイヤーが自作できるって知ってましたか??
ちょっと特殊な工具が必要になりますが、自由度が格段に上がるのでオススメです。
作り方や必要な材料についてはこちらの記事で紹介していますので、
興味がありましたらご覧ください。
スイッチ類
今回はタクトスイッチで入力していきます。
タクトスイッチじゃないとダメというわけではないので、
手持ちで何か入力に使えそうなものであればなんでも大丈夫です。
ちなみにいろんなタクトスイッチが入ったこんなのを私は使っています。
↓↓↓
ブレッドボード
スイッチとラズパイピコを固定するのに使います。
これがないと配線が結構大変….
スイッチを使わないようにしてテスト的にやる分には必要ないです。
ちなみにブレッドボードを買い足したい場合は、
こちらの記事のように安物ブレッドボードは避けたほうが良いです↓↓↓
配線方法
配線方法はこんな感じです。
タクトスイッチはGNDとGP13につながっています。
タクトスイッチを押すと、GP13がlow(GNDに落ちる)になって入力を検知する仕組みです。
RaspberryPiPicoにcircuitPythonを導入する
いきなり注意点です。
手順は以下の通りです。
それでは一つずつ解説していきます。
CircuitPythonの.uf2ファイルをダウンロードする
普段ラズパイピコを使用する場合、
raspberryPiPico本体についている
Bootselボタンを押しながらUSB接続
↓
ラズパイの公式で配布されている.uf2ファイルをドライブに投げ込む
↓
使えるようになる。
こんなイメージだと思いますが、
circuitpythonを使用する場合は、
ラズパイの公式で配布されている.uf2ファイルとは
別の.uf2ファイルを投げ込みます。
そうすることによってcircuitpythonが使えます。
意外と単純で簡単ですよね??
ではその.uf2ファイルはどこにあるのか?というと
こちらにあります。↓↓↓
リンク先に、
こんな感じでダウンロードできるので、ダウンロードしましょう。
ただし!!!
これは最新Ver.で、今回使用するのは少し古いVer.になります。
冒頭でお話したとおり、Thonnyとの相性問題なのか、
私の環境では少なくともこのVer.7.0.0ではマウス・キーボード操作ができませんでした。
試してみてできたのは、Ver.6.2.0beta3でした。
※2023/1/29追記
circuitpython Ver.7.3.3と
adafruit-circuitpython-hid-7.x ver.5.3.3でも動作確認済み。
BROWSE S3のほうがすぐに見つかります。
次に表示されるところで、japaneseを選択しましょう。
すると、過去にリリースされたVer.の一覧が表示されます。
そこから、Ver.6.2.0-beta3を選択します。
クリックすると、自動でダウンロードが始まります。
ファイルがダウンロードできたらCircuitPythonの用意が完了となります。
HIDライブラリをダウンロードする
続きまして、circuitpythonを使えるようにした後は、
マウス・キーボード操作ができるようにライブラリをダウンロードしましょう。
ライブラリとは、簡単に言うと便利ソフトです。
このライブラリを使用することで、
本来複雑な処理を入れないと動かせないところを、
関数化して簡単に動かすことができます。
作ってくれたかたに感謝です….
今回必要になるライブラリは、circuitpythonのVer.6.に対応するものです。
こちらにありますのでまずはダウンロードしておきましょう。
格納されている場所ですが、
まず右のほうのReleasesを探してください。
さらに、+がついているreleasesをクリックしましょう。
すると、このような感じで今までReleaseされたものが一覧で表示されます。
ここから、今回使用するVer.6に対応したライブラリをダウンロードします。
ちょうど矢印を付けておきました。
RaspberryPiPicoに.uf2ファイルを適用する
さて準備ができたので、
まずはラズパイピコのBootselボタンを押しながら、
PCとUSBを接続しましょう。
その後、出てきたドライブに、先ほどダウンロードした.uf2ファイルを
ドラッグ&ドロップします。
ドライブのLibフォルダにHIDライブラリをコピーする
次に、circuitpythonが使えるようになったラズパイピコのドライブを確認します。
このように、最初から入っている標準のライブラリがフォルダになっています。
こちらの中に、先ほどダウンロードしたライブラリを入れてあげます。
具体的な手順としては、
hidのライブラリを、
ドラッグアンドドロップです。
ここまででほとんど終わったようなものです。あと少しで動かせます!!
RaspberryPiPicoにPythonでコーディングする
仕上げにPythonでこちらのソースをコピー&ペーストしてみてください。
import board
import time
import usb_hid
from digitalio import DigitalInOut, Pull,Direction
from adafruit_hid.keyboard import Keyboard
from adafruit_hid.keycode import Keycode
# キーボードの設定を行う
kbd = Keyboard(usb_hid.devices)
# タクトスイッチのつながっているところを設定。
tact=DigitalInOut(board.GP13)
tact.direction=Direction.INPUT
# 今回は抵抗を使用しないのでプルアップしておきましょう。
tact.pull=Pull.UP
# タクトスイッチが押されているか視覚的にわかりやすいようにledも使う。
ledpin = DigitalInOut(board.GP25)
ledpin.direction = Direction.OUTPUT
# ここから無限ループ
while True:
# タクトスイッチが押されているか確認する。
if tact.value==1:
# 押されていなければledを光らせる。
ledpin.value = True
else:
# タクトスイッチが押されていたらキーボード操作する。
# 今回はAと打つ。
kbd.send(Keycode.A)
ledpin.value = False
time.sleep(0.2)
time.sleep(0.1)
(2023年1月29日board.が抜けていたのを修正)
ポイントは、今回は抵抗を使用していないので、
タクトスイッチがつながっているピンはpullupしておきましょう。
※pullupをしないと挙動が不安定になります。
pullupしているので、スイッチを押していないときがHigh
スイッチを押している時がLowとなります。
あとは、キーボード設定した変数で.sendしてあげればキーボード操作可能です。
while文の中をやりたいように変更することによって、
好きなマクロのようなものも作成可能です。
libフォルダにhidのライブラリを入れないとどうなるか?
libフォルダにhidのライブラリを入れない状態つまりこんな空の状態。
この状態で先ほどのコードを書き込むとどうなるか?
結果はこちら。
他にも、ライブラリとraspberry pi picoに入れたcircuitpythonの
Ver.の組み合わせによってもimportのエラー。つまり
5行目でエラーとなることがありそうです。
少なくても、
上記の組み合わせでは動作を確認できていますので、
とりあえずやってみたいならVer.をそろえてみてください。
※2023/1/29追記
上記の組み合わせに加えて、
この組み合わせでも先ほどのソースコードとlibへの格納方法で
動作することを確認しています。
まとめ
今回はRaspberryPiPicoでキーボード操作してみました。
Arduino pro microでも同様のことはできましたが、
どっちがいいでしょうかね….
Arduino pro microで似たようなことをした記事はこちら↓↓↓
コスト的なことを考えると、RaspberryPiPicoのほうが2/3の値段なので、
RaspberryPiPicoのほうがいいですね。
サイズを考えると、Arduino Pro microのほうが小さいので、
コンパクトに収めようと思ったらArduino Pro microのほうがいいですね。
あとは、安定的に供給されるかについては、
間違いなくRaspberryPiPicoのほうが確実ですね。
Arduino Pro micro自体互換品であって、
Arduinoの純正品ではありません。
もちろん今後Arduino pro microに載っている
Atmegaの32U4と同じチップが搭載された
マイコンボードが安定供給されれば問題はありませんが….
結論としては、どちらでもできるようにしたほうが良いのではないでしょうかね…
コメント
コメント失礼します。こちらのサイトのコードを入力したところ、
トレースバック(最新の呼び出しが末尾):
ファイル “”, 行 5, in
SyntaxError: 名前が長すぎます
このようなエラーが表示されるのですが原因は何でしょうか?ファイル名を短くしても同じようなエラーが表示され実行できません。
コメントありがとうございます。
5行目でエラーとのことですので、
importのところが原因と推察されます。
ご使用しているHID(ライブラリ)と、circuitpythonのVer.が
ここで紹介しているものと一致しているか確認していただけますか??