ThermoWorks Smoke X2/X4 Receiver

Open-source ESP32 + LoRa firmware to receive ThermoWorks Smoke X2/X4 wireless thermometer signals

What it does

Original ThermoWorks Smoke X2 receiver
Included Smoke X2 receiver

The ThermoWorks Smoke X2 and Smoke X4 are excellent BBQ / smoker thermometers — accurate, long RF range, long battery life, no app required. But the included receiver only shows the current probe readings. There's no way to record history, set alerts beyond the built-in alarm, or integrate with home automation.

This project turns a low-cost Heltec WiFi LoRa 32 board (~$15) into an additional, network-connected receiver that runs alongside the original Smoke X2/X4 receiver without interfering with it. All paired receivers continue to function normally.

Compatibility note: this firmware works with the ThermoWorks Smoke X2 and Smoke X4 only. It is not compatible with the original ThermoWorks Smoke or ThermoWorks Signals products — different RF protocols.

Screenshots

Built-in web UI showing temperature history
Built-in web UI
Home Assistant device card
Home Assistant view

How it works

Temperature readings flow via the LoRa RF signal from the Smoke X2/X4 base station to both the included receiver and to an ESP32+LoRa device. The latter publishes the data over MQTT (for Home Assistant or any other consumer) and serves it from a built-in web UI. All data is acquired, processed, and stored locally — no cloud dependency unless you choose (e.g., AWS IoT MQTT)

flowchart LR
  base <-->|LoRa RF| lora_sx12xx(SX12xx LoRa Transceiver)
  mqclient <--> mq
  mq <--> ha
  web <--> browser(Any web browser)

  subgraph ThermoWorks Smoke X2/X4
    Probes --> base(Base station) -->|LoRa RF| recv(ThermoWorks Receiver)
    Billows --> base
  end

  subgraph esp32 [ESP32+LoRa Smoke X Receiver]
    lora_sx12xx --> smoke_x_parser(Smoke X Parser)
    smoke_x_parser --> mqclient(MQTT client)
    smoke_x_parser --> web(HTTP server)
  end

  subgraph mqttb [MQTT Broker]
    mq(homeassistant topic)
  end

  subgraph Home Assistant
    mq_int
  end

  subgraph ha_dev [HA Device for X2/X4]
    e1(Binary sensor entities)
    e2(Sensor entities)
  end

  subgraph mq_int [MQTT Integration]
    ha(Auto discovery) --> e1
    ha(Auto discovery) --> e2
    ha_dev
  end
      

Compatible hardware

Any ESP32 board with a SPI-connected Semtech SX1276 or SX1262 LoRa transceiver operating in the 915 MHz ISM band will work. The supported and tested boards are:

Board ESP32 Chip LoRa Status
Heltec WiFi LoRa 32 V2 ESP32 SX1276 Tested
Heltec WiFi LoRa 32 V3 ESP32-S3 SX1262 Tested
Heltec WiFi LoRa 32 V4 ESP32-S3 SX1262 Untested — same ESP32 chip and GPIO as V3; use the V3 firmware
Plug a Heltec WiFi LoRa 32 board into USB, then: Your browser doesn't support WebSerial. Use a recent desktop version of Chrome, Edge, Brave, Arc, Opera, or Firefox, or follow the build-from-source instructions. WebSerial access was blocked. Make sure the page is loaded over HTTPS and that no other program is holding the serial port.

Auto-detects Heltec V2 (ESP32 + SX1276) vs V3 (ESP32-S3 + SX1262) and flashes the matching firmware. Requires a desktop browser with WebSerial support (Chrome / Edge / Brave / Arc / Opera / recent Firefox). Other ESP32 boards may work but may require configuring and building from source.

Can't use WebSerial? Download the merged binary for your board from the latest GitHub release and flash with esptool:

# Heltec V2 (ESP32 + SX1276)
python -m esptool --chip esp32 -b 460800 write_flash 0x1000 smoke-x-receiver-heltec-v2.bin

# Heltec V3 or V4 (ESP32-S3 + SX1262)
python -m esptool --chip esp32s3 -b 460800 write_flash 0x0 smoke-x-receiver-heltec-v3.bin

After flashing

Wi-Fi setup via Improv-Serial (PSK networks)

After flashing, the install dialog will offer to configure Wi-Fi directly from your browser using the Improv-Serial protocol. Enter your SSID and password; the device connects without rebooting and the dialog links you straight to the device web UI. This works with WPA2 and WPA3 personal (PSK) networks only.

AP-mode fallback (enterprise networks or skipped setup)

If your network uses WPA2/WPA3-Enterprise (EAP-TTLS), click Skip in the install dialog — Improv does not support enterprise credentials. The device will initialize its own Wi-Fi access point. This is also the case if you close the install dialog before completing Wi-Fi setup, you manually installed with esptool, or any time the device cannot reach its configured network. Join the device AP from your phone or laptop:

Navigate to http://192.168.4.1/wlan to enter your WPA2/WPA3-PSK or WPA2/WPA3-Enterprise credentials (identity, username, password, and optionally a CA certificate).

Once connected

Once on Wi-Fi, the device:

  1. Requests a DHCP address with the hostname smokex — the device IP address will be shown on the OLED display.
  2. Waits for a sync transmission from a Smoke X2 / X4 base station — put the base into pairing mode and the receiver will pair on the first burst.
  3. Begins receiving temperature transmissions (every ~30 s) and publishes them over MQTT (if enabled) and the web UI.

Full setup details — Smoke X pairing flow, MQTT URI / TLS configuration, Home Assistant auto-discovery setup — are in the project setup guide.