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.
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.
| Pin | Signal | Function |
|---|---|---|
| 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 |
| Pin | Signal | Function |
|---|---|---|
| 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 |
| Pin | Signal | Function |
|---|---|---|
| 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 |
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.
| Signal | GPIO | Component / 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) |
| Device | Address | Notes |
|---|---|---|
| INA219 — Solar input | 0x40 | 2 mΩ shunt (R9) |
| INA219 — Battery | 0x41 | 2 mΩ shunt (R10) |
| ADS1115 ADC | 0x48 | ADDR = GND |
| PCF8563T RTC | 0x51 | Fixed — CR1220 backup |
A shield must not reuse these addresses. A shield ADC at 0x49 does not clash.
| Channel | Measures |
|---|---|
| AIN0 | Battery thermistor (J5 divider) |
| AIN1 | RTC coin-cell voltage (R41 / R46 divider) |
| AIN2 | Charger STAT1 (LED D10, in progress) |
| AIN3 | Charger 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.
| 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.
| JP7 | JP8 | Charge voltage | On the board legend |
|---|---|---|---|
| open | open | 13.6 V | yes |
| closed | open | 14.2 V | yes |
| open | closed | 14.2 V | not listed — same as JP7 closed; use JP7 |
| closed | closed | 14.9 V | yes |
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 battery | Use | JP3 | JP7 | JP8 | Charge voltage |
|---|---|---|---|---|---|
| LiFePO4, 4 cells (12.8 V) | any | open | closed | open | 14.2 V |
| Sealed lead-acid (AGM / gel) | standby (float) | fitted | open | open | 13.6 V |
| Sealed lead-acid (AGM / gel) | daily cycling, e.g. solar on a post | fitted | closed | open | 14.2 V |
| Flooded lead-acid | standby (float) | fitted | open | open | 13.6 V |
| Flooded lead-acid | daily cycling, supervised | fitted | closed | closed | 14.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.
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 |
| A–F | 1–2 | R51 (80 mΩ) | +0.50 A | 1.00 A |
| B–G | 3–4 | R52 (40 mΩ) | +1.00 A | 1.50 A |
| C–H | 5–6 | R53 (27 mΩ) | +1.48 A | 1.98 A |
| D–I | 7–8 | R54 (20 mΩ) | +2.00 A | 2.50 A |
| E–K | 9–10 | R55 (16 mΩ) | +2.50 A | 3.00 A |
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 A | 10 W | 2 Ah | none |
| 1.5 A | 20 W | 6 Ah | B–G |
| 3.0 A | 40 W | 12 Ah | E–K |
| 4.5 A | 60 W | 18 Ah | C–H + E–K (4.48 A) |
| 6.0 A | 80 W | 24 Ah | B–G + D–I + E–K |
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.
| Charge state | D10 IN PROGRESS | D8 COMPLETE |
|---|---|---|
| Charging | ON | off |
| Charge complete (LiFePO4 mode) | off | ON |
| Suspended, fault, no battery, no valid input, thermistor missing or out of range | off | off |
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.
| JP1 | Effect |
|---|---|
| Fitted | Watchdog enabled — a missed DONE resets the ESP32 through its EN pin |
| Open | Watchdog disabled — the timer still runs and pulses WAKE, but nothing is reset (default) |
| Position | Pins | Interval | Typical use case |
|---|---|---|---|
| P–U | 9–10 | 1 s | Fast watchdog — firmware must pet continuously; not for deep sleep |
| O–T | 7–8 | 1 min | Covers sensor-read + LoRa transmit cycles |
| N–S | 5–6 | 10 min | Slow WiFi connect + cloud upload before reboot |
| M–R | 3–4 | 30 min | Long deep-sleep cycles |
| L–Q | 1–2 | 1 h | Very long deep-sleep cycles (about 59 minutes in practice) |
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.
Core processing, wireless and sensing
| MCU | ESP32-WROOM-32E |
| LoRa | Ra-02 SX1278 — 433 MHz, own SPI pins |
| RTC | PCF8563T — I²C, CR1220 coin-cell backup, 1 Hz output |
| Watchdog | TPL5010 — 1 s to 1 h, jumper-selectable |
| ADC | ADS1115 — thermistor, coin-cell voltage, charger status |
| Board temperature | DS18B20Z+ on GPIO27 |
Solar charging and power rails
| Solar input | 10 V – 24 V DC (about 10 W – 80 W panels) |
| Charger | BQ24650 MPPT, regulation point 17.8 V |
| Charge voltage | 13.6 / 14.2 / 14.9 V (JP7, JP8) |
| Charge current | 0.5 A – 6 A (J7); about 8 A with every jumper fitted, not recommended |
| Chemistry | LiFePO4 or lead-acid (JP3) |
| 5V / 3.3V rails | Two TPS5430 buck regulators |
| Solar / battery sensing | INA219 ×2 — input current and battery current |
| Battery temperature | 10 kΩ NTC on J5; charging suspended if missing |
| Address | Device |
|---|---|
0x40 | INA219 — solar input current |
0x41 | INA219 — battery current |
0x48 | ADS1115 ADC |
0x51 | PCF8563T RTC |
The I²C bus is also exposed on the J4 header for shield sensors.
| Shield headers | 2× 10-pin female (J3, J4) — GPIO, I²C, SPI, power |
| Programming | J2, 8-pin female; SW1 reset button |
| Solar input | J1 screw terminal |
| Battery | J6 screw terminal |
| Thermistor | J5 screw terminal |
| Power on headers | 3V3, V50 (5 V), VDD (battery / panel bus), GND |
| Board size | 110 × 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.
| Item | Dimension |
|---|---|
| Outline | 110.0 × 93.0 mm — covers the lower 93 mm of Valentino; bottom and side edges flush |
| Mating headers | 2 × 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 notch | 43.0 × 14.0 mm (bottom-left) — clears the solar terminal J1, battery terminal J6 and status LEDs D8 / D10 |
| Right notch | 13.0 × 14.0 mm (bottom-right) — clears the thermistor terminal J5 |
| Through-hole keep-out | 12.6 to 24.87 mm above the bottom edge, 30.1 to 106.9 mm from the left edge |
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.
Documentation, firmware and design resources for Valentino Build 3.
| 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 |
| 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 |
| 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 |