{"id":16188276,"url":"https://github.com/konsumer/keyboard_at","last_synced_at":"2026-01-21T17:33:11.471Z","repository":{"id":257730394,"uuid":"859152842","full_name":"konsumer/keyboard_at","owner":"konsumer","description":"IBM AT Keyboard driver for micropython","archived":false,"fork":false,"pushed_at":"2024-09-20T20:02:41.000Z","size":32,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-05T12:59:24.926Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"HTML","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/konsumer.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":"2024-09-18T07:16:28.000Z","updated_at":"2024-10-10T16:09:31.000Z","dependencies_parsed_at":"2024-09-18T10:10:12.814Z","dependency_job_id":"673fd508-3fc3-4dcf-ba94-4f762de330d3","html_url":"https://github.com/konsumer/keyboard_at","commit_stats":null,"previous_names":["konsumer/keyboard_at"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/konsumer%2Fkeyboard_at","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/konsumer%2Fkeyboard_at/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/konsumer%2Fkeyboard_at/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/konsumer%2Fkeyboard_at/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/konsumer","download_url":"https://codeload.github.com/konsumer/keyboard_at/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247665489,"owners_count":20975781,"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":[],"created_at":"2024-10-10T07:25:45.192Z","updated_at":"2026-01-21T17:33:11.412Z","avatar_url":"https://github.com/konsumer.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"This is a USB HID keyboard-adapter for IBM AT that runs on ESP32 with micropython.\n\n## installation\n\n### micropython setup\n\n```sh\n# get the tools\nsudo pip3 install --break-system-packages esptool adafruit-ampy\n\n# mac is like this\nPORT=/dev/cu.usbserial-0001\n\n# linux is more like this\nPORT=/dev/ttyUSB0\n\nwget https://micropython.org/resources/firmware/ESP32_GENERIC-20240602-v1.23.0.bin\n\nesptool.py --chip esp32 --port ${PORT} erase_flash\nesptool.py --chip esp32 --port ${PORT} --baud 460800 write_flash -z 0x1000 ESP32_GENERIC-20240602-v1.23.0.bin\n\n# connect to REPL\nscreen ${PORT} 115200\n\n# or use another serial-terminal program\npicocom --baud 115200 ${PORT}\n```\n\nnow disconnect (in `screen`, use `ctrl + A` then press `K`, or `Ctrl-Shift-A/X` in picocom) and you can push your keyboard firmware.\n\n### upload firmware\n\n\nNow, you can make a boot.py that does this at end:\n\n```py\nimport keeb\nkeeb.start(4, 5)\n```\n\nand push them both:\n\n```sh\nampy --port ${PORT} put keeb.py\nampy --port ${PORT} put boot.py\n```\n\n### customization\n\nI use a [standard keymap](https://github.com/konsumer/keyboard_at/blob/main/keeb.py#L4-L12), which you can modify, but you can also just modify `onKeyUp`/`onKeyDown` to do whatever you want. Currently, it only prints code to serial, but you could make it send bluetooth or USB HID keyboard messages (these 2 modes are in the works.) The idea is that \"the firmware is the configuration\", so really, go wild, and make it do whatever you want.\n\n### WebREPL\n\nThis is optional, but makes it easier to mess with the adapter (change firmware and inspect code and stuff.)\n\n\nLogin over serial and run `import webrepl_setup`. Go through wizard, then make a boot.py file that looks like this: \n```py\n# This file is executed on every boot (including wake-boot from deepsleep)\n\nimport webrepl\nimport network\nimport keeb\n\nssid='\u003cYOURS\u003e'\nkey='\u003cYOURS\u003e'\nnetwork.hostname(\"espkeeb\")\n\ndef do_connect():\n    wlan = network.WLAN(network.STA_IF)\n    wlan.active(True)\n    if not wlan.isconnected():\n        print('connecting to network...')\n        wlan.connect(ssid, key)\n        while not wlan.isconnected():\n            pass\n\ndo_connect()\nwebrepl.start()\nkeeb.start(4, 5)\n```\n\nNow, upload with `ampy --port ${PORT} put boot.py` and you can access it at port 8266 on the device (example `http://espkeeb:8266/`.)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkonsumer%2Fkeyboard_at","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkonsumer%2Fkeyboard_at","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkonsumer%2Fkeyboard_at/lists"}