Skip to content

BenSeverson/bisque

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

264 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Bisque — Open-source ESP32-S3 ceramic kiln controller

Build Status ESP-IDF v6.0.1 MIT License

▶ Try the live web UI demo — interactive, no hardware required

Features

Temperature Control

  • PID controller with auto-tuning (Ziegler-Nichols relay method)
  • 1-second control loop with time-proportional SSR output
  • Thermocouple calibration offset

Firing Profiles

  • Up to 20 custom profiles with 16 segments each (ramp rate, target temp, hold time)
  • Orton cone firing (cones 022-13) with slow, medium, and fast heating speeds
  • Delayed start

Safety

  • Over-temperature protection (hardware max 1400 C, user-configurable limit)
  • Thermocouple fault detection (open circuit, short to GND/VCC)
  • Rate-of-rise monitoring (detects runaway >2x programmed rate)
  • Not-rising detection (alerts if <10 C rise in 15 min)
  • Emergency stop with immediate SSR cutoff

Web Dashboard

  • Real-time temperature chart with profile overlay (React + Recharts)
  • Profile builder with cone fire mode
  • Firing history with CSV trace export and cost estimation
  • Settings: calibration, safety limits, webhooks, API token

iOS App

  • Full remote control (SwiftUI)
  • Dynamic Island live activities during firing
  • Local notifications for firing complete/error

LCD Display

  • 3.5" TFT (480x320) with LVGL, adaptive single-screen dashboard (idle/active/paused/complete/error)
  • 5-way nav switch (up/down/select/left/right), SELECT-driven modals for profile pick and firing control

Connectivity

  • Wi-Fi with mDNS (bisque.local)
  • REST API with optional bearer token auth
  • WebSocket for real-time streaming
  • Webhook notifications (firing complete/error)

Screenshots

Web Dashboard (React)

Web dashboard showing live firing progress

LCD Display (LVGL on 3.5" TFT)

Boot splash LCD idle LCD heating LCD paused LCD complete LCD error

Profile picker modal Start confirm modal Action menu modal Action menu modal (paused) Action menu modal (autotune)

iOS App (SwiftUI)

iOS app

Bill of Materials

Expand
Component Description Approx. Cost
ESP32-S3-DevKitC-1 (N16R8) Main controller, 16MB flash, 8MB PSRAM (44-pin, USB-C) ~$10
MAX31855 breakout K-type thermocouple amplifier (SPI) ~$15
K-type thermocouple High-temp probe, kiln rated ~$15-30
ST7796S 3.5" TFT LCD 480x320 SPI display ~$12
SSR (e.g. SSR-40DA) Solid state relay for kiln element ~$10
3x tactile buttons Up / Down / Select navigation ~$1
Piezo buzzer (optional) Alarm output ~$1
Relay module (optional) Vent fan control ~$3

Safety warning: Kilns operate at dangerous temperatures and voltages. Ensure all high-voltage wiring is performed by a qualified electrician. Use appropriate safety equipment and never leave a firing kiln unattended.

Wiring

Expand

SPI Bus (shared by thermocouple and display)

Signal ESP32-S3 GPIO
MOSI 11
MISO 13
SCLK 12

MAX31855 Thermocouple

Signal ESP32-S3 GPIO
CS 10

ST7796S LCD Display

LCD Pin ESP32-S3 GPIO Notes
SDA 11 SPI MOSI (data to display)
SCL 12 SPI clock
CS 9 Chip select
DC 46 Data/Command
RST 3 Reset
BL 8 Backlight (active-high)

SSR Output

Signal ESP32-S3 GPIO
SSR 17

Navigation Buttons

Button ESP32-S3 GPIO Notes
Up 4 Active-low, internal pull-up
Down 5 Active-low, internal pull-up
Select 6 Active-low, internal pull-up

See also: Wiring Diagram | Perfboard Layout

Getting Started

Prerequisites

Firmware

# Build web UI assets first
cd web_ui && npm install && npm run build && cd ..

# Gzip assets for SPIFFS
gzip -k -9 spiffs_data/www/assets/*.js spiffs_data/www/assets/*.css

# Build and flash firmware
source ~/.espressif/v6.0.1/esp-idf/export.sh
idf.py build
idf.py flash monitor

Web UI Development

cd web_ui
npm install
npm run dev    # Starts dev server with mock kiln simulator

iOS App

# Generate Xcode project
cd ios/Bisque
xcodegen generate
open Bisque.xcodeproj

For simulator testing, start the mock server first:

cd web_ui && npm run mock-server   # HTTP + WebSocket on localhost:8080

In the iOS simulator, tap "Use Mock Server" on the connection screen.

Simulator / Mock Server

A mock kiln server simulates the full API (status, profiles, firing, settings, history, autotune, diagnostics) with realistic temperature physics so you can develop and test without hardware.

Web UI development

The mock server runs automatically as a Vite plugin when you start the web UI dev server:

cd web_ui
npm run dev

The mock is enabled by default. To disable it and proxy to a real kiln instead:

VITE_MOCK=false npm run dev

Control simulation speed with VITE_MOCK_SPEED (default 60 = 60x real-time):

VITE_MOCK_SPEED=120 npm run dev

iOS app development

A standalone mock server is available for testing the iOS app in the Xcode simulator:

cd web_ui
npm run mock-server

This starts an HTTP + WebSocket server on localhost:8080. To change the port or simulation speed:

MOCK_PORT=9000 MOCK_SPEED=120 npm run mock-server

LCD Simulator

A standalone SDL2-based simulator renders the LVGL display UI on your desktop:

cd simulator
cmake -B build && cmake --build build
./build/bisque_sim

Requires SDL2 (brew install sdl2 on macOS).

Architecture

main/                 App entry point, FreeRTOS task creation
components/
  app_config/         Pin definitions, hardware constants
  thermocouple/       MAX31855 SPI driver
  pid_control/        PID controller + Ziegler-Nichols auto-tune
  firing_engine/      Multi-segment firing state machine
  safety/             Watchdog, over-temp, fault detection
  cone_table/         Orton cone temperature lookup (022-13)
  history/            Firing history + temperature traces (NVS)
  display/            ST7796S LCD + LVGL UI (adaptive dashboard)
  web_server/         REST API + WebSocket server
  wifi_manager/       Wi-Fi STA/AP + mDNS
web_ui/               React/TypeScript web dashboard
ios/Bisque/           SwiftUI iOS app
simulator/            LVGL SDL2 desktop simulator
tests/host/           Pure-logic + accelerated firing unit tests (CMake/Unity)
docs/                 Wiring diagrams, screenshots, bench smoke test

Testing

CI runs five automated test layers on every PR — pure-logic unit tests and accelerated firing scenarios (tests/host/), a UI screenshot regression suite (simulator/ --diff), web UI unit tests, and a cross-language API contract test that validates firmware JSON output against the frontend's zod schemas.

Before tagging a release, run the bench smoke test — a 3-8 minute hardware run that verifies the parts CI can't touch: real SSR clicks, real thermocouple readings, history persistence across reboot.

Releases

Firmware is distributed as GitHub Releases, each with a full ESP32-S3 flash kit and Sigstore build-provenance attestations. See RELEASING.md for the versioning scheme and the procedure for cutting a release.

License

MIT

About

ESP32-S3 ceramic kiln controller with web UI, PID control, and safety systems

Topics

Resources

License

Stars

Watchers

Forks

Contributors