ねらい:

 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コンパチで価格重視、品質は使ってからのお楽しみ。
 

 ・基板:スイッチ基板  

  
    ↑こういうのがありました。これがちゃんと使えれば助かります!

     スイッチ直はんだ付けなので交換方法の考慮が必要と思われます。
 

 ・キャップ:透明

    

    ↑テスト用なのでとにかく「あれば良し」です。

 

記事作成時点で着荷待ち。製作&動作確認後に別記事投稿予定です。

以上