Kaleido Mods
A few Skywalker Community Mods
Kaleido HiBean BLE Firmware
SnowBear Firmware Installation
Kaleido currently uses Classic Bluetooth to talk to HiBean a dated standard that, importantly, isn't supported on iOS at all. This project is a workaround that finally brings Kaleido connectivity to iPhones and iPads. It also pairs nicely with Bear's bridge for connecting devices over BLE Serial, which sidesteps the long-standing issues Classic Bluetooth SPP has on macOS, especially on Apple Silicon. Brought to you by Bear of the Skywalker community, with support from Will_Z at HiBean.
Machines Confirmed Kaleido Roasters that work:
M1 Lite
M1 Pro
M2 LEGACY (Unsealed)
Requirements
This is still in Beta and code is still being worked on. Please report any issues you have to our Community Discord.
-
Ensure you have the ESP32-S3 board
- USB A Male to USB C Male Cable (UART)
-
Binary File Link:
SnowBear UART (Kaleido Top USB Port Tablet)
SnowBear USB CP210x (Bottom USB port Artisan) - Browser:Use Google Chrome or Microsoft Edge (supports Web Serial)
ESPHome
Steps
1. Download the Binary File
- Open the GitHub link
- Click on the download raw file icon to download
2. Open ESPHome Web
- Go to
in your Chrome or Edge browser.
- Make sure your ESP32-S3 is connected to your computer using a USB cable.
3. Connect the ESP32-S3
- On the ESPHome Web page, click the Connect button.
- A pop-up will appear with available devices. Select the port for your ESP32-S3 and click Connect.
4. Install the Binary File
- Once connected, click Install.
- Choose File when prompted
- In the file selection dialog, locate and select the BLE_host_v1.2z_Kaleido_SnowBear.bin bin file you downloaded earlier.
- Click Install to start the flashing process.
-
5. Flash the Firmware
- ESPHome Web will erase the existing firmware and flash the BLE_host_v1.2z_Kaleido_SnowBear.bin binary.
- The flashing process may take a few minutes. Wait for it to complete.
- After successful installation, a success message will appear.
6. Plug into Kaleido Tablet USB Port. (Top USB port not the bottom)
Direct Link to Binary File
Troubleshooting
- Device Not Recognized: Ensure your USB cable supports data transfer.
- Flashing Errors
-
Hold BOOT and press RESET (recommended method):
- Hold down the BOOT button.
- While holding BOOT, press and release the RESET button.
- Continue holding BOOT for a second, then release it.
-
-
-
Unplug and replug while holding the BOOT button:
- Disconnect the ESP32-S3 from power (USB).
- Press and hold the BOOT button.
- While holding BOOT, plug the USB back in.
- Once connected, release the BOOT button.
-
- Let me know if you encounter issues or need further help!
- Not all wires are the same ensure your wire has Data Wires not a 2 strand charging wire.
BIG Thank you to Bear of the Skywalker Community Discord and Will_Z for getting this option to work.
Kaliedo Protocol Artisan USB
Kaliedo Roaster Protocol
Quick command reference for Artisan / HiBean serial control
Format Conventions
Instruction stream uses {[ as prefix and ]} as suffix.
Data stream uses { as prefix and } as suffix. Responses start with sid (status byte).
All keywords are uppercase. Each command is terminated with a newline (\n).
Multiple commands can share one {[ ]} pair, separated by commas — for example: {[HP 80,FC 60,RC 90]}
Connection and Setup
|
Command |
Description |
|---|---|
|
{[PI]} |
Ping — connection test. Returns {sid}. |
|
{[SC AR]} |
Start Artisan session. Returns {sid,SN:xxxxxxxx}. |
|
{[SC CP]} |
Start Cropster session. Returns {sid,SN:xxxxxxxx}. |
|
{[CL AR]} |
Close Artisan session. |
|
{[CL CP]} |
Close Cropster session. |
|
{[TU C]} |
Set temperature unit to Celsius. |
|
{[TU F]} |
Set temperature unit to Fahrenheit. |
Reading Data
|
Command |
Description |
|---|---|
|
{[RD A0]} |
Read main parameters (BT, ET, AT, HP, FC, RC, AH, TS). |
|
{[RD A1]} |
Read main parameters plus heating status (adds HS field). |
Example response (A1)
{0,BT:190.5,ET:185.0,AT:25.0,HP:80,FC:55,RC:90,AH:0,TS:180.0,HS:1}
Response fields
BT — bean temperature (0-300 °C / 32-572 °F)
ET — drum / environment temperature
AT — ambient temperature
HP — heater power %, step 5
FC — smoke fan speed %, step 5
RC — drum roll speed %, step 10
AH — auto-heat enabled (0 or 1)
TS — target temperature setpoint
HS — heating active (0 or 1, A1 mode only)
Heat Control
|
Command |
Description |
|---|---|
|
{[HS 0]} |
Stop heating. |
|
{[HS 1]} |
Start heating. |
|
{[HP n]} |
Set heater power n% (step 5, range 0-100). |
|
{[HP UP]} |
Step heater up by 5%. |
|
{[HP DW]} |
Step heater down by 5%. |
|
{[TS n.n]} |
Set target temperature (0-250 °C / 32-482 °F). |
|
{[AH 0]} |
Disable auto-heat (manual power mode). |
|
{[AH 1]} |
Enable auto-heat (device PID controls heat to TS). |
Fan and Drum
|
Command |
Description |
|---|---|
|
{[FC n]} |
Smoke fan n% (step 5, range 0-100). |
|
{[FC UP]} |
Step fan up by 5%. |
|
{[FC DW]} |
Step fan down by 5%. |
|
{[RC n]} |
Drum roll n% (step 10, range 0-100). |
|
{[RC UP]} |
Step drum up by 10%. |
|
{[RC DW]} |
Step drum down by 10%. |
Cooling
|
Command |
Description |
|---|---|
|
{[CS 0]} |
Cooling off. |
|
{[CS 1]} |
Cooling on. |
Roast Event Markers
Sends a user-tagged roast event to the device. The device synchronizes the event to its embedded control panel.
|
Command |
Description |
|---|---|
|
{[EV 1]} |
Charge — beans loaded into drum. |
|
{[EV 2]} |
Temp Return (TP) — turning point. |
|
{[EV 3]} |
Dry End — end of drying phase. |
|
{[EV 4]} |
First Crack Start. |
|
{[EV 5]} |
First Crack End. |
|
{[EV 6]} |
Second Crack Start. |
|
{[EV 7]} |
Second Crack End. |
|
{[EV 8]} |
Drop — beans dropped to cooling tray. |
|
{[EV 9]} |
Cool End — cooling complete. |
Status Byte (sid) Decoder
Every response begins with a status byte. Convert sid to 8-bit binary, then read the low 4 bits when the lowest bit of the high nibble is 0:
|
Command |
Description |
|---|---|
|
0000 |
IDLE |
|
0001 |
CHARGE |
|
0010 |
TP (Turning Point) |
|
0011 |
DRY END |
|
0100 |
FC (First Crack) |
|
0101 |
FC END |
|
0110 |
SC (Second Crack) |
|
0111 |
SC END |
|
1000 |
DROP |
|
1001 |
COOL END |
Typical Session Sequence
The handshake Artisan uses on connection, captured live from a real roaster:
|
Command |
Description |
|---|---|
|
{[PI]} |
Ping the roaster to verify connection. |
|
{[TU C]} |
Set the unit (C or F). |
|
{[SC AR]} |
Open an Artisan session — roaster returns its serial number. |
|
{[RD A0]} |
Poll for live data, repeated about every 1.5 seconds. |
|
{[CL AR]} |
Close the session when disconnecting. |
Notes
Polling interval for RD should be at least 1 second. Default 1.5 seconds. Repeated queries faster than 1 second are ignored.
The roaster responds to RD without requiring SC AR first, though using SC AR is the documented startup sequence.
Baud rate observed: 57600, 8 data bits, no parity, 1 stop bit, no flow control.
CP210x VID:PID is 10C4:EA60.
Kaliedo Tablet USB
Kaleido Roaster Communication Protocol
This project documents the reverse-engineered communication protocol used by Kaleido coffee roasters and provides the information needed to interface with the roaster using custom hardware and software.
Protocol Overview
Kaleido communicates with its controller over a UART serial connection using a proprietary variable-length protocol.
Serial configuration
-
Baud rate: 57,600
-
Format: 8N1
-
Communication: Bidirectional UART
-
Messages: Variable length
-
Message terminator: 0x77
-
Encoding: Session-based XOR key
During initialization, the controller and roaster exchange a handshake sequence. A session key is then obtained and used to XOR-encode and decode subsequent communication.
Initialization
The observed startup sequence includes:
FF
08 01 03 07 0F 1F 3F 7F
16 20
Following initialization, the communication transitions to XOR-encoded command and telemetry messages.
Numeric Encoding
Kaleido uses a custom representation for decimal digits before applying the XOR encoding:
| Digit | Value |
|---|---|
| 0 | 0x6B |
| 1 | 0x4B |
| 2 | 0x2B |
| 3 | 0x0B |
| 4 | 0x6F |
| 5 | 0x4F |
| 6 | 0x2F |
| 7 | 0x0F |
| 8 | 0x63 |
| 9 | 0x43 |
The resulting message is XORed with the current session key before being transmitted.
Known Telemetry
The protocol provides access to several important roaster parameters:
-
BT — Bean Temperature
-
ET — Environmental Temperature
-
SV — Temperature Set Value
-
Power — Heater output
-
Smoke — Exhaust/smoke fan
-
Drum — Drum control
Telemetry fields are identified within decoded messages using 0x23 field separators.
Known Controls
The reverse-engineered protocol allows control of:
-
Heater power: 0–100%
-
Exhaust/smoke fan: 0–100%
-
Drum: 0–100%
-
Temperature setpoint
-
Heating mode
-
Cooling system ON/OFF
The reference implementation translates Artisan-style commands such as OT1, OT2, IO3, SV, and CLDN into the corresponding Kaleido UART messages.
Bridge Architecture
A typical implementation is:
Artisan / Application → ESP32 → Kaleido UART Protocol → Roaster
The ESP32 acts as a protocol bridge, receiving easy-to-use commands from software, translating them into Kaleido messages, applying the session XOR encoding, and transmitting them to the roaster.
This makes it possible to integrate Kaleido roasters with custom controllers, roasting software, alternative Bluetooth interfaces, and other community-developed hardware without relying exclusively on the original control interface.
Current Status
The protocol has been sufficiently reverse engineered to:
-
Read BT and ET
-
Read current heater, fan, drum, and SV values
-
Set heater power
-
Set exhaust/smoke fan
-
Control drum output
-
Set temperature SV
-
Start/stop cooling
-
Emulate portions of the original Kaleido controller communication
-
Interface the roaster with external roasting software
Further protocol analysis may reveal additional commands, operating states, alarms, configuration parameters, and model-specific differences.