Skip to content

Sensor sketches

Firmware samples live in the repo:

sketches/

Each sketch POSTs to your push-device ingest URL. On Dashboard → Devices, create a push device and use Download Arduino .ino / MicroPython .py / CircuitPython code.py / Zephyr main.c / CH32V main.c / AVR main.S / Teensy 4.1 .ino / PIC18 main.c / Particle Boron .ino (URL or path pre-filled). Or copy a sketch from this folder and set INGEST_URL / INGEST_PATH yourself. Always set Wi-Fi credentials (ESP / Pico), INGEST_HOST / INGEST_PATH (Ethernet), or a Particle Console webhook (cellular) before flashing.

Matrix

PathSensorStack
arduino/ds18b20_ingestDS18B20 (1-Wire)Arduino: ESP32, ESP8266, Pico W (+ PlatformIO on ESP)
arduino/ds18b20_wifimanagerDS18B20 + WiFiManagerArduino / ESP32
arduino/ethernet_dht22_ingestDual DHT22 + W5100Uno Ethernet (HTTP push + LAN pull)
arduino/door_contact_ingestDoor reedArduino / ESP32
arduino/leak_contact_ingestLeak padsArduino / ESP32
arduino/power_sense_ingestPower senseArduino / ESP32
arduino/max31855_ingestMAX31855 thermocoupleArduino: ESP32 / Pico W
arduino/max6675_ingestMAX6675 thermocoupleArduino: ESP32 / Pico W
micropython/ds18b20_ingest.pyDS18B20MicroPython ESP32 or Pico W
micropython/max31855_ingest.pyMAX31855MicroPython ESP32
circuitpython/ds18b20_ingest.pyDS18B20CircuitPython Pico W / Pico 2 W
zephyr/ds18b20_ingestDS18B20Zephyr C / STM32 Nucleo-F767ZI
wch/ch32v307_ds18b20_ingestDS18B20WCHNET C / CH32V307V-EVT
avr/atmega328_w5100_ds18b20DS18B20GNU AVR assembly / ATmega328P + W5100
teensy/teensy41_ds18b20_ingestDS18B20Teensyduino + QNEthernet / Teensy 4.1
microchip/pic18f67j60_ds18b20_ingestDS18B20MPLAB X MLA TCP/IP / PIC18F67J60
particle/boron_ds18b20_ingestDS18B20Particle Boron LTE + Console webhook

What they send

Arduino DS18B20 / MAX6675 samples use flat keys:

json
{ "temp1": 68.4, "rssi": -58 }

MAX31855 samples use typed sensors:

json
{
  "sensors": [
    { "key": "tc1", "kind": "temperature", "value": 412.0, "unit": "F" }
  ],
  "rssi": -58
}

Add matching sensor keys on Dashboard → Devices after the first POST.

Uno Ethernet samples send the classic temp object (0 / 1 / avg with c, f, h) instead of flat temp1.

Checklist

  1. Buy ESP32 + waterproof DS18B20 — parts list — or a Pico W — or a Nucleo-F767ZI — or a CH32V307V-EVT — or AVR assembly on Uno + W5100 — or Teensy 4.1 — or PIC18F67J60 — or Particle Boron cellular
  2. Create push device on Devices; download pre-filled sketch (or paste INGEST_URL)
  3. Edit WIFI_* only
  4. Flash; watch serial (115200) for POST 200
  5. Open Home on thermaltrace.dev
  6. Set freeze alerts under Dashboard → Alerts

Uno + Ethernet shield

The W5100 cannot TLS. Use ethernet_dht22_ingest (DHT22 on A4/A5, HTTP POST + optional LAN pull on port 80) and run push_https_forward.py on a LAN host:

bash
python3 sketches/relay/push_https_forward.py --listen 0.0.0.0:8080 \
  --upstream https://thermaltrace.dev

Set INGEST_HOST to that machine and INGEST_PATH to /api/ingest/<your-key>.

Full garage stack

Ethernet + dual DHT22 + LCD firmware (separate repo):
arduino-network-json-temperature-sever

Wiring / LCD guides on the product site: About → Arduino · Pico W ingest · STM32 Zephyr · CH32V RISC-V · AVR assembly · Teensy 4.1 · PIC18 Ethernet · Cellular

App & product guides: thermaltrace.dev · This site: developer reference