https://github.com/dmatking/esp32-terminal
SSH terminal on Espressif and Waveshare ESP32-P4 boards.
https://github.com/dmatking/esp32-terminal
ble embedded esp-hosted esp-idf esp-terminal esp32 esp32-c6 esp32-p4 esp32-terminal freertos mipi-dsi ssh terminal waveshare wolfssl
Last synced: 11 days ago
JSON representation
SSH terminal on Espressif and Waveshare ESP32-P4 boards.
- Host: GitHub
- URL: https://github.com/dmatking/esp32-terminal
- Owner: dmatking
- License: mit
- Created: 2026-03-25T19:18:51.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2026-04-15T13:44:48.000Z (about 2 months ago)
- Last Synced: 2026-04-15T15:34:56.847Z (about 2 months ago)
- Topics: ble, embedded, esp-hosted, esp-idf, esp-terminal, esp32, esp32-c6, esp32-p4, esp32-terminal, freertos, mipi-dsi, ssh, terminal, waveshare, wolfssl
- Language: C
- Homepage:
- Size: 11.4 MB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# esp32-terminal
SSH terminal on ESP32-P4 with BLE keyboard, MIPI-DSI display, and ESP32-C6 co-processor (WiFi + BT via esp_hosted).
> 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).
## Screenshots
| Waveshare Menu | Waveshare Terminal |
|----------------|---------------------|
|
|
|
## Supported Boards
| Board | Display | Resolution | Terminal Grid |
|-------|---------|------------|---------------|
| ESP32-P4 Function EV Board | EK79007 | 1024x600 | 83x24 |
| Waveshare ESP32-P4-WIFI6-Touch-LCD-4B | ST7703 | 720x720 | 58x29 |
## Board Selection
Board selection is done via `idf.py menuconfig` under **"Terminal P4 Configuration" > "Target board"**.
Alternatively, set directly in `sdkconfig`:
```
# ESP32-P4 Function EV Board (default)
CONFIG_BOARD_P4_EV=y
# Waveshare 720x720
CONFIG_BOARD_P4_WAVESHARE=y
```
After changing the board, do a full clean rebuild:
```bash
idf.py fullclean
idf.py build
```
**Note:** `fullclean` removes `managed_components/` which get re-downloaded on next build. The `sdkconfig` is preserved.
## Waveshare C6 Firmware
The 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:
```bash
esptool.py --chip esp32p4 -p /dev/ttyACM0 write_flash --force 0x310000 slave_fw/network_adapter.bin
```
After that, `idf.py flash` handles the app partition and the OTA is automatic.
## BLE Keyboard Pairing
- On first boot (no bonds), scanning starts automatically
- On subsequent boots, reconnects to the bonded keyboard
- To force re-pair: hold BOOT button for 2 seconds while "reconnecting..." is displayed
## Build & Flash
```bash
source /path/to/esp-idf/export.sh
idf.py build
idf.py -p /dev/ttyACM0 flash monitor
```