STM32 Zephyr ingest

Push DS18B20 readings from an ST Nucleo-F767ZI using Zephyr C and onboard Ethernet. No Arduino IDE, no Python: west, ST-LINK, and the same LAN HTTPS relay as the Uno shield.

Close-up of white Cat-5e Ethernet cables with RJ45 connectors
Probe JSON usually leaves the LAN over Ethernet or a nearby relay, not the public internet directly. Photo: DiscDepotDundee.co.uk. CC BY-SA 4.0

ESP32 and Pico W cover Wi‑Fi. If you want a different silicon vendor and a toolchain that is neither Arduino nor Python, an ST Nucleo-F767ZI running Zephyr POSTs the same ingest JSON over onboard Ethernet. C, west, ST-LINK. The Arduino-compatible header is only a pinout: the firmware is not an Arduino sketch.

Native HTTPS on Zephyr means baking a CDN CA into the image, which breaks when the edge certificate chain rotates. This sample uses the same LAN HTTP→HTTPS relay as the Uno + W5100 path, so Cloudflare can change CAs without a reflash.

Parts

Parts for an STM32 Zephyr freeze probe
Part Why Buy
Nucleo-F767ZI Cortex-M7, onboard Ethernet MAC + PHY, ST-LINK debugger. No Wi‑Fi module. ST Nucleo-F767ZI · Amazon search
Waterproof DS18B20 Pipe / crawlspace probe. Data on Arduino D4 (PF14). Adafruit DS18B20 · Amazon
4.7kΩ resistor Pull-up from DS18B20 data to 3.3V. Do not power the probe from the 5V Arduino pin. Amazon 4.7k
Ethernet drop DHCP on your LAN. A Pi, NAS, or laptop runs the TLS relay. Any Cat5e patch cable to your switch.

Wiring

  • DS18B20 VDD → Nucleo 3.3V
  • DS18B20 GND → GND
  • DS18B20 data → Arduino D4 (STM32 PF14), 4.7k to 3.3V
  • RJ45 → LAN. ST-LINK USB for flash and 115200 serial.

Build and flash

  1. Open Dashboard → Devices and download Zephyr main.c (ingest path filled in), or copy the defines from the ingest callout.
  2. On a LAN host:
    python3 sketches/relay/push_https_forward.py --listen 0.0.0.0:8080 \
      --upstream https://thermaltrace.dev
  3. Set INGEST_HOST to that machine. Drop the downloaded file over src/main.c if you want the path baked in.
  4. From a Zephyr workspace:
    west build -b nucleo_f767zi path/to/sketches/zephyr/ds18b20_ingest
    west flash
  5. Serial 115200: dhcp ok, then POST 200. Sensor key temp1 imports on first POST.

Repo app: sketches/zephyr/ds18b20_ingest/ (prj.conf, D4 overlay, CMake).

Other STM32 boards

Any Zephyr Ethernet target can run the same C if you add a 1-Wire overlay for your GPIO. Nucleo-F429ZI and Nucleo-H743ZI are the usual cousins. A Blue Pill plus W5500 is C as well, but that is Cube HAL + ioLibrary, not this Zephyr app: use the LAN relay the same way.

Why not Nordic / TI first?

  • nRF52: Bluetooth or Thread, not native Wi‑Fi HTTPS.
  • nRF9160: LTE-M works, but a SIM and carrier plan is a worse first freeze kit than a garage Ethernet drop.
  • TI SimpleLink / NXP RW612: capable Wi‑Fi C SDKs, smaller hobbyist footprint than Nucleo + Zephyr.
  • CH32V307 is first-class now: WCHNET C + onboard Ethernet (QingKe RISC-V, same LAN TLS relay).

Related

Amazon buy links may include an Associates tag. Adafruit and other vendor links are direct (Adafruit does not run an affiliate program). ThermalTrace may earn a commission from qualifying Amazon purchases at no extra cost to you.

FAQ

Can an STM32 post to ThermalTrace without Arduino or Python?
Yes. The Nucleo-F767ZI sample is Zephyr C: west build, ST-LINK flash, onboard Ethernet. DS18B20 on Arduino D4 (PF14). HTTP to the LAN TLS relay, same as the Uno W5100 path. Guide: thermaltrace.dev/about/stm32-zephyr-ingest.

Why not HTTPS straight from the Nucleo?
You can, with Zephyr mbedTLS and a baked-in CA. ThermalTrace sits behind Cloudflare, so that CA can change. The LAN relay keeps the MCU on HTTP and lets the Pi/NAS handle TLS, which is the same pattern as Uno Ethernet.

Is the Arduino header running Arduino firmware?
No. D4 is only the Nucleo’s Arduino-layout pin (PF14). The firmware is Zephyr C, not an .ino.