Deployment & Field Validation Guide¶
Table of Contents¶
- Overview
- Pre-Deployment Checklist
- Breadboard Validation Protocol
- Commissioning Procedure
- Field Installation
- Monitoring & Maintenance
- Profile Selection Guide
- Firmware Configuration
- Deployment Workflow
Overview¶
Deployment is where the design meets reality. A sensor node that works perfectly in the lab might fail in the field due to factors the simulation didn't capture: poor WiFi signal, dust storms, thermal stress, or human error during installation. This guide prescribes a careful, methodical approach to commissioning and deploying nodes to the farm.
The process has four phases: 1. Breadboard validation — Power chain works, all sensors respond, MT3608 is stable under WiFi load. 2. Commissioning — PCB is built, firmware is flashed, all subsystems are tested individually and together. 3. Field installation — Node is mounted at its planned location, solar angle is set, WiFi is verified. 4. Long-term monitoring — Battery voltage, solar harvest, and WiFi quality are logged daily for the first month.
Each phase has success criteria and a go/no-go decision gate. Do not skip phases. Do not proceed past a gate without explicit sign-off from the team.
Pre-Deployment Checklist¶
This checklist must be completed and signed off before any hardware leaves the lab. Every item is a prerequisite for field success.
Power System¶
- [ ] Schematic review complete — Two independent reviews, no blocking issues. Signed by reviewer(s) with date.
- [ ] PCB layout review complete — Trace widths verified (0.6 mm minimum on 5V and battery rails). Bypass capacitors physically close to IC pins. Ground plane star point identified.
- [ ] Bill of materials (BOM) complete — All components sourced or on-hand. Datasheets for each IC cross-checked against schematic. No substitutions without re-review.
- [ ] Charger IC verified — MCP73871 module is genuine (check for counterfeit). Test with power supply: input voltage ramps 4.5–6.5V, output does not exceed 4.2V, STAT1/STAT2 pins show charge status correctly.
- [ ] Boost converter IC verified — MT3608 module is genuine. Test with battery (3.7V) and 160 mA dummy load. Output voltage is 5.0V ±2%. Trimpot works (turning it changes voltage).
- [ ] Supervisor IC verified — MCP100-450 is on-hand. Verify part number and package (SOT-23).
- [ ] Battery purchased — Genuine NCR18650B 3400 mAh cells (Panasonic factory or authorized distributor). Verify serial numbers to guard against clones.
- [ ] Schottky diode verified — SS14 (or equivalent, 1A/45V) is on PCB or breadboard. Test forward voltage is ~0.3V at 100 mA.
Microcontroller & Sensors¶
- [ ] ESP32 DevKit V1 purchased — Verify variant is 30-pin narrow (not wide), USB-C connector. Measure dimensions with calipers to confirm footprint.
- [ ] Sensor modules verified — BH1750 (light), BME280 (temperature/humidity), capacitive soil sensor, tipping-bucket rain detector all received and tested on bench.
- [ ] I2C address conflict check — BH1750 address 0x23, BME280 address 0x77. No other devices on the bus. Cross-check schematic.
- [ ] GPIO pin mapping locked — Schematic matches
system_parameters.yamlpin assignments. No pin conflicts (e.g., GPIO2 must be LOW at boot, not driven externally). - [ ] ADC input voltage verified — VBAT divider is 2:1 (4.2V battery reads 2.1V at ADC). Resistor tolerance is ±1%, divider output is within 3.3V limit.
Firmware¶
- [ ] Firmware skeleton compiled — No errors, no warnings. Builds successfully on
esp-idfor Arduino IDE. - [ ] GPIO initialization correct — All configured GPIO pins initialize correctly on boot (no unintended HIGH/LOW states, especially GPIO2).
- [ ] Sensor read routine tested — ADC samples at least 10 times per read, averaged. I2C devices respond to address scan.
- [ ] WiFi provisioning tested — Can connect to test SSID, acquire IP, send test packet.
- [ ] Deep sleep verified — Current meter shows ~0.01 mA in deep sleep mode. Wakeup timer works (ESP32 wakes on schedule).
- [ ] Status LED routine tested — GPIO2 LED blinks at boot, blinks on WiFi TX, dims on low battery.
Enclosure & Mechanical¶
- [ ] Enclosure HT-5WAY received — Dimensions verified with calipers. Internal volume is sufficient for PCB, battery, and airflow.
- [ ] PCB dimensions measured — Prototype or design drawing confirms fit inside enclosure with ~5 mm clearance.
- [ ] Solar panel sourced — 6V, 200 mA (or equivalent 1W) panel, with flexible cable. Connector (JST 2-pin) matches charger input.
- [ ] WiFi antenna sourced — SMA connector, 2.4 GHz, omnidirectional (0 dBi or better). Test impedance match on network analyzer if available.
- [ ] Battery holder sourced — Spring-loaded clips for 18650, compatible with PCB footprint. Test insertion and removal (should be smooth, not forced).
Breadboard Validation Protocol¶
Before PCB fabrication, the power chain must be validated on a breadboard. This is the blocking gate. Do not skip this.
Equipment Needed¶
- Solderless breadboard (830 points minimum)
- Jumper wires (solid, 22 AWG)
- Power supply (0–6V, 1A minimum)
- Multimeter (voltage and current measurement)
- Oscilloscope (optional but recommended for MT3608 stability)
- Current probe or shunt resistor (1Ω / 1% tolerance)
- Dummy load (resistor or FET circuit) rated for 160 mA continuous
Step 1: Charger Input Stage¶
Connect solar panel (or 6V power supply) to charger input via Schottky diode.
Acceptance criteria: - [ ] Voltage after Schottky is 5.7–5.9V (loss of ~0.3V due to diode drop) ✓ - [ ] Current into charger input is <200 mA at 6V supply (no shorts) ✓ - [ ] Charger output (BAT pin) settles to 0V initially (no battery connected) ✓
Step 2: Battery Charging¶
Connect a fresh NCR18650B battery to charger output via a 1Ω shunt to measure charge current.
Acceptance criteria: - [ ] Battery voltage rises from 3.0V to 4.2V over ~6–8 hours (constant current phase) ✓ - [ ] Charge current is 400–500 mA (as set by current-setting resistor) ✓ - [ ] STAT1/STAT2 pins show correct status (charging → done) ✓ - [ ] No smoke, no excessive heat (charger should be warm, not hot) ✓
Step 3: Boost Converter¶
Wire boost input to battery, output through a 10µF capacitor and trim pot to ESP32 VIN.
Battery (+) → MT3608 IN
MT3608 OUT → [10µF cap] → Trimpot (divider) → measurement point
Trimpot slider → ESP32 VIN
Acceptance criteria: - [ ] With no load, MT3608 output is 5.0V ±0.1V (trim pot if needed) ✓ - [ ] Output voltage is stable (oscilloscope shows <20 mV ripple) ✓ - [ ] Quiescent current (no load) is 0.6–0.7 mA ✓
Step 4: WiFi TX Load Test (CRITICAL)¶
This is the hardest test. Simulate a WiFi transmitter drawing 160 mA from the 5V rail.
Setup:
MT3608 OUT (5V) → [10µF cap]
→ [15Ω resistor] → [N-channel FET gate driver (e.g., BC547)]
→ Dummy load FET to GND
Pulse generator: Toggle the FET on/off to simulate WiFi TX (160 mA bursts, 100 ms duration)
Measurements: - Connect oscilloscope to MT3608 output (BOOST_5V node) - Trigger on FET gate signal - Measure voltage step response when FET turns on (load jumps to 160 mA)
Acceptance criteria: - [ ] Output voltage sags from 5.0V to <4.8V (no more than 0.2V droop) ✓ - [ ] Sag settles in <10 µs (no sustained oscillation) ✓ - [ ] No ringing (peaks above 5.1V or below 4.5V) ✓ - [ ] MCP100 supervisor does NOT pull reset (output stays >4.5V) ✓ - [ ] After load turns off, voltage recovers to 5.0V smoothly in <20 µs ✓
If this test fails (excessive droop, ringing, or instability), troubleshoot: - Is output capacitor close to MT3608 pin? Move it closer. - Is output capacitor ceramic (X7R)? Replace if Y5V. - Are traces wide (0.6 mm)? Make them wider. - Is there a via for the return path? Add vias for current return to GND.
If breadboard test passes: ✓ GREEN LIGHT for PCB fabrication. If breadboard test fails: ✗ RED LIGHT — redesign required. Do not proceed to PCB.
Step 5: MCP100 Supervisor Threshold Test¶
Connect the supervisor input (non-inverting comparator) to a variable 0–6V supply, and monitor its open-drain output on a pull-up resistor to 5V.
Variable supply (0–6V) → MCP100 input
MCP100 output → [10K pull-up] → 5V
→ Oscilloscope or multimeter
Acceptance criteria: - [ ] Threshold is 4.5V ±50 mV (measure the voltage at which output releases from reset) ✓ - [ ] Hysteresis is <50 mV (threshold-release difference is minimal) ✓ - [ ] Reset assertion and release are clean (no glitches, no oscillation) ✓
Commissioning Procedure¶
Once PCB is assembled and tested in the lab, follow this procedure to commission the node for field deployment.
Phase 1: Visual Inspection¶
- [ ] Inspect PCB for solder bridges, missing components, obvious damage
- [ ] Verify all capacitors are ceramic (not electrolytic on 5V rail)
- [ ] Confirm battery is seated correctly in holder
- [ ] Check that all connectors (solar, antenna, debug UART) are present
Phase 2: Power-On Test¶
With no load (battery only, no ESP32): - [ ] Connect battery to board - [ ] Measure voltages at key nodes: - [ ] BOOST_5V: 5.0V ±2% (4.9–5.1V) ✓ - [ ] V3P3: 3.3V ±1% (3.27–3.33V) ✓ - [ ] BAT_P: ~3.7V (full battery) ✓ - [ ] Measure quiescent current: <1.0 mA (expect ~0.76 mA) ✓
Phase 3: ESP32 Bring-Up¶
Connect ESP32 DevKit to the board via breakout headers. Power on. - [ ] ESP32 boots (LED activity visible, or serial output at 115200 baud) ✓ - [ ] GPIO2 (status LED) is LOW at boot (no override) ✓ - [ ] Deep sleep works (current drops to <0.1 mA after 30 sec) ✓
Phase 4: Sensor Integration¶
Connect each sensor one by one. After each connection, run a test:
BH1750 Light Sensor: - [ ] I2C address 0x23 responds (use I2C scanner) - [ ] Readings change when flashlight is shined on it - [ ] Readings are in expected range (0–65535 lux)
BME280 Temperature/Humidity: - [ ] I2C address 0x77 responds - [ ] Temperature reading is room temperature ±2°C - [ ] Humidity reading is room humidity ±5% - [ ] Pressure reading is ~101 kPa (local altitude)
Capacitive Soil Moisture: - [ ] GPIO26 (MOSFET gate) can turn sensor on/off - [ ] ADC GPIO34 reads ~2048 (middle of range) when sensor is dry - [ ] ADC reading changes when sensor is wetted (lowers resistance, lowers ADC reading)
Tipping-Bucket Rain Detector: - [ ] ADC GPIO35 reads ~0 or ~3.3V (depending on bucket position) - [ ] When rain simulator (or manual tip) occurs, GPIO35 voltage changes - [ ] Each tip is counted correctly in firmware
Optional DHT22: - [ ] GPIO16 1-wire protocol works (if implemented) - [ ] Temperature and humidity readings are within ±3°C, ±5%
Phase 5: WiFi Bring-Up¶
Connect to your test WiFi network. - [ ] WiFi SSID is found (firmware lists available networks) - [ ] Connection succeeds within 2 seconds - [ ] IP is acquired via DHCP - [ ] Ping to farm server succeeds - [ ] Serial log shows WiFi RX signal strength (RSSI, should be > -70 dBm for test)
Phase 6: Data Transmission Test¶
Program a test payload and transmit to farm server. - [ ] JSON payload is formatted correctly (use online JSON validator) - [ ] Server receives packet (log entry or database insert visible) - [ ] Timestamp is correct (check for time sync issues) - [ ] All sensor fields are populated (no null values)
Phase 7: 24-Hour Autonomy Test¶
Leave the node powered on (no sleep, all sensors active, WiFi TX every 5 minutes) for 24 hours. Measure cumulative battery discharge.
Procedure: 1. Charge battery to 4.2V 2. Note start time and start voltage (measure with multimeter) 3. Enable Profile A (Debug): read every 5 min, TX every 5 min 4. Let run for exactly 24 hours 5. Measure end voltage 6. Calculate discharge: (Start mAh - End mAh) from voltage curve
Acceptance criteria: - [ ] Measured daily consumption is within ±20% of model prediction (expect ~33 mAh/day for Profile A, allow 26–40 mAh/day) ✓ - [ ] No resets or crashes over 24 hours ✓ - [ ] WiFi TX success rate >95% (>288 of 288 packets transmitted) ✓
Phase 8: Thermal Cycling (Optional but Recommended)¶
If time permits, expose the node to temperature extremes to verify no thermal issues.
Procedure: 1. Place node in a refrigerator (4°C) for 2 hours 2. Measure operation (WiFi link, sensor reads, voltage) 3. Place node in a warm location (40°C, sunlamp) for 2 hours 4. Repeat measurements
Acceptance criteria: - [ ] No component damage visible - [ ] WiFi signal strength varies but connection is maintained - [ ] Voltage readings are stable (no thermal instability)
Field Installation¶
Location Selection¶
Site survey: 1. Walk the perimeter of the planned monitoring zone 2. Visually estimate solar panel angle and shadow patterns (peak sun should hit panel between 10 AM and 2 PM) 3. Use a WiFi scanner app to check signal strength at planned location (target RSSI > -70 dBm) 4. Take GPS coordinates (for digital twin registration)
Mounting height: - Mount the enclosure 1.5–2.0 m above ground (prevents foot traffic, animals, irrigation splash) - Mount on a post, pole, or building wall - Angle to avoid direct wind loading in monsoon season
Solar panel orientation: - Face south (Rajasthan is in northern hemisphere, latitude ~26°N) - Tilt angle: sin(latitude) = sin(26°) ≈ 44° from horizontal (optimal year-round) - Practically, set to ~35–45° and adjust seasonally if convenient
WiFi antenna: - Mount antenna vertically (omni-directional pattern is strongest in horizontal plane) - Position antenna at highest point on enclosure (reduces obstruction) - Keep antenna >15 cm away from solar panel (reduces coupling) - Extend antenna with cable if needed for better line-of-sight to farm server
Installation Checklist¶
- [ ] Enclosure mounted securely — No wobbling in wind. Rainfall should shed, not collect.
- [ ] Solar panel secure — No loose connections. Connector is weatherproofed (silicon sealant around JST connector opening).
- [ ] Battery inserted — Spring clips hold battery firmly. No rattling when tilted.
- [ ] Antenna connected — SMA connector is tight. Visual inspection of antenna for damage.
- [ ] WiFi verified — Connect smartphone to test SSID at enclosure location. RSSI is > -70 dBm. Ping to server succeeds.
- [ ] Firmware configured — Correct Profile (Profile B for standard deployment). Correct WiFi SSID and password. Farm server IP address is correct.
- [ ] Status LED visible — Node powers up, LED blinks (indicates successful boot).
- [ ] First transmission received — Check farm server logs. First data packet arrives within 5 minutes of power-up.
- [ ] Time synchronized — Node has acquired NTP time (timestamp in transmitted data is correct).
Post-Installation Verification (First 24 Hours)¶
Return to the site the next day (or check remotely via WiFi): - [ ] Battery voltage has not dropped significantly (solar has recharged it) - [ ] WiFi signal strength is consistent (RSSI doesn't fluctuate wildly) - [ ] Data is being transmitted every 15 minutes (Profile B) or as configured - [ ] No error messages in farm server logs
Monitoring & Maintenance¶
Daily Monitoring (Automated)¶
Set up a monitoring script on the farm server to track these metrics:
Battery Health: - Plot battery voltage over time (expect flat line, or slight sawtooth if solar is working) - Alert if voltage drops more than 0.1V per day (sign of high consumption or solar failure) - Alert if voltage exceeds 4.2V for >1 hour (sign of overcharging, charger failure)
Solar Harvest: - Calculate daily solar input from battery voltage trend and consumption (if solar hours are known) - Plot estimated mAh/day harvest - Alert if harvest drops below 200 mAh/day for 3 consecutive days (dust or damage)
WiFi Quality: - Log RSSI from each transmission - Plot RSSI over time (expect to be consistent, variation suggests antenna movement or interference) - Alert if RSSI drops below -75 dBm consistently (reposition antenna)
Data Freshness: - Alert if no data packet arrives for >30 minutes (WiFi disconnect, power issue, firmware crash) - Alert if timestamp in packet is >5 minutes behind server time (NTP sync issue)
Monthly Maintenance¶
On-site visit: - [ ] Visually inspect enclosure for water ingress, cracks, or damage - [ ] Clean solar panel with soft cloth (remove dust, pollen, bird droppings) - [ ] Check antenna connection (reseat SMA connector if loose) - [ ] Measure battery voltage with multimeter (should be 3.8–4.1V depending on time of day) - [ ] Document observations in field log
Firmware updates: - If over-the-air (OTA) firmware update is supported, deploy improvements (e.g., adaptive TX interval, better error handling) - If no OTA, plan for biannual firmware reflash at next site visit
Battery Replacement Schedule¶
When to replace: - After 18 months of operation in Rajasthan heat - If measured voltage trend is consistently negative (degradation faster than expected) - If battery voltage drops below 3.7V at end of day (aged cell, lower capacity)
Replacement procedure: 1. Open enclosure 2. Disconnect battery from spring clips 3. Insert fresh NCR18650B battery 4. Measure voltage (should be 4.0–4.2V for new cell) 5. Close enclosure, verify boot and WiFi
Logging: - Record old battery serial number and age at replacement - Record new battery serial number and purchase date - This data helps predict future replacement cycles
Profile Selection Guide¶
Choose your Profile based on site conditions and operational requirements.
Profile A (Debug) — Bench Only¶
Use if: You are in the lab, developing firmware, testing hardware. Do NOT use for field deployment.
Profile B (Recommended) — Standard Production¶
Use if: - Solar harvest is estimated >250 mAh/day on clear days - Site has decent WiFi signal (RSSI > -70 dBm) - You need 15-minute data freshness (for responsive monitoring) - This is the default; only change if commissioning team decides otherwise
Expected autonomy: 31 days (no solar) Expected data freshness: 15 minutes Expected daily consumption: 77.6 mAh
Profile C (Conservative) — Extreme Conditions¶
Use if: - Solar harvest is estimated <200 mAh/day (monsoon, dust, poor angle) - Site is remote with intermittent WiFi (expect retries) - Battery is aged (>18 months, lower capacity) - You want maximum autonomy (sacrifice data freshness)
Expected autonomy: 50 days (no solar) Expected data freshness: 30 minutes Expected daily consumption: 54.8 mAh
Firmware Configuration¶
The firmware is configured via config.h (or runtime parameters, depending on implementation).
Key Configuration Parameters¶
// Profile selection (A, B, or C)
#define PROFILE_MODE 'B' // Change to 'C' if low solar
// Sleep and TX intervals (minutes)
#define READ_INTERVAL_MIN 5
#define TX_INTERVAL_MIN 15
#define BATCH_SIZE 3
// WiFi settings
#define WIFI_SSID "FarmNetwork"
#define WIFI_PASS "password123"
#define FARM_SERVER_IP "192.168.1.100"
#define FARM_SERVER_PORT 8080
// Voltage thresholds
#define BATTERY_CRITICAL_V 3.1 // Shutdown threshold
#define BATTERY_LOW_ALERT_V 3.5 // Alert threshold
#define RSSI_POOR_THRESHOLD -75 // WiFi alert
// Sensor calibration
#define SOIL_MOISTURE_DRY 4000 // ADC value when fully dry
#define SOIL_MOISTURE_WET 1000 // ADC value when fully wet
// Debug
#define SERIAL_DEBUG 1 // Set to 0 in production (saves power)
Changing Profile at Runtime¶
If firmware supports over-the-air (OTA) configuration: 1. Send JSON config message to node via WiFi 2. Node updates EEPROM with new parameters 3. Node reboots and applies new configuration 4. No physical access needed
Example OTA message:
Deployment Workflow¶
Visual summary of the deployment process:
graph TD
Start["Start: New Sensor Node"] --> PreCheck["Pre-Deployment Checklist<br/>□ Components verified<br/>□ Firmware ready<br/>□ Enclosure ready"]
PreCheck --> BreadBoard["Breadboard Validation<br/>□ Power chain stable<br/>□ MT3608 tested under load<br/>□ Supervisor threshold checked"]
BreadBoard --> BreadPass{Breadboard<br/>Test<br/>Pass?}
BreadPass -->|NO| Redesign["Redesign Required<br/>Fix issues, retry"]
Redesign --> BreadBoard
BreadPass -->|YES| PCBFab["PCB Fabrication<br/>Send to JLCPCB<br/>Lead time: 2–3 weeks"]
PCBFab --> PCBAssembly["PCB Assembly<br/>Solder components<br/>Visual inspection"]
PCBAssembly --> Commissioning["Commissioning<br/>□ Power-on test<br/>□ ESP32 bring-up<br/>□ Sensor integration<br/>□ WiFi bring-up<br/>□ 24hr autonomy test"]
Commissioning --> CommPass{Commissioning<br/>Pass?}
CommPass -->|NO| Debug["Debug & Fix<br/>Troubleshoot issues"]
Debug --> Commissioning
CommPass -->|YES| SiteSurvey["Site Survey<br/>□ WiFi signal check<br/>□ Solar angle check<br/>□ Location GPS"]
SiteSurvey --> Install["Field Installation<br/>□ Mount enclosure<br/>□ Install panel<br/>□ Connect antenna<br/>□ Verify first TX"]
Install --> Monitor["Long-Term Monitoring<br/>□ Daily: Check voltage trend<br/>□ Daily: Check WiFi quality<br/>□ Monthly: Site visit<br/>□ 18mo: Battery replacement"]
Monitor --> Success["✓ Deployment Complete<br/>Node operational"]
style Start fill:#E3F2FD,stroke:#1976D2,stroke-width:2px
style PreCheck fill:#FFF9C4,stroke:#F57F17,stroke-width:2px
style BreadBoard fill:#FFCCBC,stroke:#E65100,stroke-width:2px
style PCBFab fill:#C8E6C9,stroke:#2E7D32,stroke-width:2px
style Commissioning fill:#FFCCBC,stroke:#E65100,stroke-width:2px
style SiteSurvey fill:#FFF9C4,stroke:#F57F17,stroke-width:2px
style Install fill:#C8E6C9,stroke:#2E7D32,stroke-width:2px
style Monitor fill:#E0F2F1,stroke:#00695C,stroke-width:2px
style Success fill:#C8E6C9,stroke:#2E7D32,stroke-width:3px
Next Steps¶
- For risk assessment: See Risk Scenarios
- For future roadmap: See Future Enhancements
- Back to overview: See Overview
← Risk Scenarios | Next → Future Enhancements