Initial scaffold: ESP32-P4 firmware + voice gateway for Tatlock endpoint

DeskLock gives the Tatlock butler a face and voice on a Waveshare
ESP32-P4-WIFI6-Touch-LCD-3.4C round display in the living room.

- firmware/: ESP-IDF project targeting esp32p4 with the Waveshare XC BSP
- gateway/: FastAPI voice bridge (faster-whisper STT, Tatlock chat, Piper TTS)
- docs/architecture.md: component design and device<->gateway WS protocol

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-14 16:58:59 +02:00
co-authored by Claude Fable 5
commit 576fd7d237
20 changed files with 622 additions and 0 deletions
+4
View File
@@ -0,0 +1,4 @@
cmake_minimum_required(VERSION 3.16)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(desklock)
+4
View File
@@ -0,0 +1,4 @@
idf_component_register(
SRCS "desklock_main.c"
INCLUDE_DIRS "."
)
+30
View File
@@ -0,0 +1,30 @@
/*
* DeskLock — living-room face and voice for the Tatlock butler.
*
* Boot sequence (planned):
* 1. BSP init: display + LVGL, touch, audio codec (ES8311/ES7210)
* 2. Wi-Fi up via ESP32-C6 (ESP-Hosted over SDIO)
* 3. WebSocket connection to the DeskLock gateway
* 4. Face state machine: idle / listening / thinking / speaking
*/
#include "esp_log.h"
#include "bsp/esp-bsp.h"
static const char *TAG = "desklock";
void app_main(void)
{
ESP_LOGI(TAG, "DeskLock starting");
bsp_display_start();
bsp_display_backlight_on();
/* TODO(bring-up): render placeholder face via LVGL
* TODO(bring-up): Wi-Fi via ESP-Hosted (C6)
* TODO(voice): mic capture (ES7210) -> WebSocket upstream
* TODO(voice): gateway PCM downstream -> ES8311 playback
*/
ESP_LOGI(TAG, "DeskLock up (display only)");
}
+3
View File
@@ -0,0 +1,3 @@
dependencies:
idf: ">=5.4"
waveshare/esp32_p4_wifi6_touch_lcd_xc: "^3.0.1"
+14
View File
@@ -0,0 +1,14 @@
# Target: Waveshare ESP32-P4-WIFI6-Touch-LCD-3.4C
CONFIG_IDF_TARGET="esp32p4"
# 32 MB NOR flash
CONFIG_ESPTOOLPY_FLASHSIZE_32MB=y
CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE=y
# 32 MB in-package PSRAM (hex mode) — LVGL frame buffers live here
CONFIG_SPIRAM=y
CONFIG_SPIRAM_MODE_HEX=y
CONFIG_SPIRAM_SPEED_200M=y
CONFIG_COMPILER_OPTIMIZATION_PERF=y
CONFIG_FREERTOS_HZ=1000