
Sub
google/mozc-devices
Circuit diagrams and firmware source code for Gboard DIY keyboards

ESP Touchscreen based sauna controller, uses a MAX SPI K Type breakout board
Sauna Controller Interface is an open-source printed circuit board by BitmanKiwi, from the BitmanKiwi/ESP-Sauna-Controller repository on GitHub. It is a 2-layer board of 98 × 63.5 mm with 15 parts on 15 nets, routed with 59 tracks and 0 vias.
It belongs with the interfaces and adapters boards of this library.
ESPHome firmware for a DIY sauna controller on a JC3248W535 touchscreen board (ESP32-S3). It switches the heater through an SSR, runs a timed session, controls the lights, and serves its own web page.
Shamelessly built with Claude's assistance.
The touchscreen board is linked under Parts (AliExpress). I used KiCad to design a breakout PCB for it. To reach the board's IO you will need two 4-pin and one 8-pin JST 1.25 pigtails.
Safety: this controller switches a mains-powered heater. Mains wiring should be done by a licensed electrician. Don't rely on the firmware alone to prevent overheating. Fit an independent hardware over-temperature cutoff (a thermal fuse or limit thermostat) in the heater circuit, and test it.
| File | Purpose |
|---|---|
sauna-controller.yaml | The ESPHome configuration |
www/sauna-page.js | The custom web page, built into the firmware |
secrets.example.yaml | Template for secrets.yaml (copy and fill in) |
docs/JC3248W535/ | Board specification, pin map, slot drawings, chip datasheets, user manual |
PCB/ | KiCad project for the breakout/interface board |
| Function | GPIO | Notes |
|---|---|---|
| Heater SSR | 15 | Firmware-controlled only |
| Lights SSR | 16 | |
| Thermometer supply | 9 | |
| Enable input | 17 | On a board built from an earlier version of the PCB, silkscreened "IO18" (see Breakout PCB) |
| MAX31855 | 5 (DO), 6 (CS), 7 (CLK) | Separate SPI bus |
Copy secrets.example.yaml to secrets.yaml and fill in your own values. secrets.yaml is git-ignored.
From the folder containing the yaml, build and flash:
esphome run sauna-controller.yamlOpen the controller's address in a browser and sign in as admin with your web_password.
The web login is plain HTTP, so keep the controller off the internet.
pip install esphome. Check it with esphome version.secrets.yaml (see above), then connect the board by USB and run esphome run sauna-controller.yaml. Pick the serial port when it asks.esphome run sauna-controller.yaml can update it over WiFi (OTA). It asks for the ota_password from secrets.yaml..esphome/. That folder is generated, so it is git-ignored and safe to delete. The next build recreates it.If a change doesn't seem to take effect, check the end of the esphome run output for a successful upload, and confirm the file you edited is the one you ran.
run_time_minutes at the top of the yaml) and the sauna heats to the setpoint.Open the controller's address in a browser and sign in as admin.
?stock to the address to load ESPHome's stock page instead. That needs internet on the device you're browsing from.Readings pass through a plausibility check (below −20 °C or above 160 °C raw is discarded), a median filter, a moving average, and then the calibration offset. If no valid reading arrives for 30 seconds, the controller treats the temperature as unknown and keeps the heater off.
From the vendor schematic ("Extended IO" sheet). Check the connector pitch and pin 1 against your own board before wiring.
| Connector | Pins (1 to last) | Used here |
|---|---|---|
| F2 (8-pin) | IO5, IO6, IO7, IO15, IO16, IO46, IO9, IO14 | IO5, IO6, IO7 (MAX31855), IO15 (heater), IO16 (lights), IO9 (thermometer supply) |
| P3 (4-pin) | GND, 3.3V, IO17, IO18 | IO17 (enable input) |
| P4 (4-pin) | GND, 3.3V, IO17, IO18 | Same signals as P3 (the schematic labels this one as a different pitch from P3) |
The PCB/ folder holds the KiCad project (Sauna Controller Interface.kicad_pro and .kicad_pcb) for the interface (breakout) board that breaks out the controller's IO.
If you want to have the board made, open the KiCad files and generate your own output files (Gerbers and drill files) from them, using your manufacturer's settings. No Gerber files are included, so the output always matches the design you open. Check the design against your own wiring before ordering.
Silkscreen fix: the first version of this board had the IO17 and IO18 silkscreen labels on the two output headers the wrong way round. That is corrected in the KiCad files here. The enable input is GPIO17, and on a board built from the earlier version it is printed "IO18". Wire by function and the connector table above, not by the silkscreen, if you have one of those boards.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 3 | , , |
The 3 most common of 15 parts.

google/mozc-devices
Circuit diagrams and firmware source code for Gboard DIY keyboards

hoglet67/RGBtoHDMI
Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI

mntmn/amiga2000-gfxcard
MNT VA2000, an Open Source Amiga 2/3/4000 Graphics Card (Zorro II/III), written in Verilog

hackclub/OnBoard
💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

kenp-io/not-for-airpods-repairs
The content of this repository is licensed under the WTFPL License. Please have a close look at the terms before using this material.

Luos-io/luos_engine
Open-source and real-time orchestrator for cyber-physical-systems, to easily design, test and deploy embedded applications and digital twins.

Chrismettal/EleLab_v2
Cheap DIY lab system for hobbyists and the tinkering folk

It measures 98 × 63.5 mm and has 2 copper layers, 1.6 mm thick.
15 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the BitmanKiwi/ESP-Sauna-Controller repository on GitHub, at the commit this page was made from: the board is PCB/Sauna Controller Interface.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask BitmanKiwi before reusing the design.