# 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.

[![image.png](https://skywiki.coffee/uploads/images/gallery/2026-05/scaled-1680-/hD8image.png)](https://skywiki.coffee/uploads/images/gallery/2026-05/hD8image.png)

### **Requirements**

**This is still in Beta and code is still being worked on. Please report any issues you have to our Community Discord.**

1. <div>[**ESP32-S3**:](https://www.amazon.com/Waveshare-Development-ESP32-S3FH4R2-Dual-Core-Processor/dp/B0CHYHGYRH/?_encoding=UTF8&pd_rd_w=r9sWT&content-id=amzn1.sym.255b3518-6e7f-495c-8611-30a58648072e%3Aamzn1.symc.a68f4ca3-28dc-4388-a2cf-24672c480d8f&pf_rd_p=255b3518-6e7f-495c-8611-30a58648072e&pf_rd_r=5B6XB3S76AN41GG53BPF&pd_rd_wg=jrSyV&pd_rd_r=0c2acad7-cc3f-40c5-8e89-116521cb0165&ref_=pd_hp_d_atf_ci_mcx_mr_ca_hp_atf_d)</div> Ensure you have the ESP32-S3 board and a USB cable.  
    <div>[![image.png](https://skywiki.coffee/uploads/images/gallery/2025-01/scaled-1680-/9Edimage.png)](https://skywiki.coffee/uploads/images/gallery/2025-01/9Edimage.png)</div>
2. <div>[Power Data Y Cable](https://www.amazon.com/dp/B07VVX257H?ref=ppx_yo2ov_dt_b_fed_asin_title&th=1)</div>  
    ![61Y25DfijwL._AC_SL1200_.jpg](https://m.media-amazon.com/images/I/61Y25DfijwL._AC_SL1200_.jpg)
3. 5v USB Power Source  
    [![image.png](https://skywiki.coffee/uploads/images/gallery/2026-05/scaled-1680-/GQ9image.png)](https://skywiki.coffee/uploads/images/gallery/2026-05/GQ9image.png)

1. **Binary File Link**:  
    [SnowBear](https://github.com/galangl/SkywalkerRoasterLab/blob/main/HiBean/BLE_host_v1.2z_Kaleido_SnowBear.bin)
2. **Browser**: Use Google Chrome or Microsoft Edge (supports Web Serial) <div>[ESPHome](https://web.esphome.io/)</div>

---

### **Steps**

#### **1. Download the Binary File**

1. Open the GitHub link: TBA
2. Click on the download raw file icon to download ![image.png](https://skywiki.coffee/uploads/images/gallery/2025-12/scaled-1680-/TJ8image.png)

---

#### **2. Open ESPHome Web**

1. Go to <div>[ESPHome Web](https://web.esphome.io/)</div> in your Chrome or Edge browser.
2. Make sure your ESP32-S3 is connected to your computer using a USB cable.

---

#### **3. Connect the ESP32-S3**

1. On the ESPHome Web page, click the **Connect** button.  
    ![image.png](https://skywiki.coffee/uploads/images/gallery/2025-01/scaled-1680-/CAdimage.png)
2. A pop-up will appear with available devices. Select the port for your ESP32-S3 and click **Connect**.  
    ![image.png](https://skywiki.coffee/uploads/images/gallery/2025-01/scaled-1680-/IV2image.png)

---

#### **4. Install the Binary File**

1. Once connected, click **Install**.  
    ![image.png](https://skywiki.coffee/uploads/images/gallery/2025-01/scaled-1680-/We7image.png)
2. Choose **File** when prompted
3. In the file selection dialog, locate and select the BLE\_host\_v1.2z\_Kaleido\_SnowBear.bin bin file you downloaded earlier.  
    ![image.png](https://skywiki.coffee/uploads/images/gallery/2025-01/scaled-1680-/xjHimage.png)
4. Click **Install** to start the flashing process.
5. ![image.png](https://skywiki.coffee/uploads/images/gallery/2025-01/scaled-1680-/m2iimage.png)

---

#### **5. Flash the Firmware**

- ESPHome Web will erase the existing firmware and flash the BLE\_host\_v1.2z\_Kaleido\_SnowBear.bin binary.  
    ![image.png](https://skywiki.coffee/uploads/images/gallery/2025-01/scaled-1680-/E4rimage.png)
- The flashing process may take a few minutes. Wait for it to complete.
- After successful installation, a success message will appear.  
    ![image.png](https://skywiki.coffee/uploads/images/gallery/2025-01/scaled-1680-/JDKimage.png)

---

### **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):**
        
        
        1. Hold down the **BOOT** button.
        2. While holding BOOT, press and release the **RESET** button.
        3. Continue holding BOOT for a second, then release it.

1. 1. **Unplug and replug while holding the BOOT button:**
        
        
        1. Disconnect the ESP32-S3 from power (USB).
        2. Press and hold the **BOOT** button.
        3. While holding BOOT, plug the USB back in.
        4. Once connected, release the BOOT button.

- Let me know if you encounter issues or need further help!  
      
    BIG Thank you to Bear of the Skywalker Community Discord and Will\_Z for getting this option to work.

# Kaliedo Protocol

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

<div dir="ltr" id="bkmrk-command-description-" style="text-align:left;"><table><colgroup><col style="width:213px;"></col><col style="width:411px;"></col></colgroup><thead><tr><th scope="col">Command

</th><th scope="col">Description

</th></tr></thead><tbody><tr><td>{\[PI\]}

</td><td>Ping — connection test. Returns {sid}.

</td></tr><tr><td>{\[SC AR\]}

</td><td>Start Artisan session. Returns {sid,SN:xxxxxxxx}.

</td></tr><tr><td>{\[SC CP\]}

</td><td>Start Cropster session. Returns {sid,SN:xxxxxxxx}.

</td></tr><tr><td>{\[CL AR\]}

</td><td>Close Artisan session.

</td></tr><tr><td>{\[CL CP\]}

</td><td>Close Cropster session.

</td></tr><tr><td>{\[TU C\]}

</td><td>Set temperature unit to Celsius.

</td></tr><tr><td>{\[TU F\]}

</td><td>Set temperature unit to Fahrenheit.

</td></tr></tbody></table>

</div># Reading Data

<div dir="ltr" id="bkmrk-command-description--1" style="text-align:left;"><table><colgroup><col style="width:213px;"></col><col style="width:411px;"></col></colgroup><thead><tr><th scope="col">Command

</th><th scope="col">Description

</th></tr></thead><tbody><tr><td>{\[RD A0\]}

</td><td>Read main parameters (BT, ET, AT, HP, FC, RC, AH, TS).

</td></tr><tr><td>{\[RD A1\]}

</td><td>Read main parameters plus heating status (adds HS field).

</td></tr></tbody></table>

</div>## 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

<div dir="ltr" id="bkmrk-command-description--2" style="text-align:left;"><table><colgroup><col style="width:213px;"></col><col style="width:411px;"></col></colgroup><thead><tr><th scope="col">Command

</th><th scope="col">Description

</th></tr></thead><tbody><tr><td>{\[HS 0\]}

</td><td>Stop heating.

</td></tr><tr><td>{\[HS 1\]}

</td><td>Start heating.

</td></tr><tr><td>{\[HP n\]}

</td><td>Set heater power n% (step 5, range 0-100).

</td></tr><tr><td>{\[HP UP\]}

</td><td>Step heater up by 5%.

</td></tr><tr><td>{\[HP DW\]}

</td><td>Step heater down by 5%.

</td></tr><tr><td>{\[TS n.n\]}

</td><td>Set target temperature (0-250 °C / 32-482 °F).

</td></tr><tr><td>{\[AH 0\]}

</td><td>Disable auto-heat (manual power mode).

</td></tr><tr><td>{\[AH 1\]}

</td><td>Enable auto-heat (device PID controls heat to TS).

</td></tr></tbody></table>

</div># Fan and Drum

<div dir="ltr" id="bkmrk-command-description--3" style="text-align:left;"><table><colgroup><col style="width:213px;"></col><col style="width:411px;"></col></colgroup><thead><tr><th scope="col">Command

</th><th scope="col">Description

</th></tr></thead><tbody><tr><td>{\[FC n\]}

</td><td>Smoke fan n% (step 5, range 0-100).

</td></tr><tr><td>{\[FC UP\]}

</td><td>Step fan up by 5%.

</td></tr><tr><td>{\[FC DW\]}

</td><td>Step fan down by 5%.

</td></tr><tr><td>{\[RC n\]}

</td><td>Drum roll n% (step 10, range 0-100).

</td></tr><tr><td>{\[RC UP\]}

</td><td>Step drum up by 10%.

</td></tr><tr><td>{\[RC DW\]}

</td><td>Step drum down by 10%.

</td></tr></tbody></table>

</div># Cooling

<div dir="ltr" id="bkmrk-command-description--4" style="text-align:left;"><table><colgroup><col style="width:213px;"></col><col style="width:411px;"></col></colgroup><thead><tr><th scope="col">Command

</th><th scope="col">Description

</th></tr></thead><tbody><tr><td>{\[CS 0\]}

</td><td>Cooling off.

</td></tr><tr><td>{\[CS 1\]}

</td><td>Cooling on.

</td></tr></tbody></table>

</div># Roast Event Markers

Sends a user-tagged roast event to the device. The device synchronizes the event to its embedded control panel.

<div dir="ltr" id="bkmrk-command-description--5" style="text-align:left;"><table><colgroup><col style="width:213px;"></col><col style="width:411px;"></col></colgroup><thead><tr><th scope="col">Command

</th><th scope="col">Description

</th></tr></thead><tbody><tr><td>{\[EV 1\]}

</td><td>Charge — beans loaded into drum.

</td></tr><tr><td>{\[EV 2\]}

</td><td>Temp Return (TP) — turning point.

</td></tr><tr><td>{\[EV 3\]}

</td><td>Dry End — end of drying phase.

</td></tr><tr><td>{\[EV 4\]}

</td><td>First Crack Start.

</td></tr><tr><td>{\[EV 5\]}

</td><td>First Crack End.

</td></tr><tr><td>{\[EV 6\]}

</td><td>Second Crack Start.

</td></tr><tr><td>{\[EV 7\]}

</td><td>Second Crack End.

</td></tr><tr><td>{\[EV 8\]}

</td><td>Drop — beans dropped to cooling tray.

</td></tr><tr><td>{\[EV 9\]}

</td><td>Cool End — cooling complete.

</td></tr></tbody></table>

</div># 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:

<div dir="ltr" id="bkmrk-command-description--6" style="text-align:left;"><table><colgroup><col style="width:213px;"></col><col style="width:411px;"></col></colgroup><thead><tr><th scope="col">Command

</th><th scope="col">Description

</th></tr></thead><tbody><tr><td>0000

</td><td>IDLE

</td></tr><tr><td>0001

</td><td>CHARGE

</td></tr><tr><td>0010

</td><td>TP (Turning Point)

</td></tr><tr><td>0011

</td><td>DRY END

</td></tr><tr><td>0100

</td><td>FC (First Crack)

</td></tr><tr><td>0101

</td><td>FC END

</td></tr><tr><td>0110

</td><td>SC (Second Crack)

</td></tr><tr><td>0111

</td><td>SC END

</td></tr><tr><td>1000

</td><td>DROP

</td></tr><tr><td>1001

</td><td>COOL END

</td></tr></tbody></table>

</div># Typical Session Sequence

The handshake Artisan uses on connection, captured live from a real roaster:

<div dir="ltr" id="bkmrk-command-description--7" style="text-align:left;"><table><colgroup><col style="width:213px;"></col><col style="width:411px;"></col></colgroup><thead><tr><th scope="col">Command

</th><th scope="col">Description

</th></tr></thead><tbody><tr><td>{\[PI\]}

</td><td>Ping the roaster to verify connection.

</td></tr><tr><td>{\[TU C\]}

</td><td>Set the unit (C or F).

</td></tr><tr><td>{\[SC AR\]}

</td><td>Open an Artisan session — roaster returns its serial number.

</td></tr><tr><td>{\[RD A0\]}

</td><td>Poll for live data, repeated about every 1.5 seconds.

</td></tr><tr><td>{\[CL AR\]}

</td><td>Close the session when disconnecting.

</td></tr></tbody></table>

</div># 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.