Skip to content

Hardware and commissioning

Target inspected in September 2026

  • pi@192.168.1.216 (formerly .213): Raspberry Pi Zero W Rev 1.1, BCM2835, ARMv6, 32-bit Raspbian 13, kernel 6.18.50+rpt-rpi-v6 at handover, glibc 2.41.
  • Device nodes observed: /dev/gpiochip0, /dev/gpiochip4, /dev/i2c-1, /dev/i2c-2, /dev/spidev0.0.
  • No HAT identity was returned from /proc/device-tree/hat, so the exact PCB revision remains unknown. The existing working Python driver uses the manufacturer's Grow mapping below. A 23 September Rust diagnostic read all three connected channels: channel 1 around 10.49Hz and channels 2 and 3 around 6.33Hz.
  • /dev/gpiochip0 is pinctrl-bcm2835; /dev/gpiochip4 resolves to the same chip. The Rust diagnostic successfully requested all three channels as inputs.

Reference wiring

Pimoroni's Grow product page identifies the sensors as pulse-frequency output, approximately 2–30Hz. The official moisture driver maps channels 1, 2 and 3 to BCM GPIO 23, 8 and 25. Its Grow HAT Mini schematic is linked from the manufacturer page; the implementer also checked a schematic mirror.

Channel BCM GPIO Physical header pin
1 23 16
2 8 24
3 25 22

The Rust driver requests only these configured lines as rising-edge inputs through GPIO character-device ABI v2. GPIO chip offsets must match BCM numbering. Confirm the chip label and line names with gpioinfo before setting hardware_confirmed = true. No I2C scanning, pump lines, display, buzzer or output requests are needed.

GPIO8 can conflict with SPI CE0. Pimoroni's reference installation notes describe dtoverlay=spi0-cs,cs0_pin=14 for the Grow display wiring. Inspect the current boot configuration and line owner if GPIO8 is busy; do not automatically change overlays or release another driver's lines.

Commissioning checks

  1. Deliberately change each probe's condition and confirm its raw frequency responds; steady readings prove pulse input, not moisture response.
  2. Measure calibration endpoints for each actual probe and plant setup, if percentages are desired.
  3. Check the probe or cable originally plugged into channel 2. After swapping channels 2 and 3, channel 2 produced pulses and channel 3 had none in three consecutive windows. The fault followed that probe or cable. Reseat or replace it, then repeat the diagnostic.

The existing boot overlay is dtoverlay=spi0-1cs,cs0_pin=7,no_miso; it was left unchanged. See the baseline and handover record. Stop the running sensor service before requesting its GPIO lines from a separate diagnostic.

Pump 1 gave two attended, one-second test pulses through the Grow HAT output. Manual Rust pump control is now available; see manual pump commands. Automatic watering remains disabled. Pump model/electrical margin and delivered flow still need verification before watering is enabled.

Optional display and buttons

The display follow-up ports the archived, previously working Python settings: ST7735 on /dev/spidev0.0, SPI mode 0 at 4MHz, DC=BCM9, backlight=BCM12, 160x80 image rotated 270 degrees, panel offsets 26/1. Buttons A/B/X/Y are active-low inputs on BCM⅚/16/24 with pull-ups and 30ms debounce. These lines are requested only when panel_enabled = true and the hardware backend is confirmed. The existing cs0_pin=7,no_miso overlay leaves BCM8 available for the channel 2 probe and BCM9 for display DC; do not replace that overlay blindly.

During the September 2026 display follow-up, this support was deployed on the Pi. The Rust service logs a successful SPI frame write for RUST DISPLAY TEST, and MQTT returns the four released button snapshots. Physical LCD appearance and a real button press still need a person beside the Pi to confirm.