DEV Community

loading...
Cover image for Crear y flashear tu propio keymap con QMK firmware

Crear y flashear tu propio keymap con QMK firmware

Andrés Baamonde Lozano
Bohemian Developer
・6 min read

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  // ¡
Enter fullscreen mode Exit fullscreen mode

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 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:

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

Enter fullscreen mode Exit fullscreen mode

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

Dejo aquí el enlace al fork que hice para añadir mi teclado, en concreto al commit donde subo los ficheros necesarios para compilar mi keymap. Compilarlo sería algo
así:

qmk compile -kb crkbd/rev1 -km mandrewcito
Enter fullscreen mode Exit fullscreen mode

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.

Discussion (6)

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 Author • 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 Author

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
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.