{"id":50509709,"url":"https://github.com/dmatking/esp32-terminal","last_synced_at":"2026-06-02T19:01:11.439Z","repository":{"id":346870450,"uuid":"1191979995","full_name":"dmatking/esp32-terminal","owner":"dmatking","description":"SSH terminal on Espressif and Waveshare ESP32-P4 boards.","archived":false,"fork":false,"pushed_at":"2026-04-15T13:44:48.000Z","size":11987,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-15T15:34:56.847Z","etag":null,"topics":["ble","embedded","esp-hosted","esp-idf","esp-terminal","esp32","esp32-c6","esp32-p4","esp32-terminal","freertos","mipi-dsi","ssh","terminal","waveshare","wolfssl"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dmatking.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-25T19:18:51.000Z","updated_at":"2026-04-15T13:44:51.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dmatking/esp32-terminal","commit_stats":null,"previous_names":["dmatking/terminal_p4","dmatking/esp32-terminal"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dmatking/esp32-terminal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmatking%2Fesp32-terminal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmatking%2Fesp32-terminal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmatking%2Fesp32-terminal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmatking%2Fesp32-terminal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dmatking","download_url":"https://codeload.github.com/dmatking/esp32-terminal/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmatking%2Fesp32-terminal/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33833277,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-02T02:00:07.132Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["ble","embedded","esp-hosted","esp-idf","esp-terminal","esp32","esp32-c6","esp32-p4","esp32-terminal","freertos","mipi-dsi","ssh","terminal","waveshare","wolfssl"],"created_at":"2026-06-02T19:01:10.622Z","updated_at":"2026-06-02T19:01:11.420Z","avatar_url":"https://github.com/dmatking.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# esp32-terminal\n\nSSH terminal on ESP32-P4 with BLE keyboard, MIPI-DSI display, and ESP32-C6 co-processor (WiFi + BT via esp_hosted).\n\n\u003e For chip-level notes on the P4+C6 combination (esp_hosted init, SDIO, PSRAM, errata, etc.) see [esp32-notes](https://github.com/dmatking/esp32-notes).\n\n## Screenshots\n\n| Waveshare Menu | Waveshare Terminal |\n|----------------|---------------------|\n| \u003cimg src=\"assets/menu.jpg\" width=\"100%\"\u003e | \u003cimg src=\"assets/exa.jpg\" width=\"100%\"\u003e |\n\n## Supported Boards\n\n| Board | Display | Resolution | Terminal Grid |\n|-------|---------|------------|---------------|\n| ESP32-P4 Function EV Board | EK79007 | 1024x600 | 83x24 |\n| Waveshare ESP32-P4-WIFI6-Touch-LCD-4B | ST7703 | 720x720 | 58x29 |\n\n## Board Selection\n\nBoard selection is done via `idf.py menuconfig` under **\"Terminal P4 Configuration\" \u003e \"Target board\"**.\n\nAlternatively, set directly in `sdkconfig`:\n\n```\n# ESP32-P4 Function EV Board (default)\nCONFIG_BOARD_P4_EV=y\n\n# Waveshare 720x720\nCONFIG_BOARD_P4_WAVESHARE=y\n```\n\nAfter changing the board, do a full clean rebuild:\n\n```bash\nidf.py fullclean\nidf.py build\n```\n\n**Note:** `fullclean` removes `managed_components/` which get re-downloaded on next build. The `sdkconfig` is preserved.\n\n## Waveshare C6 Firmware\n\nThe Waveshare board ships with old C6 co-processor firmware (v0.0.0) that doesn't support BT. On first boot, the app OTAs the C6 to v2.12.3 from the `slave_fw` partition. This partition must be flashed separately once:\n\n```bash\nesptool.py --chip esp32p4 -p /dev/ttyACM0 write_flash --force 0x310000 slave_fw/network_adapter.bin\n```\n\nAfter that, `idf.py flash` handles the app partition and the OTA is automatic.\n\n## BLE Keyboard Pairing\n\n- On first boot (no bonds), scanning starts automatically\n- On subsequent boots, reconnects to the bonded keyboard\n- To force re-pair: hold BOOT button for 2 seconds while \"reconnecting...\" is displayed\n\n## Build \u0026 Flash\n\n```bash\nsource /path/to/esp-idf/export.sh\nidf.py build\nidf.py -p /dev/ttyACM0 flash monitor\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdmatking%2Fesp32-terminal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdmatking%2Fesp32-terminal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdmatking%2Fesp32-terminal/lists"}