Skip to main content

Grove-机械键盘键帽

Grove-Mech 键帽是一款内置LED的机械开关。这款键帽上配备的255种全彩RGB LED使得展示开关状态变得简单而便捷。这款键帽非常可靠,其按压操作寿命高达20,000,000次。

您会发现这是一个有趣且稳定的模块,可用于制作一些真正有趣的项目或产品。实际上,您甚至可以使用几个Grove-Mech键帽来制作一个机械键盘。

:::提示 在无负载的情况下,应以每分钟300次的速度连续进行20,000,000次操作循环。

:::

特性

  • 可编程LED
  • 可靠的机械结构
  • 超长的使用寿命

规格

项目数值
工作电压3v-5v
绝缘电阻100MΩ 最小
接触电阻200 mΩ 最大
无负载操作寿命20,000,000

应用

  • 汽车设备
  • 显示设备
  • 家用电器
  • 信息设备

硬件

引脚映射

原理图

K1连接到按钮上,当按键打开时,SIG1会被R2下拉,因此SIG1的输出应为低电平。 一旦按钮被按下,K1将闭合,SIG1将连接到VCC,此时SIG1的输出变为高电平。

:::提示 在本节中,我们只向您展示了部分原理图,完整的文档请参考资源部分。

:::

支持的平台

Arduino树莓派

:::警告 上述提到的支持平台仅表示模块的软件或理论兼容性。在大多数情况下,我们只提供针对Arduino平台的软件库或代码示例。由于无法为所有可能的MCU平台提供软件库/演示代码,因此用户需要自己编写软件库。 :::

入门指南

:::警告 如果您是第一次使用Arduino,我们强烈建议您在开始之前先阅读Arduino入门指南。 :::

与Arduino一起操作

硬件

所需材料

Seeeduino V4.2基础盾板Grove-Mech 键帽
enter image description hereenter image description hereenter image description here
立即获取立即获取立即获取

:::提示 1 请轻轻插入USB线,否则可能会损坏端口。请使用内部有四根线的USB线,两根线的线无法传输数据。如果您不确定自己手中的线是否符合要求,可以点击此处进行购买。

2 购买每个Grove模块时都会附带一根Grove线。如果您丢失了Grove线,可以点击此处进行购买。 :::

  • 步骤 1. 将Grove-Mech键帽插入Grove-Base Shield的D2端口。

  • 步骤 2. 将Grove-Base Shield插入Seeeduino中。

  • 步骤 3. 使用USB线将Seeeduino连接到电脑。

:::提示 如果没有Grove Base Shield,我们也可以直接将Grove-Mech键帽连接到Seeeduino,连接方式如下: :::

SeeeduinoGrove-Mech键帽
5V红色线
GND黑色线
D3白色线
D2黄色线

软件

  • 步骤 1. 从Github下载Adafruit_NeoPixel-master库。

  • 步骤 2. 参考如何安装库来为Arduino安装库。

  • 步骤 3. 打开Arduino IDE并创建一个新文件,然后将以下代码复制到新文件中。

/**
* 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);
}

  • 步骤 4. 上传示例程序。如果您不知道如何上传代码,请查阅如何上传代码

  • 步骤 5. 每次您按下Grove-Mech键帽时,您会看到LED的颜色变化。如果您按下并保持按钮大约2秒,您会看到呼吸灯效果。

与Raspberry Pi一起操作

硬件

  • 步骤 1. 此项目中使用的物品:
Raspberry piGrove Base Hat for RasPiGrove - Mech Keycap
enter image description hereenter image description hereenter image description here
立即获取立即获取立即获取
  • 步骤 2. 将Grove Base Hat插入Raspberry Pi中。
  • 步骤 3. 将Grove - Mech Keycap连接到Base Hat的PWM端口(端口12)。

:::提示 PWM功能的pin列中可以是以下值之一,并将设备连接到相应的插槽。 :::

Pin插槽
18D18
12PWM
  • 步骤 4. 通过USB线将Raspberry Pi连接到电脑。

软件

  • 步骤 1. 按照设置软件来配置开发环境。
  • 步骤 2. 通过克隆grove.py库来下载源文件。
cd ~
git clone https://github.com/Seeed-Studio/grove.py

  • 步骤 3. 执行以下命令来运行代码。
cd grove.py/grove
sudo python grove_mech_keycap.py 12

:::警告 Unix有一个“安全模型”。作为普通用户,你可以做一些事情,但你不应该能够访问同一台计算机上其他人的文件。而且,作为用户,你不应该能够让计算机停止工作。现在,“/dev/mem”允许你比仅仅改变GPIO做更多“坏事”。这就是为什么/dev/mem必须对普通用户进行保护的原因。因此,为了运行此代码,你应该在命令行中输入sudo python grove_mech_keycap.py :::

以下是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()


:::成功提示 如果一切顺利,你将能够看到以下结果。如果你单击键帽,你会看到“打开LED”,如果你双击键帽,你会看到“闪烁LED”。长按键帽会显示“关闭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


你可以通过按 ++ctrl+c++ 来退出这个程序。

原理图在线查看器

资源

项目

这是该产品的介绍视频,以及一些简单的演示,你可以尝试一下。

技术支持与产品讨论

感谢您选择我们的产品!我们致力于为您提供多种支持,以确保您在使用我们的产品时能够拥有尽可能顺畅的体验。我们提供多个沟通渠道,以满足不同的偏好和需求。

Loading Comments...