Board renders

Carrier Board v4

Chip-down DOIT ESP32-S3 (bottom side), dual LM2596S buck regulators, TPS1H100B high-side load switches. 2-layer FR4, 60 × 80 mm, ENIG finish. Designed in EasyEDA, manufactured and assembled by JLCPCB. Gerbers, BOM with LCSC part numbers, and PickAndPlace included in the download.

Sankhya Intelligence Carrier Board v4 — front 3D render showing dual LM2596S bucks, USB-A, USB-C, BOOT/RST buttons, terminal block, dual barrel jacks
Sankhya Intelligence Carrier Board v4 — back 3D render showing chip-down ESP32-S3 module footprint, TPS1H100B load switches, INA219, SP3485, USBLC6 ESD
Sankhya Intelligence Carrier Board v4 — top PCB photo on green ENIG finish showing component placement
Sankhya Intelligence Carrier Board v4 — back PCB photo showing DOIT ESPS3-32E-N16R8 ESP32-S3 module installed
Sankhya Intelligence Carrier Board v4 — full schematic EasyEDA REV 1.0 showing dual bucks, TPS1H100B switches, INA219, SP3485, USB-C, DOIT ESP32-S3 module

Physical specs

Form factor: 60 × 80 mm, 2-layer FR4 1.6 mm, ENIG finish, RoHS compliant

Weight: ~22g (PCB only; ~400g with battery and dongle)

Operating temperature: −10°C to +70°C (extended range variants available on request)

Enclosure: 200 × 155 × 80 mm IP67 ABS weatherproof + cable glands + silicone sealant

Power system

Input 1 (DC1): 12V LiFePO₄ battery (12.8V nominal, 6Ah, internal BMS) via 5.5mm DC barrel jack

Input 2 (DC2): 12V solar panel (20W, Voc ≤22V, Isc ≤1.5A) via 5.5mm DC barrel jack, with SS54B Schottky blocking diode

Inrush protection: NTC 10D-9 inrush current limiter on 12V input rail

5V buck (U1): LM2596S-5.0 (TI), 12V → 5V, 3A continuous — powers USB-A dongle path and USB-C input

3.3V buck (U2): LM2596S-3.3, 12V → 3.3V, 3A continuous — powers ESP32 module, SP3485, and INA219

3.3V′ LDO (AP1K): AP2112K-3.3 from 5V rail — clean isolated rail for USB-C CC1/CC2 resistors

Autonomy: 15–20 days at midnight-to-sunrise monsoon with zero sun

Battery monitor (U5): INA219AIDR on 10mΩ shunt (R18); reports voltage, current, and consumed power over I²C with explicit pullups (R4/R5 4.7kΩ)

TVS protection: SMBJ15A on 12V input rails; USBLC6-2SC6 on USB D+/D−

Load switching (v3 fix)

U8 — Sensor 12V switch: TPS1H100BQPWPRQ1 integrated high-side switch, IN=IO19, drives sensor terminal 12V rail. Built-in overcurrent protection and thermal shutdown.

U7 — USB-A 5V switch: TPS1H100BQPWPRQ1 integrated high-side switch, IN=IO20, drives USB-A 5V rail. Same diagnostic and protection features.

Why TPS1H100B: v3 used AO3400A N-channel MOSFETs as high-side switches, which require gate voltage above the 12V drain — impossible from a 3.3V ESP32 GPIO without bootstrap. The TPS1H100B has an internal charge pump, accepts 3.3V logic directly, and was the correct part for this application from the start.

MCU & radio

Module (U11): DOIT ESPS3-32E-N16R8 — chip-down castellated stamp module, soldered to the bottom side of the carrier board. No socket, no dev board.

Processor: Espressif ESP32-S3 dual-core at 240 MHz, RISC-V coprocessor

Flash / PSRAM: 16 MB / 8 MB on-module

WiFi: 802.11b/g/n, −10 to +20 dBm TX, connects to TP-Link repeater mesh or local hotspot

Antenna: External U.FL 2.4 GHz on the right side of the module; 5 dBi omnidirectional

Sleep current: 10 μA in deep sleep (RTC on, PSRAM retained)

Why chip-down: Socketed dev boards in v1–v3 relied on friction-fit pin contact, which failed under sustained vibration in field deployment. Castellated SMD pads are mechanically equivalent to any other component.

Sensor interface

Bus: RS-485 Modbus RTU (half-duplex), 4800–9600 baud, 8/N/1

Transceiver (U4): SP3485EN-L/TR (MaxLinear) with DE/RE# tied and driven by IO8

Terminal (TB_1): 3-pin 3.5mm screw terminal — A / B / GND

Termination: 120 Ω DNP pad available for cable runs over 10 m

Sensor capacity: Up to 3 sensors per node on the shared bus via Modbus slave IDs; more via daisy-chain

Sensor power: Switched 12V via TPS1H100B U8, controlled by IO19 for power-down cycles

Sensor reading interval: Configurable 1–60 minutes (firmware selectable, typically 1 hour)

4G connectivity

Dongle: Any USB-A 4G LTE modem with tethering (tested: Quectel EC200U-EU, Huawei)

Power path: USB-A 5V from LM2596S U1 (5V buck), switched via TPS1H100B U7 (IO20)

WiFi hotspot: Dongle creates SSID; TP-Link repeater extends to all other nodes

Data plan: One SIM card, shared across entire orchard via WiFi mesh (single point of failure, by design)

Bandwidth: ~5 MB/month per 50 nodes with 1-hour reading interval + AI chat

Firmware & updates

Base: Arduino SDK 2.x, ESP32 board package 2.0.18

Flash method: USB-C Web Serial API at flash.sankhyafarms.com (no IDE, no drivers)

OTA updates: Cloudflare Workers `/ota/check` endpoint; nodes auto-update on boot if newer version exists

Firmware size: ~550 KB (Haiku AI inference offline on node via TFLite, fallback to server)

Rollback: ESP32 dual-OTA partition with automatic revert on failed boot

Communications

Reporting: POST to Cloudflare Worker endpoint; includes sensor readings, battery voltage, WiFi RSSI, uptime

Report format: JSON gzip-compressed for metered 4G

Cadence: 1 report per sensor reading cycle (typically 1/hour); optional longer intervals in battery-saver mode

Latency: Sub-second from WiFi to Cloudflare D1 database (no serial polling delay)

Data retention: 2 years of historical sensor data + images + agronomic insights in Sankhya dashboard

Deployment notes

Installation: Weatherproof enclosure with cable glands for barrel jack, RS-485 sensor terminals, and antenna feedthrough. Mounting: wall-mount or pole-mount at orchard periphery for WiFi coverage and sunlight.

Sensors: ZTS-3002 7-in-1 (moisture, EC, pH, temp), JXC-LS-RS232 or equivalent RS-485 Modbus. See sensor compatibility list →

Sunlight: 20W panel provides 15–20 days monsoon reserve; plan for 4–6 hours peak sun/day at the deployment site (adjust for local climate)

Mesh network: TP-Link TL-WR845N repeater covers 4+ nodes per repeater in open orchard with line-of-sight to a master node running 4G hotspot

Enclosure sealing: Cable glands + silicone sealant prevent water ingress during irrigation spray. Inspect quarterly for mold/corrosion in monsoon.

For advanced debugging or custom sensor configurations, open a support ticket at sankhyafarms.com/contact


Interactive component map

What's on the board — and why.

Click any highlighted component to learn what it does and why it was chosen. Every part was selected for unattended field deployment in an agricultural environment.

DC1 Battery DC2 Solar NTC1 inrush LM2596S 12V → 5V U1 LM2596S 12V → 3.3V U2 AP2112K 5V → 3.3V′ USB-C CC USB-C program INA219 10mΩ shunt U5 SP3485 RS-485 U4 TPS1H100B U8 · Sensor 12V · IN=IO19 TPS1H100B U7 · USB-A 5V IN=IO20 USBLC6 ESD SMBJ15A TVS U.FL ant. DOIT ESPS3-32E-N16R8 ESP32-S3 · 16MB Flash · 8MB PSRAM chip-down · bottom side · U11 BOOT RST LED IO16 TB_1 A / B / GND 3.5mm RS-485 USB-A 4G dongle U3 · aux 680μF C1·C3·C5 33μH L1·L2 V4 CERN-OHL-P v2 ← click any component →
Click any component on the board to learn what it does and why it was chosen for unattended field deployment.

Diagram is a schematic representation. For exact component placement see PCB layout tab above.


Enclosure planning

How big is the assembled unit?

The PCB is compact but the battery and 4G dongle add significant volume. Plan your weatherproof enclosure before ordering. We use a 200 × 155 × 80 mm waterproof ABS enclosure with cable glands, sealed with silicone sealant.

Carrier Board v4 60 × 80 mm DOIT ESP32-S3 4G LTE Dongle ~105 × 35 mm LiFePO₄ Battery ~150 × 60 × 35 mm 12.8V / 6000 mAh MINIMUM ENCLOSURE ≥ 200 mm wide ≥ 155 mm We use: 200 × 155 × 80 mm ABS weatherproof enclosure + cable glands + silicone Depth: ≥ 80 mm (barrel jack + wiring + cable glands) PCB / fixed Battery / dongle Enclosure boundary

Pin assignments

GPIO — locked by PCB routing

These are fixed by the copper traces. Your firmware must use these exact GPIO numbers — or use flash.sankhyafarms.com which generates correct firmware automatically for your sensor selection.

FunctionGPIOConnected to
RS-485 RX (RO)IO18SP3485EN receiver output → ESP32 UART RX
RS-485 TX (DI)IO17ESP32 UART TX → SP3485EN data input
RS-485 Direction (DE/RE#)IO8SP3485EN DE + RE# tied together — HIGH=transmit
Sensor 12V switchIO19TPS1H100B U8 IN — HIGH = sensor power ON
USB-A 5V switchIO20TPS1H100B U7 IN — HIGH = dongle power ON
INA219 SDAIO9Battery monitor I²C data (with 4.7kΩ pullup)
INA219 SCLIO10Battery monitor I²C clock (with 4.7kΩ pullup)
Status LEDIO16Blue 0201 LED via R12 330Ω current limit
BOOT strappingIO0BOOT button pulls LOW to enter flash mode
UART0 TX (debug / programming)GPIO43USB-C serial console
UART0 RX (debug / programming)GPIO44USB-C serial console

Platform capabilities

What one node can do.

The board is the edge. The intelligence lives server-side on Cloudflare's global edge and compounds with every season of data.

📡
Up to 3 sensors per node
Three RS-485 terminal blocks wired in parallel — daisy-chain sensors without splicing. Each sensor has its own Modbus slave ID. Mix soil EC/pH/moisture, ambient temperature, or any RS-485 Modbus device. See compatible sensor list →
🌐
WiFi mesh — one SIM, whole orchard
One 4G LTE dongle in one node creates a WiFi hotspot. A TP-Link repeater extends coverage across all irrigation zones. Every other node connects as a WiFi client — one SIM card, one data plan, covers the whole orchard.
☀️
Solar + LiFePO₄ — 15–20 day reserve
20W solar panel charges a 12.8V LiFePO₄ battery with internal BMS. No separate charge controller needed. Deep sleep between hourly reading cycles provides 15–20 days of monsoon autonomy with zero sun exposure.
🔄
Over-the-air firmware updates
Nodes query a Cloudflare Worker on each wake cycle. Updates arrive as signed presigned URLs and flash via esp_https_ota() with automatic rollback on failure. Deployed nodes never need physical access for firmware updates.
🌳
Per-tree AI agronomic intelligence
Sensor data feeds the Sankhya Intelligence platform — a dual-model AI stack (Haiku for fast auditing, Sonnet for deep analysis) generating per-tree fertigation prescriptions from longitudinal soil history, not generic crop tables.
Browser-based firmware flashing
No IDE, no USB drivers. flash.sankhyafarms.com uses the Web Serial API — plug in via USB-C, select your sensor configuration from the dropdown, and flash in under a minute. Works in Chrome on any operating system.

Design history

How we got to v4.

Each version corrected a confirmed defect discovered in field deployment. v4 is the first revision with no known electrical faults. Prior versions are documented here in the spirit of open hardware — but only v4 should be manufactured.

Version Architectural change Defects shipped
v1
archived
Initial board. Socketed Waveshare ESP32-S3-Nano dev board · MAX485 RS-485 transceiver · single LM2596S 12V→5V buck · single DC input · three parallel RS-485 terminal blocks · AO3400A N-channel MOSFET load switches. View archived v1 page →
v2 Added INA219 battery monitor on I²C · second DC input for solar with separate Schottky blocking diode · refined RS-485 routing.
v3 Consolidated AO3400A N-channel MOSFETs as high-side switches for sensor 12V and USB-A 5V power gating · added 3.3V output rail from buck. Three confirmed defects shipped:
  1. SS34 input diode D1 installed reversed — killed the 5V rail entirely
  2. INA219 missing I²C pullup resistors — battery monitor completely non-functional
  3. N-channel MOSFETs as high-side switches without bootstrap — cannot turn on from 3.3V GPIO, unfixable in firmware
v4 ← current
production
Chip-down DOIT ESPS3-32E-N16R8 ESP32-S3 module (castellated, U.FL antenna) · TPS1H100B integrated high-side switches with internal charge pump replace MOSFETs · explicit I²C pullups on INA219 · dual LM2596S bucks (5V + 3.3V) · SP3485EN replaces MAX485 · AP2112K-3.3 housekeeping LDO for USB-C CC channel · NTC inrush limiter · USBLC6 ESD protection · SS54B Schottky on both DC inputs. All three v3 defects corrected. No known electrical faults.

Ordering guide — JLCPCB

How to order your own boards.

The download contains everything JLCPCB needs for a bare PCB or fully assembled (PCBA) order. A video walkthrough is coming — follow these steps in the meantime.

01

Download and extract the zip

Download Sankhya-v4.zip and extract it. Inside you will find three files: Gerber_V4-ESP32_PCB_V4-ESP32_2026-05-19.zip (the inner Gerbers), BOM_V4.csv, and PickAndPlace_V4.csv.

02

Upload the inner Gerbers zip to JLCPCB

Go to jlcpcb.com → Quote Now → upload the inner Gerber_V4-ESP32...zip (not the outer one). JLCPCB auto-detects board dimensions as 60 × 80 mm. Select: 2 layers, FR4, 1.6 mm thickness, ENIG surface finish, green soldermask, your preferred quantity.

ENIG is specified instead of HASL for better coplanarity on the 0.65 mm pitch TPS1H100B HTSSOP-14 pads and the 0.5 mm pitch USB-C SMD pads. 5 boards typically cost under $20 + shipping with ENIG. Minimum order is 5 pieces.

03

Enable PCB Assembly (PCBA) — recommended for v4

Toggle PCB Assembly on the same order page. Upload BOM_V4.csv and PickAndPlace_V4.csv when prompted. JLCPCB will source and solder all SMD components from LCSC, including the DOIT ESPS3-32E-N16R8 chip-down ESP32-S3 module on the bottom side. Through-hole parts (DC barrel jacks, TB_1 screw terminal, USB-A port) are not assembled by PCBA — you solder those yourself.

Unlike v1, v4 has no socketed dev board step — the ESP32-S3 module is castellated and assembled by JLC. When the boards arrive, the digital subsystem is already populated and tested.

04

Solder through-hole parts and flash firmware

Hand-solder the two DC barrel jacks, the TB_1 3.5mm screw terminal, the USB-A port, and the two tactile buttons (BOOT, RST). Attach a U.FL 2.4 GHz antenna to the connector on the right side of the ESP32-S3 module. Then visit flash.sankhyafarms.com, connect via USB-C, select your sensor configuration, and flash. Register the node with your Sankhya Intelligence account to begin per-tree data collection.


Frequently asked questions

FAQ

Four iterations of field-driven hardware revision. v1 used a socketed Waveshare ESP32-S3-Nano, MAX485, and a single LM2596S 5V buck. v2 added the INA219 battery monitor and a second DC barrel jack for solar input. v3 used AO3400A N-channel MOSFETs as high-side switches and shipped three confirmed defects: the SS34 input diode installed reversed (killed the 5V rail), the INA219 without I²C pullups (battery monitor completely non-functional), and the N-channel MOSFETs that could not turn on from 3.3V GPIO without bootstrap voltage (unfixable in firmware). v4 corrects all three by replacing MOSFETs with TPS1H100B integrated high-side switches, adding explicit I²C pullups on the INA219, and moving to a chip-down DOIT ESP32-S3 module instead of a socketed dev board. The 3.3V rail is now generated by a dedicated LM2596S buck.
An N-channel MOSFET in a high-side configuration requires gate voltage above the drain. For a 12V load, that means roughly 15V at the gate — impossible to drive directly from a 3.3V ESP32 GPIO. A bootstrap capacitor circuit can generate that voltage but fails at startup when the capacitor is uncharged. The TPS1H100B integrates a charge pump on-chip, accepts a 3.3V logic input directly, and adds overcurrent protection, thermal shutdown, and a diagnostic output in a single 14-pin HTSSOP package. It is the correct part for this application — the v3 MOSFETs were a fundamental design error, not something tunable in firmware.
v1 to v3 used a Waveshare ESP32-S3-Nano dev board friction-fit into 2.54 mm female headers. In sustained field deployment, vibration from pump equipment and ambient wind degraded the socket contact reliability — boards intermittently lost power or RS-485 link. The v4 chip-down DOIT ESPS3-32E-N16R8 castellated module is soldered directly to the carrier PCB pads, mechanically equivalent to any other SMD component. It also reduces overall height by ~3 mm and removes the intermediate PCB cost of the dev board.
No. One 4G LTE dongle plugs into the USB-A port on a single designated gateway node and creates a WiFi hotspot. All other nodes connect to that hotspot as WiFi clients. Use a TP-Link TL-WR845N or similar repeater to extend coverage across all irrigation zones. One SIM card and one data plan serves the whole orchard.
The USB-A port carries 5V and GND only — there are no data lines connected to the ESP32. It exists solely to power a 4G LTE WiFi dongle. Storage devices, keyboards, or any USB data device will not function. If you are within range of existing WiFi infrastructure, no dongle is needed at all — the ESP32 connects directly to any WiFi network.
LiFePO₄ is significantly safer for unattended outdoor deployment — no thermal runaway risk at high temperatures inside a sealed enclosure in direct sun. It also has a flat discharge curve, keeping voltage stable until nearly empty, which makes battery state-of-charge estimation via the INA219 more reliable. The internal BMS handles charge ceiling so no separate solar charge controller is needed.
The LiFePO₄ battery's internal BMS acts as the charge ceiling — it disconnects charge input when full. SS54B Schottky diodes on both DC1 (battery) and DC2 (solar) inputs prevent backfeed between the two sources, and prevent battery current backfeeding through the solar panel at night. This is fully sufficient for 20W panel wattage. A dedicated MPPT controller adds cost and complexity for marginal efficiency gain at this scale.
If your sensor speaks Modbus RTU over RS-485, it will physically work with this board. The Sankhya Intelligence platform requires a verified register map to parse sensor data correctly. If your sensor is not in our sensor library, send us the datasheet — if it speaks Modbus RTU we can add support within days.
DNP (Do Not Populate) marks a SMBJ6.5CA bidirectional TVS pad reserved for optional low-voltage rail clamping. It appears in the schematic and BOM as a placeholder but is not assembled by default. The primary TVS protection on the 12V input rails (SMBJ15A) and USB D+/D− lines (USBLC6-2SC6) is always populated. The DNP pad can be optionally populated if additional clamping is required for a specific deployment.
The original v1 page is archived at /open-hardware-v1. It is kept online for historical reference and to make the lineage clear — but the Gerbers there shipped with three confirmed defects and should not be manufactured. Use the v4 files on this page instead.
Because the hardware is genuinely not the hard part. The BOM is commodity components from LCSC that anyone can order. What takes years to build is the per-tree longitudinal dataset, the Uptake Index methodology, and the agronomic AI layer — all of which run entirely server-side. Publishing the hardware removes the adoption barrier, enables self-installation, and turns transparency into a competitive signal. Fasal does not do this. Netafim certainly does not.

Topic cluster

Deeper reading on the open hardware stack.

This page is the hub for the open hardware stack. The companion pages below cover the wiring, power, manufacturing, and signal-processing layers in production-grade detail. Together with the GitHub mirror they form the full reference for someone building or operating a Sankhya Intelligence sensor node.

SENSOR WIRING

RS-485 Modbus soil sensor wiring

Pinouts, bus topology, termination, Modbus RTU framing, and the wiring gotchas that cost weeks to diagnose across ZTS, JXCT, Renke, DFRobot, and SN-3000 sensors.

POWER DESIGN

ESP32-S3 solar-powered sensor node design

Measured current budget, LiFePO4 chemistry choice, 20W solar sizing for the worst month, dual-buck rail topology, and on-board battery telemetry.

MANUFACTURING

JLCPCB PCBA walkthrough

Step-by-step from Gerber upload to assembled boards delivered. ENIG vs HASL, BOM/CPL format, through-hole finishing, and a realistic 10-board cost breakdown.

IRRIGATION ALGORITHM

Curve-shape irrigation logic

How the sensor data turns into a ± volume recommendation by comparing today's moisture curve against the zone's own history — not against a fixed threshold.

SIGNAL METHODOLOGY

Uptake Index methodology

A per-tree, per-night score from continuous EC, moisture, and pH. Delta-based, moisture-gated, pH-gated — the signal layer behind per-tree fertigation timing.

SOURCE REPOSITORY · GITHUB

shsa1984/sankhya-node-hardware

Production v4 Gerbers, BOM with LCSC part numbers, PickAndPlace for JLCPCB assembly, schematics, and prior revisions. CERN-OHL-P v2 licensed.

FIELD NOTES · DEV.TO

How I built a solar-powered RS-485 soil sensor node for orchard management

Engineering write-up of the build journey — from hand-wired prototypes to a proper carrier board for a working orchard deployment.

LICENSE

CERN-OHL-P v2

The CERN Open Hardware Licence — Permissive variant. Use, modify, manufacture, and distribute the hardware design freely.