WaveshareのRP2040-Keyboard-3を入手しました。
そのままでもコピー&ペーストできる補助キーボードとして使用できますが、RP2040を搭載しているのでArduino環境でプログラミングします。
記事の内容
Arduino環境を使って機能をカスタムできるRP2040-Keyboard-3を使ってみます。
主な内容は
・RP2040-Keyboard-3を使ってみた
・開発(カスタム)するための準備
・検索バーからアプリケーションを起動するカスタムをしてみた
こんな方にお勧め
・任意のショートカットボタンの補助キーボードを作りたい
・パスワードやコマンドを1プッシュで入力できる補助キーボードを作りたい
RP2040-Keyboard-3
主なスペック
使われているCPUはRaspberry Pi Picoと同じRP2040です。
評価基板と違い自由に使えるGPIOピンは無く、機能をカスタムできる補助キーボードという感じです。
現実的に使用できる部分をピックアップします。
CPU | RP2040 ARM Cortex M0+ 133MHz |
接続 | Micro C x 2 USB1.1 ホスト/デバイス両対応 |
Memory | SRAM 264KB フラッシュメモリ 2MB |
その他 | リセットボタン WS2812(GPIO18) 3個 キーボタン 3個 (ボタンV, GPIO12) (ボタンC, GPIO13) (ボタンCtrl, GPIO14) |
Waveshareの箱に詰められていました。
内容物は本体と交換ボタンが3個。

ボタン配置
部品 | GPIO番号 | 補足 |
---|---|---|
Ctrlボタン | GPIO14 | Ctrlボタン |
Cボタン | GPIO13 | Cボタン |
Vボタン | GPIO12 | Vボタン |
ボタンのLED(WS2812) | GPIO18 | 3連のLED 1個目 Ctrl 2個目 Cボタン 3個目 Vボタン |
外観


RP2040-Keyboard3の外観です。
TypeCが2つありますが、どちらも給電(シリアル通信可)です。

使ってみた
Waveshareからカスタムできる補助キーボードとして2機種ラインナップされています。
今回側面は金属板をHexスペーサで固定した試作感のあるタイプを購入しました。
もう片方のラインナップ(RP2040-Keyboard-3-PLUSは全面カバーされていて製品感が増しリッチな感じがします。
できることは同じだと思いますが、価格に違いもあるので好みで選択されると良いと思います。
Waveshare製品のリンク :
Ctrl C/V Shortcut Keyboard For Programmers, 3-Key Development Board, Adopts RP2040 Microcontroller Chip | RP2040-Keyboard-3 (waveshare.com)
開梱してUSBケーブルでパソコンに接続するだけでHIDキーボードとして認識されます。
表記通りCtrlボタン、”C”ボタン、”V”ボタンの入力をします。
Ctrl + “C”でコピー、Ctrl + “V”でペースト動作をします。
ボタンを押すことでボタン内部のLEDが発光するのでゲーミングキーボードのようです。

旧式のタイプライタのようにクリック音とストローク量があります。
打感もクリック音とともに「カチッ」っとした手ごたえを感じます。
好みですが個人的には心地よいと感じます。
拡張用のコネクタは出ていませんが、もともとの補助キーボード以外の使い方として、
・長いコマンド文言の入力補助
・パスワードの入力(セキュリティ面ではどうかと思いますが)
などいくつかありそうです。
クリアトップのボタンカバーとキーキャップが3セット同梱されていて嵌めかえることができます。
紙やシールなどでボタンの絵を挟み込むことでオリジナルのボタンを作れます。

普段からArduino環境を使って開発をしていると、この補助キーボードが接続されている場合COMの表示数が増えて実際に書き込みしたいマイコンがどれだかわかりにくくなります。

分解してみました。
拡張できるコネクタもGPIOのスルーホールも見当たりません。
この基板を使って自由な開発は難しそうです。

リセットボタンとBOOTボタンは画像の位置にあります。
補助キーボードとして使用しているうちはいいですが、BOOTボタンが押しにくいのは少し困ります。
ピンセットやマイナスドライバーなどを使わないと押せません。

まとめ
Good
・開梱後すぐにコピー&ペーストの補助キーボードとして使用できる
・ストローク時の打感が心地よい
・クリアトップカバー付きで、オリジナルのボタン柄を作れる
Bad
・拡張できるコネクタやGPIOがない
・Arduino開発をしていると、COM表示が増えて紛らわしい
・リセットボタンやBOOTボタンが押しにくい
準備
開発環境
開発環境はArduinoを使用します。
Arduino環境の作り方はこちらを参照します。
ボードライブラリ
Arduino IDEのボードマネージャからRP2040用のライブラリのインストールとボードの選択をします。
ボードライブラリには「Raspberry Pi Pico/RP2040 by Earle F. Philhower, III」を使用します。
当サイトではGeneric RP2040を使用します。
追加のボードマネージャのURL | https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json |
検索 | RP2040 |
ボードライブラリ | Raspberry Pi RP2040 Boards(x.x.x)※ |
選択するボード | Raspberry Pi RP2040 Boards(x.x.x) > Generic RP2040 |
スケッチ
コマンド入力
説明
Windows環境(Windows 10 64bit)で確認しています。
「ファイル名を指定して実行」からアプリケーションを起動します。
RP2040のHID機能を使用します。
「ファイル名を指定して実行」ウインドウを呼び出すためのウインドウズ上のキーボード操作には「Windowsキー + ‘r’」のショートカットがあります。
HID機能のWindowsキーコードと’r’コードをを押している状態にすることでウインドウを呼び出すことができます。
HID機能では複数のキータッチを順番に入力したようにキーコードを発生させることができます。
ショートカットキーの操作後、直ちにアプリケーション名の文字列を送信すると入力が無視されることがあるためウエイトで入力タイミングを調整しています。
これらの組み合わせで、
Ctrlボタンには”paint”を割り当て、ペイントアプリケーションが起動します。
Cボタンには”cmd”を割り当て、コマンドプロンプトが起動します。
Vボタンには”ncpa.cpl”を割り当て、ネットワーク設定パネルが起動します。
スケッチを書きこんだ後、Windowsの検索ボタンを押してからRP2040-Keyboard-3のボタンを押すことで割り当てられたアプリケーションが起動します。
スケッチ
#include <Adafruit_NeoPixel.h>
#include "Keyboard.h"
#define BUTTON_CTRL (14)
#define BUTTON_C (13)
#define BUTTON_V (12)
#define LED_PIN (18)
#define NUM_LEDS (3)
#define HID_WIN (0x83) //Windowsキー
#define WAIT (200)
Adafruit_NeoPixel pixels(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
boolean flagOn_Ctrl = false;
boolean flagOn_C = false;
boolean flagOn_V = false;
void setup()
{
//ボタンのGPIO設定
pinMode(BUTTON_V, INPUT_PULLUP);
pinMode(BUTTON_C, INPUT_PULLUP);
pinMode(BUTTON_CTRL, INPUT_PULLUP);
//HID開始
Keyboard.begin();
}
void loop()
{
//ペイントアプリケーションを開く
if(digitalRead(BUTTON_CTRL) == LOW)
{
if(flagOn_Ctrl == false)
{
//ファイル名を指定して実行ウインドウを開く(Windowsボタン + 'r')
Keyboard.press(HID_WIN);
Keyboard.press('r');
Keyboard.releaseAll();
delay(WAIT); //待機時間
Keyboard.println("mspaint");
flagOn_Ctrl = true;
}
}
else
{
flagOn_Ctrl = false;
}
if(digitalRead(BUTTON_C) == LOW)
{
if(flagOn_C == false)
{
//ファイル名を指定して実行ウインドウを開く(Windowsボタン + 'r')
Keyboard.press(HID_WIN);
Keyboard.press('r');
Keyboard.releaseAll();
delay(WAIT); //待機時間
Keyboard.println("cmd");
flagOn_C = true;
}
}
else
{
flagOn_C = false;
}
//ネットワーク接続ウインドウを開く
if(digitalRead(BUTTON_V) == LOW)
{
if(flagOn_V == false)
{
//ファイル名を指定して実行ウインドウを開く(Windowsボタン + 'r')
Keyboard.press(HID_WIN);
Keyboard.press('r');
Keyboard.releaseAll();
delay(WAIT); //待機時間
Keyboard.println("ncpa.cpl");
flagOn_V = true;
}
}
else
{
flagOn_V = false;
}
delay(10);
}
結果
検索ボタンを押してからCtrlボタンを押すと、”paint”が検索されペイントアプリケーションが起動しました。
普段よく使うアプリケーションをボタンに登録することで手早くアプリケーションが起動します。
コメント