ねらい:
Picoとスイッチを使って入力専用キーを作り、
目的の文字列をワンプッシュで入力する。
■CircuitPythonを使った参考出典
・出典1:Raspberry Pi Picoを使ってパスコード自動入力機を作る【前編】
https://qiita.com/koushiro/items/2587b45de2e34d4b9cd7
・出典2:Raspberry Pi Picoを使ってパスコード自動入力機を作る【後編】 / Adafruit Trinkey QT2040
https://qiita.com/koushiro/items/8886f68568e982c4e5f9
【250421追記】
↑上記はUSキーボード限定。キーコードを数値で指定する方式。
★日本語キーボードの場合の参考出典↓
これは文字列からそのまま使えるようです。
https://github.com/koyaaaaaan/adafruit_hidJP
■micropythonを使った参考出典
・ 出典3:USBDeviceクラス
https://qiita.com/inachi/items/d5aec941f54220dd0dcb
https://qiita.com/inachi/items/70975592469e508d2d75
https://qiita.com/inachi/items/448eb15bff6b25956bbf
■事前考察
・コードはCircuitPythonのほうが実際の動作内容と近い表現で理解しやすいです。
・CircuitPythonはmicropythonと異なる開発環境を整える必要があるが、
実際にはThonnyを使う上での差異はほとんどないようです。
CircuitPythonはライブラリが多いらしいので、今回を機会に挑戦しました。
■CircuitPythonでの開発環境の準備
出典4:
↑ほぼこのとおりで準備できました。
今回使うのはAE-RP2040ですが、PICOと思って手順どおりでできました。
■テスト動作用結線
・GP25にLEDのカソード側を接続、アノード側は2KΩ(1KΩX2)で3.3Vへ接続。
・AE-RP2040のピンアサイン
↑VSYSがありません。GNDは2ピンだけ。LED要るなら自分でGPIO接続です。
ピンはんだ付けも自前です。
ピン総数34でPICOより少ないのにGPIOが多く、
全長が片側3ピン分短い分、基板を広く使えます。
ピンアサインがシルク印刷され、USB端子がType-Cもありがたいです。
これで700円(送料別)程度。Wifi不要ならばこれで十分です。
■CircuitPythonでの動作確認
・・・出典4のサンプルプログラム(Lチカ)のままですが、
AE-RP2040はLEDを実装していませんので、
ledオブジェクトをGP25で定義しています。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
import digitalio
from board import *
import time
port = GP25
#led = digitalio.DigitalInOut(LED)
led = digitalio.DigitalInOut(port)
led.direction = digitalio.Direction.OUTPUT # LED端子をledとして出力に設定
while True: # ずっと繰り返し
led.value = True # LEDを点灯
time.sleep(0.5) # 0.5秒待つ
led.value = False # LEDを消灯
time.sleep(0.5) # 0.5秒待つ
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
・純正PICOではピン「LED」で動きますし、AE-RP2040でもそのまま動作しますが、
よく使うPICO-Wではピンが異なるので「明示的に定義」しました。
・CircuitPythonでは「GP◯◯」という定数を定義なしで即使えるんですね。
micropythonでは自分で定義していましたので、これはとても便利です。
■キーボード入力代替の試み
出典1に従い、Adafluitライブラリを設定しましたが、
「.mpyがコンパチでない!」とのエラーが発生。
ネットで解決方法を調べてみますとバージョンを一致させよ!とのこと。
今回設定したCircuitPythonはVer9.2.3ですが、
ライブラリを8.Xでセットしてました。
9.xでセットしなおし、下記が動作できました。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
# PICO compatible AE-RP2040 by AKIZUKI-Electoronics-trading
# CircuitPython Ver9.2.3
# CircuitPython標準ライブラリ
import usb_hid #USB interface
from time import sleep
import digitalio #GPIO
from board import *
# Adafluitライブラリ(Ver. 9.X)
from adafruit_hid.keyboard import Keyboard
from adafruit_hid.keycode import Keycode
keyboard = Keyboard(usb_hid.devices)
led = digitalio.DigitalInOut(GP25)
led.direction = digitalio.Direction.OUTPUT
#パスコード(例) : ABCDEfghij0123return
pass_list = [4,5,6,7,8,9,10,11,12,13,39,30,31,32,40]
big_or_small = [1,1,1,1,1,0,0,0,0,0,0,0,0,0,0]
led.value = False
sleep(1)
led.value = True
for j in range(20):
for i in range(len(pass_list)):
if big_or_small[i]==1:
keyboard.press(225)
sleep(0.0005)
keyboard.send(pass_list[i])
#print(pass_list[i])
sleep(0.0005)
keyboard.release(225)
led.value = False
sleep(1)
led.value = True
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
・PICOはPC(Windows11)のUSBに接続しています。
Windowsのメモ帳を開いてPICOからの入力を受けました。
うっかりThonnyのコード画面にカーソルをおいたままで
AE-RP2040のRUNボタンを押してしまい、
ソースコードの中に文字列がどどっと入ってきました(笑
【250130追記】
ーーーーーーーーーーーーーーーーーーーーーーーーーーー
後日、PICO-Wにて同じことをやろうとしてつまづきました。
PICO-WにはRUNボタンがありません。
いままでどうしてた???
→10分以上考えました結果、
「USB端子は電源元としてのみ使い、
電源ON=リセット起動になっていた」
とわかりました。そりゃそうか。。。
対処方法
RUN端子にスイッチをつなぎ、スイッチ押してGNDに落とす。
ということで初めてRUN端子を使いました・・・
もう、冗談みたいな話。ついでにわかったこと。
・起動時はロスタイムが数秒ほどあるんですね。
・起動時に内蔵LEDが点滅するが、意図不明。
どこかに説明があるのかな。。。
ーーーーーーーーーーーーーーーーーーーーーーーーーーー
追記以上
・最初はmacOSからリモートデスクトップでThonnyを操作していましたが、
実行はリモートではダメですね。標準出力先がぐちゃぐちゃになります。
・コード中のsleepはサンプルでは0.01ですが、少しでも速く入力したく、
0.0005まで順次小さくしていきましたが、
結局のところは0.001より小さくしても実感は変わりませんでした。
手でタイプするより恐ろしく早いですから、この程度で我慢です。
■キーボードスイッチによる自動入力の準備
AMAZONで下記を揃えました。
・スイッチ:メカニカルスイッチ青軸
↑現場用なので「押した感の強い」ことが重要です。
MXコンパチで価格重視、品質は使ってからのお楽しみ。
・基板:スイッチ基板
↑こういうのがありました。これがちゃんと使えれば助かります!
スイッチ直はんだ付けなので交換方法の考慮が必要と思われます。
・キャップ:透明
↑テスト用なのでとにかく「あれば良し」です。
記事作成時点で着荷待ち。製作&動作確認後に別記事投稿予定です。
以上