Youtubeでも活動中

チャンネル登録してくれたら喜びます。
リンクはフリーです。共有・拡散は大歓迎!

このボタンで簡単にチャンネル登録!
PR

RaspberryPiPico【ラズパイピコ】でキーボード操作??

pico-keyboard-ctrl

今回はRaspberryPi Pico通称ラズパイピコでキーボード操作をしてみます。

もともと、ArduinoのLeonardoもしくは互換機のpro microでも
同じことはできるのですが、RaspberryPi Picoでもやってみることにします。

パソコンの操作を物理キーや、センサーでできると、
電子工作の幅が広がりますよね。

例えば、フォトセンサーに反応したときに
キーボードのEnterを押す機能を入れておいて、
また別に作ったソフトのスタートのトリガーにする。
なんて使い方ですね。

生産現場だと、パソコンはほぼほぼ必須になっていますが、
同時にキーボードとマウス操作が必要になることが多いです。

ただ、キーボードとマウス操作って、人が必ずしもやらないといけない
作業かというと、そうではないです。

装置にセンサーをつけておいて、そのセンサーが
反応したら自動的に動作開始にしておけば、
マウスもキーボードも操作不要なわけです。

※注意点:microPythonではなく、CircuitPythonを使用します。

CircuitPythonの導入方法についても解説しますのでご安心ください。

この記事を読むことでわかること

自己紹介

東証一部上場企業でサラリーマンしてます。

主に工場(生産現場)で使用する検査装置のアプリケーション開発してます。

ヒトの作業を自動化して簡略化するアプリケーションを日々開発中。

2022年5月に転職。現役バリバリの技術者です。
現在は超大手企業の新規事業分野で装置の研究・開発をしています。

Youtubeチャンネルにさまざまな動画を上げています

↓↓↓こちらからYoutubeチャンネルにアクセス!! ↓↓↓

PR

今回使用するもの【用意するもの】

今回キーボード操作に必要なものは以下のものです。

  • RaspberryPiPico(ラズパイピコ)
  • microB USBケーブル
  • ジャンパーワイヤー
  • スイッチ類
  • ブレッドボード

単純に時間が経ったら自動でキーボード操作を入れるようなプログラムだったら、

ジャンパーワイヤーやスイッチ類、ブレッドボードは不要です。

ただ、人間の入力があったほうがイメージしやすいので今回は使用します。

RaspberryPiPico(ラズパイピコ)

RaspberryPiPicoのLED
RaspberryPiPico

ラズパイピコです。今回はこいつが主役なので必ず入手しておきましょう。

入手する方法ですが、秋月電子や、switchscienceなどで通販で購入可能です。

もし面倒であれば、一応Amazonでも取り扱いはあります。

ただ、ちょっと転売価格なのであまりオススメはできません….

microB USBケーブル

↑のラズパイピコの写真に写っていますが、

PCとの接続にmicroB USBケーブルが必要になります。

手持ちであればそれで大丈夫ですが、もし持っていないよ。

という場合は、Amazonで買いましょう。

家電量販店だと高品質なのは間違いないですが、

そこまでの品質は必要ない場合が多いので、Amazonの中国製で十分です。

安いですし….

ジャンパーワイヤー

ジャンパーワイヤーは今回スイッチを使う関係で必要です。

配線に使うイメージですね。ブレッドボードにさせればなんでもOKです。

ちなみに、ジャンパーワイヤーが自作できるって知ってましたか??

ちょっと特殊な工具が必要になりますが、自由度が格段に上がるのでオススメです。

作り方や必要な材料についてはこちらの記事で紹介していますので、

興味がありましたらご覧ください。

スイッチ類

今回はタクトスイッチで入力していきます。

タクトスイッチじゃないとダメというわけではないので、

手持ちで何か入力に使えそうなものであればなんでも大丈夫です。

ちなみにいろんなタクトスイッチが入ったこんなのを私は使っています。
↓↓↓

ブレッドボード

スイッチとラズパイピコを固定するのに使います。

これがないと配線が結構大変….

スイッチを使わないようにしてテスト的にやる分には必要ないです。

ちなみにブレッドボードを買い足したい場合は、

こちらの記事のように安物ブレッドボードは避けたほうが良いです↓↓↓

配線方法

配線方法はこんな感じです。

pico-keyboard-control
picoとタクトスイッチで、タクトスイッチがキーボードの代わり

タクトスイッチはGNDとGP13につながっています。

タクトスイッチを押すと、GP13がlow(GNDに落ちる)になって入力を検知する仕組みです。

RaspberryPiPicoにcircuitPythonを導入する

いきなり注意点です。

  • 今回使用するcircuitPythonですが、最新のCircuitPythonのVer.と
    Thonnyの相性が悪いのか、キーボード操作できませんでした。
    ※正確にはThonny側でエラーになる。
    なので、すこしVer.を落とせばできたのでそのVer.で解説していきます。

手順は以下の通りです。

  • CircuitPythonの.uf2ファイルをダウンロードする
  • HIDライブラリをダウンロードする
  • RaspberryPiPicoに.uf2ファイルを適用する
  • ドライブのLibフォルダにHIDライブラリをコピーする

それでは一つずつ解説していきます。

CircuitPythonの.uf2ファイルをダウンロードする

普段ラズパイピコを使用する場合、

raspberryPiPico本体についている
Bootselボタンを押しながらUSB接続

ラズパイの公式で配布されている.uf2ファイルをドライブに投げ込む

使えるようになる。

こんなイメージだと思いますが、

circuitpythonを使用する場合は、

ラズパイの公式で配布されている.uf2ファイルとは
別の.uf2ファイルを投げ込みます。

そうすることによってcircuitpythonが使えます。

意外と単純で簡単ですよね??

ではその.uf2ファイルはどこにあるのか?というと

こちらにあります。↓↓↓

CircuitPython - Pico Download
The Raspberry Pi foundation changed single-board computing when they released the Raspberry Pi computer, now they’re rea...

リンク先に、

.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でも動作確認済み。

uf2file-passed
古いuf2ファイルをダウンロードするところ

BROWSE S3のほうがすぐに見つかります。

circuit_past_browse
past releaseから、browse s3を選択する。

次に表示されるところで、japaneseを選択しましょう。

circuit_past_ja
browse s3のリンク先から、ja/をクリックする。

すると、過去にリリースされたVer.の一覧が表示されます。
そこから、Ver.6.2.0-beta3を選択します。

circuit_6.2.0beta3
赤線を引いたVer.6.2.0-beta.3をクリックする。

クリックすると、自動でダウンロードが始まります。
ファイルがダウンロードできたらCircuitPythonの用意が完了となります。

HIDライブラリをダウンロードする

続きまして、circuitpythonを使えるようにした後は、

マウス・キーボード操作ができるようにライブラリをダウンロードしましょう。

ライブラリとは、簡単に言うと便利ソフトです。

このライブラリを使用することで、

本来複雑な処理を入れないと動かせないところを、

関数化して簡単に動かすことができます。

作ってくれたかたに感謝です….

今回必要になるライブラリは、circuitpythonのVer.6.に対応するものです。

こちらにありますのでまずはダウンロードしておきましょう。

GitHub - adafruit/Adafruit_CircuitPython_HID: USB Human Interface Device drivers.
USB Human Interface Device drivers. Contribute to adafruit/Adafruit_CircuitPython_HID development by creating an account...

格納されている場所ですが、

まず右のほうのReleasesを探してください。

さらに、+がついているreleasesをクリックしましょう。

circuitpythonhid_v6
リンク先

すると、このような感じで今までReleaseされたものが一覧で表示されます。

ここから、今回使用するVer.6に対応したライブラリをダウンロードします。

ちょうど矢印を付けておきました。

circuitpythonhid
今回使用するライブリ

RaspberryPiPicoに.uf2ファイルを適用する

さて準備ができたので、

まずはラズパイピコのBootselボタンを押しながら、

PCとUSBを接続しましょう。

その後、出てきたドライブに、先ほどダウンロードした.uf2ファイルを

ドラッグ&ドロップします。

picodrive-dragdrop
uf2ファイルをドラッグ&ドロップ

ドライブのLibフォルダにHIDライブラリをコピーする

次に、circuitpythonが使えるようになったラズパイピコのドライブを確認します。

このように、最初から入っている標準のライブラリがフォルダになっています。

こちらの中に、先ほどダウンロードしたライブラリを入れてあげます。

具体的な手順としては、

hidのライブラリを、

circuitpy_adafruit_hid
arafruit_hidのダウンロードしたフォルダ

ドラッグアンドドロップです。

adafruit_hid_to_libfolder
raspberrypipicoのlibフォルダにドラッグアンドドロップ。

ここまででほとんど終わったようなものです。あと少しで動かせます!!

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のライブラリを入れない状態つまりこんな空の状態。

raspberrypi_circuit_lib_null
raspberrypipico内のlibにhidのライブラリが入っていない空の状態

この状態で先ほどのコードを書き込むとどうなるか?
結果はこちら。

adaruit_hid_error
importのところ(5行目)で読み込めなくてエラーになる。

他にも、ライブラリとraspberry pi picoに入れたcircuitpythonの
Ver.の組み合わせによってもimportのエラー。つまり
5行目でエラーとなることがありそうです。

少なくても、

  • circuitpython Ver.6.2.0-beta3
  • adafruit-circuitpython-hid ver.5.2.1

上記の組み合わせでは動作を確認できていますので、
とりあえずやってみたいならVer.をそろえてみてください。

※2023/1/29追記
上記の組み合わせに加えて、

  • circuitpython Ver.7.3.3
  • adafruit-circuitpython-hid-7.x ver.5.3.3

この組み合わせでも先ほどのソースコードと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と同じチップが搭載された

マイコンボードが安定供給されれば問題はありませんが….

結論としては、どちらでもできるようにしたほうが良いのではないでしょうかね…

コメント

  1. 匿名 より:

    コメント失礼します。こちらのサイトのコードを入力したところ、

    トレースバック(最新の呼び出しが末尾):
    ファイル “”, 行 5, in
    SyntaxError: 名前が長すぎます

    このようなエラーが表示されるのですが原因は何でしょうか?ファイル名を短くしても同じようなエラーが表示され実行できません。

    • hobbyhappy より:

      コメントありがとうございます。
      5行目でエラーとのことですので、
      importのところが原因と推察されます。
      ご使用しているHID(ライブラリ)と、circuitpythonのVer.が
      ここで紹介しているものと一致しているか確認していただけますか??

タイトルとURLをコピーしました