DEV Community

Cover image for Crear y flashear tu propio keymap con QMK firmware
Andrés Baamonde Lozano
Andrés Baamonde Lozano

Posted on

Crear y flashear tu propio keymap con QMK firmware

Hace unos meses compré un teclado dividido para mejorar la postura a la hora de escribir. La verdad es que la experiencia me gustó mucho. A pesar de que el cambio fue muy grande (mi teclado es un corne keyboard, por lo que es ortogonal) me acostumbré muy rápido.

Para el no que sepa de la existencia de los teclados divididos, aquí dejo un git donde se pueden ver la multitud de teclados divididos que existen. Es un mundo gigante y, a modo de advertencia, digo que de ahí no se sale. Engancha muchísimo :D

Por dar un poco de contexto, para montarte un teclado de este tipo necesitas comprar todas las piezas (los hay ya montados):

  • Cableado
  • Placas
  • Switches
  • Keycaps

Esto mínimo. Después, casi todos llevan pantallas oled, LEDs si son retroiluminados, escoger el switch que más te guste... un sin fin de posibilidades. No estamos aquí para hablar de eso, así que os dejo un par de enlaces de canales que sigo que os darán una idea:

El problema

Bien, supongamos que ya tienes tu teclado nuevo montado. Probablemente los micros que trae ya vengan con un mapeo de las teclas ya flasheado, pero ese keymap estará en inglés. Ojo, esto no está mal en absoluto, de hecho, para programar a mi me resulta súper cómodo. Mi problema radica al cambiar de PC.

Cuando utilizo el ordenador de otra persona, mi portátil o el portátil de la empresa no doy una :( por que estoy acostumbrado a estar con el idioma de entrada en inglés. Así que, si necesito trabajar en otro, necesito andar instalando los paquetes de idioma y a ver, esto práctico práctico no es.

Entonces en estas estamos, con el teclado en inglés y queriendo escribir con el idioma de entrada en español. La solución sería fácil. Me busco un teclado en español y lo flasheo con la qmk toolbox. No encontre ninguna configuración en español para mi teclado, será que no se buscar :(.

Lo que podría pasar como solución

Una solución que a mi no me resultó por lo de andar instalando los layout sería crear el tuyo propio. Lo de que no me servía me di cuenta una vez ya tenia todo hecho y funcionando por lo que os dejo una pequeña información de como lo hice.

Utilicé la herramienta de windows, lo cierto es que es sencilla, simplemente de creas tu layout ejecutas la herramienta y hace un .exe que puedes instalar en cualquier PC, después simplemente tendrías que cambiar el idioma de entrada.

La solución real

Necesitaba tres cosas:

  • No instalar nada cada vez que enchufaba el teclado.
  • Trabajar con el idioma de entrada(layout) en español.
  • Tener acceso fácil a los símbolos para programar.

Podía buscar cualquier keymap en el repositorio de qmk firmware y luego flashearlo en el teclado. Esto, sería lo más rápido, de hecho si quería una configuración concreta podía acudir a la página, configurar el teclado con una herramienta web y ya flashearlo. El único problema es que no tenía teclados es español, pero primero probar que la toolbox funciona.

Flashear un .hex en el teclado

Tremendamente sencillo, tan soló es cargar el archivo en la aplicación, que se puede descargar aquí. Resetear el teclado y pinchar en flash:

Flash keyboard toolbox

El camino "largo", crear y compilar tu propio keymap.

Para crear tu propio keymap lo más sencillo es copiar uno existente y modificarlo, pero para eso primero tenemos que instalar el entorno para poder desarrollar, en este caso estoy en el wsl de windows:

Setup



git clone https://github.com/qmk/qmk_firmware.git
cd qmk_firmware/
python3.9  -m venv venv
source venv/bin/activate
pip3 install qmk
qmk setup


Enter fullscreen mode Exit fullscreen mode

Después con la siguiente línea puedes compilar un teclado en concreto, en este caso el crkbd con el keymap default:



qmk compile -kb crkbd/rev1 -km default


Enter fullscreen mode Exit fullscreen mode

Este comando generará un .hex en la carpeta actual.

Los ficheros del keymap



> tree keyboards/crkbd/keymaps/mandrewcito/
keyboards/crkbd/keymaps/mandrewcito/
├── config.h
├── keymap.c
└── rules.mk


Enter fullscreen mode Exit fullscreen mode

Esto es un copia de otro teclado, para así simplemente editar las teclas concretas a mapear, pero ¿que teclas y comó? Dependerá del teclado que tengas en mi caso eran las ISO inglesas a las ISO españolas, la distribución también puede ser ANSI, para una diferencia rápida, dejo la siguiente imagen:

ISO vs ANSI

¿Cómo localizar las teclas que faltan? Bajo la carpeta /quantum/keymap_extras están todos los keymaps mapeados del ISO en inglés a otros idiomas y nosotros utilizamos el keymap_spanish.h aquí podemos ver todas teclas y utilizar sólo la que nos faltan. Para el resto te teclas se pueden buscar en los ficheros de cabeceras o la solución fácil es utilizar la página de qmk de configurar teclados y ver el código:
QMK config

Ahora simplemente necesitamos editar el keymap.c pero antes enseño una vista previa del keymap_spanish.h para que se vea cómo localizar las teclas:



// clang-format off

/*
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 * │ º │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ' │ ¡ │       │
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 * │     │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ ` │ + │     │
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Ñ │ ´ │ Ç │    │
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 * │    │ < │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ - │          │
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 * │    │    │    │                        │    │    │    │    │
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 */
// Row 1
#define ES_MORD KC_GRV  // º 
#define ES_1    KC_1    // 1
#define ES_2    KC_2    // 2
#define ES_3    KC_3    // 3
#define ES_4    KC_4    // 4
#define ES_5    KC_5    // 5
#define ES_6    KC_6    // 6
#define ES_7    KC_7    // 7
#define ES_8    KC_8    // 8
#define ES_9    KC_9    // 9
#define ES_0    KC_0    // 0
#define ES_QUOT KC_MINS // '
#define ES_IEXL KC_EQL  // ¡
```

Incluyendo este keymap_spanish.h en nuestro keymap.c podemos utilizar estas constantes para remapear las capas del teclado. Dejo un enlace a [mi keymap.c](https://github.com/mandrewcito/qmk_firmware/blob/master/keyboards/crkbd/keymaps/mandrewcito/keymap.c) aquí por si os es de utilidad, puedo dejar también el .hex si alguien lo pide, pero considero que la configuración de las teclas es algo bastante personal, debes de hacer muchas pruebas antes de quedarte con una distribución:

```c
#include QMK_KEYBOARD_H
#include "version.h"
#include "keymap_spanish.h"
// ......

```

La diferencia con otros keymaps, radica en que yo la mayoría de símbolos los tengo en una capa diferente. Así, de alguna manera palio la falta de teclas que tiene el corne:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/55bu8rh5dqoby8qhxu6h.PNG)


Dejo aquí el enlace al fork que hice para añadir mi teclado, en concreto al [commit](https://github.com/mandrewcito/qmk_firmware/commit/b06d416e40e068b862b58ece0f8b145827a3340f) donde subo los ficheros necesarios para compilar mi keymap. Compilarlo sería algo 
así:

```bash
qmk compile -kb crkbd/rev1 -km mandrewcito
```

Después solo sería flashear el archivo que se genera y listo.

La verdad es que no se si esto será de mucha utilidad, no es algo que sea extremadamente difícil pero a mi me llevo un ratín configurar todo y pasé por varios modelos fallidos. Así que si esto le sirve a alguien para no perder tanto tiempo como yo pues genial.

Cualquier pregunta me la dejáis por aquí :D

PD: Este post, y el keymap de mi teclado lo iré actualizando si encuentro alguna cosa más que vea que es de utilidad.
Enter fullscreen mode Exit fullscreen mode

Top comments (9)

Collapse
 
adrian2741 profile image
instalacionesdegravelab@hotmail.com

Hola, tengo un problema que me esta comiendo la cabeza. Yo le instale a un teclado redragon k530 draconic el firmware de QMK. Resulta que cuando quiero volver al firmware original no puedo de ninguna manera, y veo en este post que se puede crear el firmware, hay posibilidades de que alguien tenga el original? Ya se que hay un archivo con el firmware original proporcionado por redragon, pero no me detecta ek teclado por obvias razones. Que puedo hacer?

Collapse
 
jonasreyes profile image
Jonas Antonio Reyes Casanova

saludos hermano, he seguido estas recomendaciones y otras lecturas más, sin embargo no logro colocar en modo reset o bootloader mi redragon k530, logré hacer todos los pasos previos con un firmware modificado y generé el binario y el .hex pero me estrego a la hora de atender lo del bootloader, he probado todas las maneras de resetearlo y la combinación dada por redragon (Fn+Esc) solo me restaura a la versión por defecto del teclado pero no avanzo de allí. Ojala puedas darme un consejo que me funcione.

Collapse
 
evrtrabajo profile image
Emmanuel Valverde Ramos

como se hace el paso de:

Después solo sería flashear el archivo que se genera y listo.

Collapse
 
mandrewcito profile image
Andrés Baamonde Lozano • Edited

Aqui puedes encontrar los pasos, solo es usar el .hex que se genera y con el teclado enchufado ejecutar la toolbox:
img

Collapse
 
evrtrabajo profile image
Emmanuel Valverde Ramos

yo es que lo hago desde mi linux, y uso la termila, por eso era que comentaba este punto

Thread Thread
 
mandrewcito profile image
Andrés Baamonde Lozano

Ah vale, puedo completar en tutorial con eso, es cierto. Si te fijas en la imagen, pone los comandos que utiliza con el dfu-programmer en el log. Son "erase", "flash" y "reset". Supongo que descargando un ejecutable ya podrías flashear sin problemas.

Collapse
 
juantot9 profile image
juantot9

Hola, muy buenas! Perdón, pero tengo un teclado Tofu65 de KDBFans, el KDB67 v2, con distribución ISO también, pero me gustaría saber si también podría hacer esta solución para mi teclado

Collapse
 
evrtrabajo profile image
Emmanuel Valverde Ramos

Me has salvado la vida

Collapse
 
ao_giac profile image
AlguienKeYaNo

Cómo puedo resetear mi teclado? No tengo configurado un comando de reseteo. ¿Es posible resetear desde con código en CMD o similar?, gracias.