はじめに

以前one keyのメカニカルキーボードスイッチを発売したのですが、M5StackやM5Stickで遊ぶときにgroveコネクタで繋げられたら便利だなと思って、groveコネクタバージョンを作ってみました。ピン配置は後述していますが、LEDも搭載しているので、自由に点灯タイミングを制御できます。スイッチの状態によって連動させても良いですし、チカチカさせとくのも良しです。少しわかりにくいですが、ジャンパポイントがJP1~JP5まであります。回路図を参考にジャンパする場所を変更すると、プルアップ、プルダウンを変更できたりします。デフォルトではプルアップ方式になっています。
One key(メカニカルキースイッチ・テストボード)www.switch-science.com
仕様
Grove コネクタ
メカニカルキー(Cherry互換、赤軸)
M2ネジ穴(ネジ穴間隔 18 mm)
LED付き
使用例
M5SticC PLUS2を使って遊んでみました。
Lチカ! pic.twitter.com/7nOqS75xrT
— Xian DIY (@sabasabasabaniu) August 24, 2024
oid setup() {
pinMode(G32, OUTPUT);
}
void loop() {
digitalWrite(G32,LOW);
delay(1000);
digitalWrite(G32,HIGH);
delay(1000);
}
今度はボタンに連動してLEDを点灯させてみる pic.twitter.com/SE6GHJvtP4
— Xian DIY (@sabasabasabaniu) August 24, 2024
void setup() {
// put your setup code here, to run once:
pinMode(G32, OUTPUT);
pinMode(G33, INPUT);
}
void loop() {
int value = digitalRead(G33);
if(value == 0) {
digitalWrite(G32,HIGH);
}else {
digitalWrite(G32,LOW);
}
delay(100);
}
できたできた! pic.twitter.com/OmlfGM4hX8
— Xian DIY (@sabasabasabaniu) August 24, 2024
#include "M5StickCPlus2.h"
void setup() {
pinMode(G32, OUTPUT);
pinMode(G33, INPUT);
auto cfg = M5.config();
StickCP2.begin(cfg);
int textsize = StickCP2.Display.height() / 60;
if (textsize == 0) {
textsize = 1;
}
StickCP2.Display.setTextSize(textsize);
}
void loop() {
int value = digitalRead(G33);
StickCP2.Display.setCursor(0, 30);
if(value == 0) {
digitalWrite(G32,HIGH);
StickCP2.Display.print("Hello");
}else {
digitalWrite(G32,LOW);
StickCP2.Display.clear();
}
delay(100);
}
音がなるぜぇ! pic.twitter.com/52q8q8hvHM
— Xian DIY (@sabasabasabaniu) August 24, 2024
#include "M5StickCPlus2.h"
void setup() {
pinMode(G32, OUTPUT);
pinMode(G33, INPUT);
auto cfg = M5.config();
StickCP2.begin(cfg);
StickCP2.Display.setRotation(1);
StickCP2.Display.setTextColor(GREEN);
StickCP2.Display.setTextDatum(middle_center);
StickCP2.Display.setTextFont(&fonts::Orbitron_Light_24);
StickCP2.Display.setTextSize(1);
StickCP2.Display.drawString("Buzzer Test", StickCP2.Display.width() / 2,
StickCP2.Display.height() / 2);
}
void loop() {
int value = digitalRead(G33);
StickCP2.Display.setCursor(0, 30);
if(value == 0) {
digitalWrite(G32,HIGH);
//StickCP2.Display.print("Hello");
StickCP2.Speaker.tone(4000, 20);
StickCP2.Display.drawString("Buzzer Test", StickCP2.Display.width() / 2,
StickCP2.Display.height() / 2);
}else {
digitalWrite(G32,LOW);
StickCP2.Display.clear();
}
delay(100);
}
ピン配置

回路図
出荷状態ではR3抵抗はついていません(プルアップのため)。またJP1(2-3),JP2,JP3,JP5(1-2)でジャンパしています。
サイズ
