{"id":14963285,"url":"https://github.com/meir/macropad","last_synced_at":"2025-10-25T00:32:06.857Z","repository":{"id":128232325,"uuid":"527665362","full_name":"meir/macropad","owner":"meir","description":"Small QMK-like project for the ESP32-S2","archived":false,"fork":false,"pushed_at":"2023-02-01T14:36:01.000Z","size":2545,"stargazers_count":14,"open_issues_count":8,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-31T04:51:21.572Z","etag":null,"topics":["arduino","esp32","esp32s2","macropad","platformio"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/meir.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-08-22T17:25:27.000Z","updated_at":"2024-12-20T06:12:33.000Z","dependencies_parsed_at":"2023-07-11T13:02:37.459Z","dependency_job_id":null,"html_url":"https://github.com/meir/macropad","commit_stats":{"total_commits":31,"total_committers":3,"mean_commits":"10.333333333333334","dds":"0.29032258064516125","last_synced_commit":"d7351acf14532acbed8b8d37b103634212a1e5e1"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meir%2Fmacropad","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meir%2Fmacropad/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meir%2Fmacropad/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meir%2Fmacropad/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/meir","download_url":"https://codeload.github.com/meir/macropad/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238053514,"owners_count":19408699,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arduino","esp32","esp32s2","macropad","platformio"],"created_at":"2024-09-24T13:31:18.237Z","updated_at":"2025-10-25T00:32:06.848Z","avatar_url":"https://github.com/meir.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Macropad\n\nThis project is to provide a QMK like environment for the ESP32-S2.\n\nI've personally used an [Adafruit ESP32-S2 TFT Feather](https://www.adafruit.com/product/5300) for this project, just for the builtin display.\n\n![macropad](./.github/assets/macropad.png)\n\n## Configuration\n\nAt this time, this project does not have keyboard selection folder like QMK.\nYou would need to manually modify this code in order to get it to work with your board.\nCurrently all configuration can be done by modifying the following files:\n```\n./src/config/config.hpp\n./src/config/config.cpp\n```\n\n## Installation\n\nThis project is made using [PlatformIO](https://platformio.org/)\nIn order to use this project you need to install the `pio` command.\nEasiest way to do this would be using [Homebrew](https://formulae.brew.sh/formula/platformio#default) `brew install platformio`\n\nAfter this you can plug in your board and run the following:\n```\n# pio run -t upload\n```\n\n### VSCode\nOr you can install the [VSCode plugin](https://marketplace.visualstudio.com/items?itemName=platformio.platformio-ide)\nIn this case you just need to install the plugin, open this project in it, connect your board and press upload.\nThis should automatically shut down your board and compile and upload the code.\n\n## Features/Roadmap\n\n- [x] Keycodes \u003csup\u003e[*\u003csup\u003e1\u003c/sup\u003e](#iss-1)\u003c/sup\u003e\n- [x] Layers\n- [x] Display\n- [x] Rotary encoders \u003csup\u003e[*\u003csup\u003e2\u003c/sup\u003e](#iss-2)\u003c/sup\u003e\n- [x] MOD keys \u003csup\u003e[*\u003csup\u003e3\u003c/sup\u003e](#iss-3)\u003c/sup\u003e\n- [x] Custom keys\n- [ ] Layer keys\n- [ ] Transparent keycodes\n- [ ] Web configurator\n- [ ] Mouse keys\n- [ ] Macros\n- [ ] Tapdances\n- [ ] Combos\n\n## Limitations\n\n\u003ca name=\"iss-1\"\u003e*\u003csup\u003e1\u003c/sup\u003e\u003c/a\u003e: Currently the default ESP32 USB library is used, this library only supports 6 keystrokes at once, any keys after this gets ghosted.\n\n\u003ca name=\"iss-2\"\u003e*\u003csup\u003e2\u003c/sup\u003e\u003c/a\u003e: Rotary encoders can be done using external libraries, currently the encoder values do not get read internally\n\n\u003ca name=\"iss-3\"\u003e*\u003csup\u003e3\u003c/sup\u003e\u003c/a\u003e: Mod keys only support one level of mods currently, so you cant use `LSHIFT(LCTRL(KC_Z))`\n\n## Keycodes\n\nKeycode                 | Key\n------------------------|------\n`____`              | NO\n`KC_NO`                 | NO\n`KC_ROLL_OVER`          | Roll over\n`KC_POST_FAIL`          | Post fail\n`KC_UNDEFINED`          | Undefined\n`KC_A`                  | A\n`KC_B`                  | B\n`KC_C`                  | C\n`KC_D`                  | D\n`KC_E`                  | E\n`KC_F`                  | F\n`KC_G`                  | G\n`KC_H`                  | H\n`KC_I`                  | I\n`KC_J`                  | J\n`KC_K`                  | K\n`KC_L`                  | L\n`KC_M`                  | M\n`KC_N`                  | N\n`KC_O`                  | O\n`KC_P`                  | P\n`KC_Q`                  | Q\n`KC_R`                  | R\n`KC_S`                  | S\n`KC_T`                  | T\n`KC_U`                  | U\n`KC_V`                  | V\n`KC_W`                  | W\n`KC_X`                  | X\n`KC_Y`                  | Y\n`KC_Z`                  | Z\n`KC_1`                  | 1\n`KC_2`                  | 2\n`KC_3`                  | 3\n`KC_4`                  | 4\n`KC_5`                  | 5\n`KC_6`                  | 6\n`KC_7`                  | 7\n`KC_8`                  | 8\n`KC_9`                  | 9\n`KC_0`                  | 0\n`KC_ENTER`              | Enter \n`KC_ESCAPE`             | Esc\n`KC_BSPACE`             | Backspace\n`KC_TAB`                | Tab\n`KC_SPACE`              | Space\n`KC_MINUS`              | - or _\n`KC_EQUAL`              | = or +\n`KC_LBRACKET`           | [ or {\n`KC_RBRACKET`           | ] or }\n`KC_BSLASH`             | \\\\ or |\n`KC_NONUS_HASH`         | # (non US)\n`KC_SCOLON`             | ; or :\n`KC_QUOTE`              | ' or \"\n`KC_GRAVE`              | \\` or ~\n`KC_COMMA`              | , or \u003c\n`KC_DOT`                | . or \u003e\n`KC_SLASH`              | / or ?\n`KC_CAPSLOCK`           | Capslock\n`KC_F1`                 | F1\n`KC_F2`                 | F2\n`KC_F3`                 | F3\n`KC_F4`                 | F4\n`KC_F5`                 | F5\n`KC_F6`                 | F6\n`KC_F7`                 | F7\n`KC_F8`                 | F8\n`KC_F9`                 | F9\n`KC_F10`                | F10\n`KC_F11`                | F11\n`KC_F12`                | F12\n`KC_PSCREEN`            | Print screen\n`KC_SCROLLLOCK`         | Scrollback\n`KC_PAUSE`              | Pause\n`KC_INSERT`             | Insert\n`KC_HOME`               | Home\n`KC_PGUP`               | Page up\n`KC_DELETE`             | Delete\n`KC_END`                | End\n`KC_PGDOWN`             | Page down\n`KC_RIGHT`              | Right arrow\n`KC_LEFT`               | Left arrow\n`KC_DOWN`               | Down arrow\n`KC_UP`                 | Up arrow\n`KC_NUMLOCK`            | Numeric lock\n`KC_KP_SLASH`           | keypad /\n`KC_KP_ASTERISK`        | keypad *\n`KC_KP_MINUS`           | keypad -\n`KC_KP_PLUS`            | keypad +\n`KC_KP_ENTER`           | keypad Enter\n`KC_KP_1`               | Keypad 1\n`KC_KP_2`               | Keypad 2\n`KC_KP_3`               | Keypad 3\n`KC_KP_4`               | Keypad 4\n`KC_KP_5`               | Keypad 5\n`KC_KP_6`               | Keypad 6\n`KC_KP_7`               | Keypad 7\n`KC_KP_8`               | Keypad 8\n`KC_KP_9`               | Keypad 9\n`KC_KP_0`               | Keypad 0\n`KC_KP_DOT`             | Keypad .\n`KC_NONUS_BSLASH`       | Keypad \\ (non US)\n`KC_APPLICATION`        | Application\n`KC_POWER`              | Power\n`KC_KP_EQUAL`           | Keypad =\n`KC_F13`                | F13\n`KC_F14`                | F14\n`KC_F15`                | F15\n`KC_F16`                | F16\n`KC_F17`                | F17\n`KC_F18`                | F18\n`KC_F19`                | F19\n`KC_F20`                | F20\n`KC_F21`                | F21\n`KC_F22`                | F22\n`KC_F23`                | F23\n`KC_F24`                | F24\n`KC_EXECUTE`            | Execute\n`KC_HELP`               | Help\n`KC_MENU`               | Menu\n`KC_SELECT`             | Select\n`KC_STOP`               | Stop\n`KC_AGAIN`              | Again\n`KC_UNDO`               | Undo\n`KC_CUT`                | Cut\n`KC_COPY`               | Copy\n`KC_PASTE`              | Paste\n`KC_FIND`               | Find\n`KC_KB_MUTE`            | Keyboard mute\n`KC_KB_VOLUME_UP`       | Keyboard volume up\n`KC_KB_VOLUME_DOWN`     | Keyboard volume down\n`KC_LOCKING_CAPS_LOCK`  | Locking caps lock\n`KC_LOCKING_NUM_LOCK`   | Locking numeric lock\n`KC_LOCKING_SCROLL_LOCK`| Locking scroll lock\n`KC_KP_COMMA`           | Keypad ,\n`KC_KP_EQUAL_AS400`     | Keypad = AS400\n`KC_INTERNATIONAL_1`    | International 1\n`KC_INTERNATIONAL_2`    | International 2\n`KC_INTERNATIONAL_3`    | International 3\n`KC_INTERNATIONAL_4`    | International 4\n`KC_INTERNATIONAL_5`    | International 5\n`KC_INTERNATIONAL_6`    | International 6\n`KC_INTERNATIONAL_7`    | International 7\n`KC_INTERNATIONAL_8`    | International 8\n`KC_INTERNATIONAL_9`    | International 9\n`KC_LANGUAGE_1`         | Language 1\n`KC_LANGUAGE_2`         | Language 2\n`KC_LANGUAGE_3`         | Language 3\n`KC_LANGUAGE_4`         | Language 4\n`KC_LANGUAGE_5`         | Language 5\n`KC_LANGUAGE_6`         | Language 6\n`KC_LANGUAGE_7`         | Language 7\n`KC_LANGUAGE_8`         | Language 8\n`KC_LANGUAGE_9`         | Language 9\n`KC_ALTERNATE_ERASE`    | Alternate erase\n`KC_SYSTEM_REQUEST`     | System request\n`KC_CANCEL`             | Cancel\n`KC_CLEAR`              | Clear\n`KC_PRIOR`              | Prior\n`KC_RETURN`             | Return\n`KC_SEPARATOR`          | Seperator\n`KC_OUT`                | Out\n`KC_OPER`               | Oper\n`KC_CLEAR_AGAIN`        | Clear again\n`KC_CRSEL`              | Clear selection\n`KC_EXSEL`              | Exsel\n`KC_LCTRL`              | Left control\n`KC_LSHIFT`             | Left shift\n`KC_LALT`               | Left alt\n`KC_LGUI`               | Left gui\n`KC_RCTRL`              | Right control\n`KC_RSHIFT`             | Right shift\n`KC_RALT`               | Right alt\n`KC_RGUI`               | Right gui\n`KC_SYSTEM_POWER`       | System power\n`KC_SYSTEM_SLEEP`       | System sleep\n`KC_SYSTEM_WAKE`        | System wake\n`KC_BRIGHTNESS_UP`      | Brightness up\n`KC_BRIGHTNESS_DOWN`    | Brightness down\n`KC_PLAY_PAUSE`         | Play/Pause music\n`KC_NEXT_TRACK`         | Next music track\n`KC_PREV_TRACK`         | Previous music track\n`KC_MEDIA_STOP`         | Stop music\n`KC_VOLUME`             | Volume\n`KC_MUTE`               | Mute\n`KC_VOLUME_INCREMENT`   | Volume up\n`KC_VOLUME_DECREMENT`   | Volume down\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmeir%2Fmacropad","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmeir%2Fmacropad","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmeir%2Fmacropad/lists"}