はじめに
以前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)でジャンパしています。
サイズ