Grove-Mech keycap

El Grove-Mech keycap es un interruptor mecánico con un LED integrado. El LED RGB de 255 colores completos hace que sea simple y fácil mostrar el estado de tu interruptor. Esta tecla es muy fiable, con una vida útil de funcionamiento de 20.000.000 de pulsaciones.
Verás que este es un módulo interesante y estable para hacer proyectos o productos realmente divertidos. De hecho, incluso puedes hacer un teclado mecánico usando varios Grove-Mech keycaps.
Se deben realizar 20.000.000 ciclos de funcionamiento de forma continua a una velocidad de 300 ciclos por minuto sin carga.
Características
- LED programable
- Estructura mecánica fiable
- Vida útil de funcionamiento extremadamente larga
Especificación
| Elemento | Valor |
|---|---|
| Voltaje de trabajo | 3v-5v |
| Resistencia de aislamiento | 100MΩ mín. |
| Resistencia de contacto | 200 mΩ máx. |
| Vida útil de funcionamiento sin carga | 20.000.000 |
Aplicaciones
- dispositivos automotrices
- dispositivos visuales
- electrodomésticos
- dispositivos de información
Hardware
Mapa de pines

Esquemático

El K1 está conectado al botón; cuando la tecla está abierta, SIG1 será arrastrado a nivel bajo por R2, entonces la salida de SIG1 debería ser baja. Una vez que se pulsa el botón, el K1 se cerrará y SIG1 se conectará a VCC, entonces la salida de SIG1 se vuelve alta.
En esta sección solo te mostramos parte del esquemático; para el documento completo, consulta los Resources
Plataformas compatibles
| Arduino | Raspberry Pi | |||
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Las plataformas mencionadas arriba como compatibles son una indicación de la compatibilidad teórica o del software del módulo. En la mayoría de los casos solo proporcionamos librerías de software o ejemplos de código para la plataforma Arduino. No es posible proporcionar librerías de software o código de demostración para todas las posibles plataformas MCU. Por lo tanto, los usuarios tienen que escribir sus propias librerías de software.
Primeros pasos
Si esta es la primera vez que trabajas con Arduino, te recomendamos encarecidamente que veas Getting Started with Arduino antes de comenzar.
Jugar con PlatformIO
Hardware
| XIAO nRF52840 Sense | Seeed Studio Grove Base para XIAO | Grove-Mech keycap |
|---|---|---|
![]() | ![]() | |
| Consigue uno ahora | Consigue uno ahora | Consigue uno ahora |
- Paso 1. Conecta los pines de señal del Grove-Mech keycap:
S1->D1,S2->D2en la Seeed Studio Grove Base para XIAO. (VCC/GND como de costumbre) - Paso 2. Inserta la Grove Base en la XIAO nRF52840 Sense.
- Paso 3. Conecta la XIAO a tu PC mediante USB.
Software
- Paso 1. Instala la librería
Adafruit_NeoPixelen PlatformIO. - Paso 2. Crea un nuevo sketch / proyecto y pega el código de abajo.
- Paso 3. Carga a la XIAO y abre el Monitor Serie (baud 115200) para ver el estado.
Qué hace
- Cada pulsación del Grove-Mech keycap hace que el LED RGB integrado recorra una lista de colores.
Código
/*
Grove-Mech Keycap demo for XIAO (nRF52840 Sense)
Wiring: S1 -> D1 (button), S2 -> D2 (pixel data)
*/
#include <Adafruit_NeoPixel.h>
#define BUTTON_PIN 1 // D1
#define PIXEL_PIN 2 // D2
#define PIXEL_COUNT 1
Adafruit_NeoPixel strip(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);
uint8_t colorPos = 0;
bool lastState = LOW;
unsigned long lastDebounce = 0;
const unsigned long debounceDelay = 50;
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
strip.begin();
strip.show();
Serial.begin(115200);
Serial.println("Grove-Mech Keycap: ready");
}
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if(WheelPos < 85) {
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if(WheelPos < 170) {
WheelPos -= 85;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
void cycleColor() {
colorPos += 32; // step size
strip.setPixelColor(0, Wheel(colorPos));
strip.show();
Serial.print("Color pos: "); Serial.println(colorPos);
}
void loop() {
bool reading = digitalRead(BUTTON_PIN) == LOW ? true : false; // pressed = LOW for INPUT_PULLUP
if (reading != lastState) {
lastDebounce = millis();
}
if ((millis() - lastDebounce) > debounceDelay) {
// stable state
static bool pressed = false;
if (reading && !pressed) {
// button pressed (edge)
cycleColor();
pressed = true;
} else if (!reading) {
pressed = false;
}
}
lastState = reading;
}

Si tu cableado o asignación de pines es diferente, cambia BUTTON_PIN y PIXEL_PIN en consecuencia.
Jugar con Arduino
Hardware
Materiales requeridos
| Seeeduino V4.2 | Base Shield | Grove-Mech keycap |
|---|---|---|
![]() | ![]() | |
| Consigue uno ahora | Consigue uno ahora | Consigue uno ahora |
1 Inserta el cable USB suavemente, de lo contrario podrías dañar el puerto. Utiliza un cable USB con 4 hilos internos; los cables de 2 hilos no pueden transferir datos. Si no estás seguro del cable que tienes, puedes hacer clic aquí para comprarlo.
2 Cada módulo Grove viene con un cable Grove cuando lo compras. En caso de que pierdas el cable Grove, puedes hacer clic aquí para comprarlo.
-
Paso 1. Conecta el Grove-Mech keycap al puerto D2 del Grove-Base Shield.
-
Paso 2. Inserta el Grove - Base Shield en el Seeeduino.
-
Paso 3. Conecta el Seeeduino al PC mediante un cable USB.

Si no tenemos Grove Base Shield, también podemos conectar directamente el Grove-Mech keycap al Seeeduino como se muestra a continuación.
| Seeeduino | Grove-Mech keycap |
|---|---|
| 5V | Rojo |
| GND | Negro |
| D3 | Blanco |
| D2 | Amarillo |
Software
-
Paso 1. Descarga la librería Adafruit_NeoPixel-master desde Github.
-
Paso 2. Consulta How to install library para instalar la librería para Arduino.
-
Paso 3. Abre el Arduino IDE y crea un archivo nuevo, luego copia el siguiente código en el archivo nuevo.
/**
* This is an exmaple of the Grove - Mech Keycap.
* Every press of the key will change the color the SK6805 RGB LED. The SK6805 is a NeoPixel compatible chip.
*
* Credit:
* Adafruit_NeoPixel - https://github.com/adafruit/Adafruit_NeoPixel/blob/master/COPYING
*/
#include <Adafruit_NeoPixel.h>
#define BUTTON_PIN 2 // Digital IO pin connected to the button. This will be
// driven with a pull-up resistor so the switch should
// pull the pin to ground momentarily. On a high -> low
// transition the button press logic will execute.
#define PIXEL_PIN 3 // Digital IO pin connected to the NeoPixels.
#define PIXEL_COUNT 60
// Parameter 1 = number of pixels in strip, neopixel stick has 8
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
// NEO_RGB Pixels are wired for RGB bitstream
// NEO_GRB Pixels are wired for GRB bitstream, correct for neopixel stick
// NEO_KHZ400 400 KHz bitstream (e.g. FLORA pixels)
// NEO_KHZ800 800 KHz bitstream (e.g. High Density LED strip), correct for neopixel stick
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);
bool oldState = LOW;
uint8_t color_pos = 0;
int i=0;
int longpress=2000;
long timecheck;
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
strip.begin();
strip.clear();
strip.show(); // Initialize all pixels to 'off'
Serial.begin(9600);
}
void loop()
{
// Get current button state.
bool newState = digitalRead(BUTTON_PIN);
// Check if state changed from low to high (button press).
if (newState == HIGH && oldState == LOW) {
timecheck = millis();
// Short delay to debounce button.
delay(20);
// Check if button is still low after debounce.
newState = digitalRead(BUTTON_PIN);
if (newState == HIGH){
color_pos+=8;
strip.setPixelColor(0, Wheel(color_pos));
strip.show();
}
}
if( millis()-timecheck > 300)
{
if (digitalRead(BUTTON_PIN)==HIGH)
{
if(millis()-timecheck > longpress)
{
while(digitalRead(BUTTON_PIN) == HIGH)
{
strip.setPixelColor(0,Wheel(color_pos));
strip.show();
delay(300);
strip.setPixelColor(0,0,0,0);
strip.show();
delay(300);
bool newState = digitalRead(BUTTON_PIN);
}
strip.setPixelColor(0,0,0,0);
strip.show();
timecheck = millis();
}
}
}
// Set the last button state to the old state.
oldState = newState;
}
// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if(WheelPos < 85) {
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if(WheelPos < 170) {
WheelPos -= 85;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
-
Paso 4. Sube la demostración. Si no sabes cómo subir el código, consulta How to upload code.
-
Paso 5. Cada vez que presiones el Grove-Mech Keycap, verás que el color del LED cambia. Si mantienes presionado el botón durante unos 2 segundos, verás el efecto de luz respiratoria.
Jugar con Raspberry Pi
Hardware
- Paso 1. Elementos utilizados en este proyecto:
| Raspberry pi | Grove Base Hat para RasPi | Grove - Mech Keycap |
|---|---|---|
![]() | ||
| Consigue uno ahora | Consigue uno ahora | Consigue uno ahora |
- Paso 2. Conecta el Grove Base Hat a la Raspberry.
- Paso 3. Conecta el Grove - Mech Keycap al puerto PWM (puerto 12) del Base Hat.
el pin puede ser uno de los siguientes valores en la columna de pines para la función PWM y conecta el dispositivo a la ranura correspondiente.
| Pin | Ranura |
|---|---|
| 18 | D18 |
| 12 | PWM |
- Paso 4. Conecta la Raspberry Pi al PC mediante un cable USB.

Software
- Paso 1. Sigue Setting Software para configurar el entorno de desarrollo.
- Paso 2. Descarga el archivo fuente clonando la biblioteca grove.py.
cd ~
git clone https://github.com/Seeed-Studio/grove.py
- Paso 3. Ejecuta los siguientes comandos para correr el código.
cd grove.py/grove
sudo python grove_mech_keycap.py 12
Unix tiene un "modelo de seguridad". Como usuario normal puedes hacer cosas, pero no deberías poder acceder a los archivos de otras personas en la misma computadora. Y como usuario no deberías poder hacer que la computadora deje de funcionar. Ahora bien, "/dev/mem" te permite hacer mucho, mucho más "trastornos" que solo cambiar un GPIO. Por eso /dev/mem debe estar protegido contra usuarios normales. Así que, para ejecutar este código, debes escribir sudo python grove_mech_keycap.py en la línea de comandos
A continuación se muestra el código grove_mech_keycap.py.
import time
from grove.button import Button
from grove.factory import Factory
class GroveKeycap(object):
def __init__(self, pin):
# High = pressed
self.__btn = Factory.getButton("GPIO-HIGH", pin)
# single WS2812 LED
self.__led = Factory.getOneLed("WS2812-PWM", pin + 1)
self.__on_event = None
self.__btn.on_event(self, GroveKeycap.__handle_event)
@property
def on_event(self):
return self.__on_event
@on_event.setter
def on_event(self, callback):
if not callable(callback):
return
self.__on_event = callback
def __handle_event(self, evt):
# print("event index:{} event:{} pressed:{}".format(evt['index'], evt['code'], evt['presesed']))
if callable(self.__on_event):
self.__on_event(evt['index'], evt['code'], evt['time'])
return
self.__led.brightness = self.__led.MAX_BRIGHT
event = evt['code']
if event & Button.EV_SINGLE_CLICK:
self.__led.light(True)
print("turn on LED")
elif event & Button.EV_DOUBLE_CLICK:
self.__led.blink()
print("blink LED")
elif event & Button.EV_LONG_PRESS:
self.__led.light(False)
print("turn off LED")
Grove = GroveKeycap
def main():
from grove.helper import SlotHelper
sh = SlotHelper(SlotHelper.PWM)
pin = sh.argv2pin()
ledbtn = GroveKeycap(pin)
# remove ''' pairs below to begin your experiment
'''
# define a customized event handle your self
def cust_on_event(index, event, tm):
print("event with code {}, time {}".format(event, tm))
ledbtn.on_event = cust_on_event
'''
while True:
time.sleep(1)
if __name__ == '__main__':
main()
Si todo va bien, podrás ver el siguiente resultado. Si haces un solo clic en el keycap, verás "turn on LED", si haces doble clic en el keycap, verás "blink LED". Una pulsación larga en el keycap dará "turn off LED".
pi@raspberrypi:~/grove.py/grove $ sudo python grove_mech_keycap.py 12
Hat Name = 'Grove Base Hat RPi'
turn on LED
turn on LED
blink LED
turn on LED
turn off LED
^CTraceback (most recent call last):
File "grove_mech_keycap.py", line 98, in <module>
main()
File "grove_mech_keycap.py", line 94, in main
time.sleep(1)
KeyboardInterrupt
Puedes salir de este programa simplemente presionando ++ctrl+c++.
Visor de esquemas en línea
Recursos
- [Zip] Archivo eagle de Grove-Mech Keycap
- [Zip] Adafruit_NeoPixel-master
- [PDF] Resumen del producto del interruptor
Proyecto
Este es el video de introducción de este producto, demostraciones sencillas, puedes probarlo.
Soporte técnico y debate sobre el producto
Gracias por elegir nuestros productos. Estamos aquí para ofrecerte diferentes tipos de soporte para garantizar que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para adaptarnos a diferentes preferencias y necesidades.










