For the Workshop

Valentino

Digital Workhorse

Valentino is the high-power Digital Workhorse — everything in Wally plus an onboard BQ24650 MPPT solar battery charger for LiFePO4 or lead-acid batteries, dual current sensing, a configurable hardware watchdog, and a coin-cell-backed RTC. Designed for remote, long-running deployments where power management is critical. Accepts 10 V–24 V solar panels and charges at up to 6 A average. Battery chemistry, charge voltage, charge current and watchdog interval are all set with jumpers — no firmware changes needed. Build 3.

ESP32-WROOM-32E LoRa Ra-02 RTC + Coin Cell MPPT Solar Charger LiFePO4 / Lead-Acid 10–24V Solar 0.5–6A Charging Configurable Watchdog Dual Current Sensing 5V + 3.3V Regulated Bare PCB

Hardware

Valentino exposes its signals via two 10-pin female headers (J3 and J4) plus an 8-pin programming header (J2). All pin assignments are taken from the Build 3 schematic. Refer to the Valentino Schematic tab for the full layout.

J3 — Left Expansion Header (10-pin)
PinSignalFunction
1 GPIO_32 GPIO General purpose, ADC
2 GPIO_33 GPIO General purpose, ADC
3 UART2_RX UART UART2 receive (GPIO 16)
4 UART2_TX UART UART2 transmit (GPIO 17)
5 3V3 PWR 3.3V supply
6 NC NC No connect
7 VDD PWR Battery / panel bus (unregulated)
8 VDD PWR Battery / panel bus (unregulated)
9 GND GND Ground
10 GND GND Ground
J4 — Right Expansion Header (10-pin)
PinSignalFunction
1 GPIO_5_CS SPI Default SPI chip select (free for a shield)
2 GPIO_18_CLK SPI Default SPI clock (free for a shield)
3 GPIO_23_MOSI SPI Default SPI MOSI (free for a shield)
4 GPIO_19_MISO SPI Default SPI MISO (free for a shield)
5 SDA_I2C I²C Data (GPIO 21)
6 SCL_I2C I²C Clock (GPIO 22)
7 3V3 PWR 3.3V supply
8 V50 PWR 5V supply
9 GND GND Ground
10 GND GND Ground
J2 — Programming Header (8-pin)
PinSignalFunction
1 V_PROG PWR Programming voltage (5V, via D2 to V50)
2 EN Control ESP32 enable / reset
3 TX0 UART UART0 transmit
4 RX0 UART UART0 receive
5 IO0 Control Boot mode select
6 GND GND Ground
7 GND GND Ground
8 GND GND Ground
On-Board Peripheral Pins

These GPIO pins are consumed by Valentino's on-board components and are not available on the expansion headers (except the shared I²C bus). They are listed here for firmware reference.

SignalGPIOComponent / Purpose
SDA_I2C 21 I²C Shared: INA219 ×2 · ADS1115 · PCF8563T RTC
SCL_I2C 22 I²C I²C clock
RTC_CLK_OUT 34 Input PCF8563T 1 Hz CLKOUT (input-only pin, 10 kΩ pull-up)
WATCHDOG_WAKE 25 Input TPL5010 WAKE — pulse at the end of every watchdog interval
WATCHDOG_DONE 26 Output TPL5010 DONE — rising edge to pet the watchdog
TEMPERATURE 27 1-Wire DS18B20Z+ board temperature sensor
SENSOR_VN 39 Input JP3 battery-chemistry jumper (input-only pin, 10 kΩ pull-up)
LORA_SCK 14 SPI Ra-02 LoRa clock
LORA_MISO 12 SPI Ra-02 LoRa MISO
LORA_MOSI 13 SPI Ra-02 LoRa MOSI
LORA_SS 15 SPI Ra-02 LoRa chip select (NSS)
LORA_RST 4 SPI Ra-02 LoRa hardware reset
LORA_DIO0 35 Input Ra-02 LoRa interrupt (DIO0, input-only pin)
I²C Bus — On-Board Devices
DeviceAddressNotes
INA219 — Solar input0x402 mΩ shunt (R9)
INA219 — Battery0x412 mΩ shunt (R10)
ADS1115 ADC0x48ADDR = GND
PCF8563T RTC0x51Fixed — CR1220 backup

A shield must not reuse these addresses. A shield ADC at 0x49 does not clash.

ADS1115 Channels
ChannelMeasures
AIN0Battery thermistor (J5 divider)
AIN1RTC coin-cell voltage (R41 / R46 divider)
AIN2Charger STAT1 (LED D10, in progress)
AIN3Charger STAT2 (LED D8, complete)

Set the ADS1115 to ±4.096 V full scale. The default ±2.048 V clips the 3.3 V status signals.

Valentino charges its battery from a solar panel with a TI BQ24650 MPPT charger. Three settings are made with jumpers: the battery chemistry (JP3), the charge voltage (JP7 / JP8) and the charge current (J7). Set all three to suit your battery before connecting it, and check the charge voltage and current with a meter first.

The values below are calculated from the Build 3 schematic and have not yet been bench-measured. The full derivations are in the Board Configuration Guide.

The J7 and JP7 / JP8 legends printed on Build 3 boards match the tables below. Early Build 3 prototype boards carried incorrect legends (for example “15 V” on JP8); if yours does, go by this page.
Battery chemistry
JP3 Chemistry Charger behaviour
Open (no jumper) LiFePO4 Charge terminates when the current falls to 10% of the set current; the COMPLETE LED lights. A new cycle starts when the battery falls about 0.3 V below the set voltage. GPIO39 reads HIGH.
Fitted Lead-acid Termination disabled: the charger holds the set voltage indefinitely (float). COMPLETE is not expected to light. GPIO39 reads LOW.

JP3 does not choose the voltage. In lead-acid mode the selected voltage is held permanently, so use 13.6 V for a battery that stays connected unless its datasheet allows continuous charging at 14.2 or 14.9 V. The ESP32 cannot control the charger; it can only read it back.

Charge voltage
JP7 JP8 Charge voltage On the board legend
openopen13.6 Vyes
closedopen14.2 Vyes
openclosed14.2 Vnot listed — same as JP7 closed; use JP7
closedclosed14.9 Vyes
Which JP7 / JP8 setting for which battery

The charge voltage follows the battery type — the same choice that sets JP3 — not the battery size. Set JP3 and JP7 / JP8 together from the battery type, and J7 from the battery size (below). Standby means the battery is kept full and rarely discharged (like an alarm panel). Daily cycling means it is discharged at night and recharged the next day, which is what a solar device on a post does, so it takes the higher voltage.

12 V-class batteryUseJP3JP7JP8Charge voltage
LiFePO4, 4 cells (12.8 V)anyopenclosedopen14.2 V
Sealed lead-acid (AGM / gel)standby (float)fittedopenopen13.6 V
Sealed lead-acid (AGM / gel)daily cycling, e.g. solar on a postfittedclosedopen14.2 V
Flooded lead-acidstandby (float)fittedopenopen13.6 V
Flooded lead-aciddaily cycling, supervisedfittedclosedclosed14.9 V

Never close both JP7 and JP8 with a LiFePO4 pack — 14.9 V is 3.72 V per cell, above the 3.65 V limit. Both open (13.6 V) is safe for LiFePO4 but only charges it partly. Typical values only — check your battery's datasheet.

Charge current

Resistor R49 (80 mΩ) is always in circuit and gives 0.5 A. Each J7 jumper bridges one vertical pair of pins (top-row letter A–E to the letter below it, F–K) and adds one more sense resistor in parallel. Total current = 0.5 A + the “adds” of every fitted jumper; any combination is allowed.

Position Pins Resistor added Adds Total with only this jumper
none—R49 only (80 mΩ)—0.50 A
1–2R51 (80 mΩ)+0.50 A1.00 A
3–4R52 (40 mΩ)+1.00 A1.50 A
5–6R53 (27 mΩ)+1.48 A1.98 A
7–8R54 (20 mΩ)+2.00 A2.50 A
9–10R55 (16 mΩ)+2.50 A3.00 A
Choosing a current for your panel and battery

As a rule, the battery should be about 4 × the charge current (a charge rate near C/4) and the panel about charge current × 14 V in watts. If the panel cannot supply the set current, the charge current simply drops; it does not collapse the panel.

Charge current Solar panel Battery J7 jumpers to fit
0.5 A10 W2 Ahnone
1.5 A20 W6 Ah
3.0 A40 W12 Ah
4.5 A60 W18 Ah + (4.48 A)
6.0 A80 W24 Ah + +

The design notes limit the average battery charge current to 6 A (9 A maximum with the regulators running), so do not fit jumpers totalling more than that (all five together give about 8 A). These five rows are the ones printed on the board. All 32 jumper combinations are listed in the Board Configuration Guide.

Solar Input (J1)
  • Input range: 10 V – 24 V DC
  • MPPT regulation point 17.8 V — the panel's maximum-power voltage should be at or above this (typical 12 V / 36-cell panel)
  • At least 0.5 A of input is needed to run the regulators
  • Input current sensing (INA219, 0x40)
Battery (J6) and Thermistor (J5)
  • Battery current sensing (INA219, 0x41)
  • A diode stops the battery discharging into the panel
  • J5 takes a 10 kΩ NTC on the battery; charging is allowed from roughly 0.5 °C to 41 °C (approximate, for a beta 3435 K NTC)
  • Charging is suspended if J5 has no thermistor fitted. A fixed 10 kΩ resistor works but removes temperature protection
Charger status LEDs
Charge stateD10 IN PROGRESSD8 COMPLETE
ChargingONoff
Charge complete (LiFePO4 mode)offON
Suspended, fault, no battery, no valid input, thermistor missing or out of rangeoffoff

Both LEDs off in daylight means the charger is suspended: panel below the 17.8 V set point, battery absent, thermistor missing or out of range, or a precharge timeout. The same status is readable by the ESP32 through the ADS1115.

Valentino includes a TI TPL5010 hardware watchdog that resets the ESP32 if the firmware stops responding. The TPL5010 sends a WAKE pulse (to GPIO25) at the end of every interval, and the firmware must answer with a DONE pulse (from GPIO26). If it does not, the TPL5010 pulls the reset line low. The interval is chosen with a jumper — no firmware changes required.

The reset only reaches the ESP32 if JP1 is fitted.

Watchdog enable
JP1Effect
FittedWatchdog enabled — a missed DONE resets the ESP32 through its EN pin
OpenWatchdog disabled — the timer still runs and pulses WAKE, but nothing is reset (default)
Watchdog interval
Position Pins Interval Typical use case
9–10 1 s Fast watchdog — firmware must pet continuously; not for deep sleep
7–8 1 min Covers sensor-read + LoRa transmit cycles
5–6 10 min Slow WiFi connect + cloud upload before reboot
3–4 30 min Long deep-sleep cycles
1–2 1 h Very long deep-sleep cycles (about 59 minutes in practice)
Fit exactly one J8 jumper — with none the interval pin is open, and with two the resistors combine and give a shorter, unintended interval. Power-cycle the board after moving a J8 jumper; the TPL5010 reads its interval only at power-up.

Firmware contract: after each WAKE rising edge, send a DONE low-to-high transition (at least 100 ns wide) at least 20 ms before the next WAKE. A hung ESP32 is normally reset within one to two intervals.

Valentino shares the same ESP32 + LoRa + RTC core as Wally but adds a full solar charging and power management system for remote deployments. Build 3, 110 × 120 mm.

Compute & Radio

Core processing, wireless and sensing

MCUESP32-WROOM-32E
LoRaRa-02 SX1278 — 433 MHz, own SPI pins
RTCPCF8563T — I²C, CR1220 coin-cell backup, 1 Hz output
WatchdogTPL5010 — 1 s to 1 h, jumper-selectable
ADCADS1115 — thermistor, coin-cell voltage, charger status
Board temperatureDS18B20Z+ on GPIO27
Power Management

Solar charging and power rails

Solar input10 V – 24 V DC (about 10 W – 80 W panels)
ChargerBQ24650 MPPT, regulation point 17.8 V
Charge voltage13.6 / 14.2 / 14.9 V (JP7, JP8)
Charge current0.5 A – 6 A (J7); about 8 A with every jumper fitted, not recommended
ChemistryLiFePO4 or lead-acid (JP3)
5V / 3.3V railsTwo TPS5430 buck regulators
Solar / battery sensingINA219 ×2 — input current and battery current
Battery temperature10 kΩ NTC on J5; charging suspended if missing
I²C Bus — On-board Devices
AddressDevice
0x40INA219 — solar input current
0x41INA219 — battery current
0x48ADS1115 ADC
0x51PCF8563T RTC

The I²C bus is also exposed on the J4 header for shield sensors.

Headers & Interfaces
Shield headers2× 10-pin female (J3, J4) — GPIO, I²C, SPI, power
ProgrammingJ2, 8-pin female; SW1 reset button
Solar inputJ1 screw terminal
BatteryJ6 screw terminal
ThermistorJ5 screw terminal
Power on headers3V3, V50 (5 V), VDD (battery / panel bus), GND
Board size110 × 120 mm

A shield is a second board that plugs onto Valentino through J3 and J4 and covers its lower part. Valentino's tall capacitors and bottom-edge terminal blocks fix the shield's shape. Start from the ValentinoShieldTemplate KiCad project (see the Files tab), which follows the same header layout and outline width.

No through-hole parts over the tall capacitors, unless the shield is mounted on header raisers. Five 220 µF electrolytic capacitors (C14, C26, C38, C4, C34) stand 10 mm tall along the bottom of Valentino, and the board separation is only 9.6 mm (8.0 mm standoff + 1.6 mm PCB), so anything that projects below the shield there lands on them.
ItemDimension
Outline110.0 × 93.0 mm — covers the lower 93 mm of Valentino; bottom and side edges flush
Mating headers2 × 1×10, 2.54 mm pitch, 3.0 mm in from each side edge; pin 1 at 18.0 mm from the shield top (75.0 mm above the bottom edge)
Left notch43.0 × 14.0 mm (bottom-left) — clears the solar terminal J1, battery terminal J6 and status LEDs D8 / D10
Right notch13.0 × 14.0 mm (bottom-right) — clears the thermistor terminal J5
Through-hole keep-out12.6 to 24.87 mm above the bottom edge, 30.1 to 106.9 mm from the left edge
Access with the shield fitted
  • Covered: J7 (charge current), JP7 / JP8 (charge voltage) and JP3 (chemistry) — set them before fitting the shield, or cut windows in it
  • Reachable: JP1 and J8 (watchdog), J2 programming header and SW1 reset (top 27 mm); LEDs D8 / D10 and terminals J1, J6, J5 through the notches
Free for your shield
  • J3: GPIO32, GPIO33, GPIO16 (UART2 RX), GPIO17 (UART2 TX)
  • J4: GPIO5, GPIO18, GPIO23, GPIO19 (the default SPI pins — LoRa uses its own)
  • Power: 3V3, V50 (5 V), VDD (battery / panel bus), GND
  • I²C: shared on GPIO21 / 22; addresses 0x40, 0x41, 0x48 and 0x51 are taken
Firmware starting point

ValentinoTest reads every on-board Valentino device and leaves three empty hook functions (shieldSetup(), shieldLoop(), shieldReport()) for your shield code. Copy it into a new project and add your code there. Get it from the ValentinoTest repository on GitHub.

Valentino — Schematic — Build 3
Open PDF

Documentation, firmware and design resources for Valentino Build 3.

Documentation
File Description Download
Valentino_Board_Configuration_Guide.pdf
PDF  ·  21 pages
Jumpers, headers, status LEDs and shield limits for Build 3: battery chemistry, charge voltage and current (all 32 J7 combinations), which JP3 / JP7 / JP8 setting suits which battery, lead-acid versus LiFePO4, worked examples including a 10 W panel, watchdog interval, thermistor, charger status decoding, shield outline and keep-out, and the ValentinoTest code explained block by block. Download
KiCad Shield Template
File Description Download
ValentinoShieldTemplate.zip
KiCad 9  ·  ZIP archive
A KiCad 9 project template for a Valentino shield: the J3 and J4 mating headers pre-placed, a board outline sized to Valentino, and a design rule that blocks through-hole pads over the tall capacitors. Unzip it and rename the project before you start. If you mount the shield on header raisers tall enough to clear the capacitors, disable the no_tht_over_tall_caps rule (see the comments in the .kicad_dru file). Download
Firmware
File Description Download
ValentinoTest
Arduino  ·  ESP32  ·  GitHub
Hardware test and starting point for any device built on a Valentino base board plus a shield. Reads the PCF8563T RTC, both INA219 current monitors, the battery thermistor, coin-cell voltage and BQ24650 charger status (through the ADS1115), the DS18B20 board temperature, the JP3 chemistry jumper, and services the TPL5010 watchdog. Warns if the battery voltage goes above the safe limit for the chemistry JP3 selects (14.6 V for LiFePO4, 15.0 V for lead-acid), which catches a wrong JP7 / JP8 setting. Prints a status report every 5 seconds over serial. Clone or download the repository and open ValentinoTest.ino in Arduino IDE; the README lists the required libraries and build settings. GitHub
ValentinoTest is written for Build 3 and compiles cleanly, but has not yet been run on a Build 3 board. The charger-status thresholds, battery current sign and thermistor beta value still need checking on hardware. Firmware written for Valentino Build 1 will not work unchanged: the chemistry jumper polarity is inverted and the coin-cell voltage, thermistor and charger status now come through the ADS1115.