🌱 FarmSense Sensor — Flash & Configure

Flash a FarmSense soil-sensor node and configure it — straight from your browser.

This flashes a FarmSense soil-sensor node that reports soil moisture and temperature at 6 inch, 12 inch, and 18 inch depths and relays those readings to the observer over the mesh. Two sensor stacks are supported, chosen by board: the RAK4631 build reads RAK12035 WisBlock probes (individually I2C-addressed), and the Heltec V4 build reads Adafruit STEMMA capacitive probes through a TCA9548A I2C mux.

Pick the card for your board below. The Heltec V4 flashes one-click in the browser (use Chrome or Edge on a desktop); the RAK4631 flashes by dragging a file onto a USB drive. Connect the board with a USB-C data cable (not charge-only).

1. Flash — Heltec V4 (browser)

Heltec WiFi LoRa 32 V4 (ESP32-S3)

One-click install straight from this page. Connect the board over USB-C and click Install — the browser flashes the sensor firmware.

Use Chrome or Edge on desktop (Web Serial isn't supported on Firefox, Safari, or mobile). If flashing fails with “failed to initialize,” hold the board's BOOT/PRG button while clicking Install, or try the other serial port in the picker. If the device stays in the boot/DFU state after flashing, unplug and replug it to run the firmware. Large writes can take up to ~30 s.

2. Flash — RAK4631 (nRF52840)

One-click update (over USB)

Flashes the RAK entirely over USB from the browser — no buttons, no drag-and-drop. Connect the RAK first (step 4 “Connect”), then click below. The board drops into DFU, you pick the DFU port once when prompted, and the page flashes it and reboots into the new firmware. Use Chrome or Edge.

Manual alternative — UF2 drag-and-drop

The RAK also flashes by copying a UF2 file onto its bootloader drive (needs the RESET button, so not usable once enclosed).

⬇ Download firmware-sensor.uf2

  1. Connect the RAK4631 to your computer with a USB-C data cable.
  2. Double-tap the RESET button on the board (two quick presses). A USB drive appears — named something like RAK4631 or FTHR….
  3. Drag firmware-sensor.uf2 (downloaded above) onto that drive.
  4. The board copies the file, then reboots automatically running the new firmware. The drive disappears when it's done — that's expected.

To configure the RAK, use “Connect” below (step 4) — same as the Heltec. Once it's running the firmware, the RAK shows up as a USB serial port, so you set its name, radio, calibration, etc. from the form here (UF2 is only for flashing).

Advanced alternative: if you prefer a DFU update over the USB drive, download firmware-sensor.zip and flash it with a nRF DFU tool (e.g. adafruit-nrfutil / the WisBlock DFU flow). Most users should just use the UF2 above.

3. Wiring

RAK4631 — RAK12035 probes (no mux)

Each RAK12035 is its own I2C device. Wire all three to the RAK's I2C bus in parallel (shared SDA/SCL/power); no mux. They report soil moisture and temperature. Every unit ships at 0x20, so re-address the 12in and 18in probes first (step 4 → Assign sensor address), one at a time.

SignalRAK4631 pin
I2C SDA (all probes)GPIO13
I2C SCL (all probes)GPIO14
Power3V3 → VDD, GND → GND
6 inch probe address0x20
12 inch probe address0x21 (assign)
18 inch probe address0x22 (assign)

Heltec V4 — STEMMA probes via TCA9548A mux

All three STEMMA probes share I2C address 0x36; the TCA9548A mux (address 0x70, straps A0/A1/A2 → GND) selects one at a time. Wire the mux to the board, then each probe to a mux channel.

SignalHeltec V4 pin
I2C SDA → mux SDAGPIO41
I2C SCL → mux SCLGPIO42
Power3V3 → VIN, GND → GND
Mux ch 0 / 1 / 26in / 12in / 18in STEMMA probe @ 0x36

4. Connect & advertise

After flashing, connect over USB, then advertise to announce the sensor on the mesh — this is how the observer discovers it.

Not connected

Configure the sensor

Set the sensor's name, install location, mesh radio, and per-probe moisture calibration. Connect the device above to edit.

Password a MeshCore client logs in with to manage this sensor / read telemetry (default password). Leave blank to keep the current one.

Where this sensor is installed — advertised on the mesh. Leave blank/0 if unknown.

How often the sensor beacons its presence. Uncheck the box above to advertise only on demand.

Testing only. When on, any MeshCore client (the app, the observer) can read this sensor's telemetry without logging in — that's what flips “Allow Telemetry requests” to YES in the app. Turn it off to require the admin/guest password again.

—

The device has no battery-backed clock. This button sets it from your computer for bench use. Reading timestamps use this clock.

A radio change below needs a device reboot to take effect.

MeshCore radio

All nodes on the mesh must use the same radio settings.

Probe diagnostics

Run this first during bring-up. It scans the I2C bus for the soil sensors and re-detects any wired after boot (no reboot needed). If a probe reads false, fix its wiring/address and scan again.

Soil-moisture calibration

For each probe, enter the raw capacitive reading in dry air and in water. Use “Read raw values now” with a probe held in air (then in water) to see the current reading and fill these in. 0% moisture = air reading, 100% = water reading.

DepthAir raw (0%)Water raw (100%)Current
6 in —
12 in —
18 in —

Save applies everything live — name, calibration, location, advert, guest telemetry, password. Only a radio change (freq/BW/SF/CR) needs a reboot; if you changed one, Save reboots automatically and you reconnect once it's back. So you can calibrate air, Save, then water, Save — no reboot in between.

Reboot and Programming mode work entirely over USB — no button on the board needed, so they work with the node enclosed. Programming mode (RAK4631) puts it into UF2 update mode: it disconnects and re-appears as a USB drive, then you drag firmware-sensor.uf2 (step 2) onto it to reflash.

Serial log — idle

Live output from the device — boot log, mesh traffic, readings. Connect above, then press the board's RST button to capture the boot log. No separate serial monitor needed.

Connect the device to see live output…

FarmSense sensor