I have a Aerogarden Harvest Elite Slim. The LCD broke, and the company went out of business. I cant source any replacement LCDs (one source on Alibaba, but probably expensive?)
I'm thinking of replacing the entire logic board with an ESP32

Functionalities to replicate:
- It has a menu with buttons - a manual light toggle button, ect
- It automatically turns on and off the pump (5 mins on, 25 mins off)
- It automatically turns on and off the light (at a specific time of day, for 17 hours per day)
- Has a reed switch which detects when the water level is too low - alerts you & doesn't pump
- Reminds you every 14 days to add fertilizer
- Counts the days of growth for this crop of plants
Details from Tinkering
There is a 5 terminal connector that connects the front logic board with the power board. The pins of it are labeled:
- Light
- Ground
- +12
- H+
- H-

Using an oscilloscope, multimeter, and lab bench power supply, I have found that:
- In order to turn on the LEDs for the growth light portion, you only need to apply 3.3v DC between ground and the light pin on the connector. The LED panel itself can be directly driven at 23.5v for full power
- When the pump is running, there is a square wave between the H+ and H- pins that goes between +3.3v and -3.3v. If I measure between either of the H pins, and ground, I see a square wave between 0 and 3.3v. They frequency of the oscillations is once every 17ms. The H+ and H- connectors connect to the power board -> Go to a chip (labeled CR689 B003), and the outputs of that chip seem to drive the pump at 13.6v AC (its not smooth AC, it's still a square wave), and this makes the pump run. The CR689 works just fine. It seems to take this +3.3v and -3.3v signal from the H+ and H- pins, and turns it into +13.6v to -13.6v. The signal is on continuously while the pump is running (for say 10 minutes on power up), and the microcontroller seems to stop the H+ and H- square wave, which stops the pump

Research
An ESP32 would be able to replicate these functionalities quite easily:
- Turn on and off the light is as easiy as digitalWrite high and low
- The differential signal (H+ and H-) at 60hz is easily accomplished with a Hardware Timer Interrupt
def square_wave_interrupt(timer):
global pump_state
if not pump_enabled:
H_PLUS_PIN.off()
H_MINUS_PIN.off()
return
pump_state = not pump_state
if pump_state:
H_PLUS_PIN.on() # H+ = HIGH
H_MINUS_PIN.off() # H- = LOW (creates +3.3V differential)
else:
H_PLUS_PIN.off() # H+ = LOW
H_MINUS_PIN.on() # H- = HIGH (creates -3.3V differential)
# Then later in the INIT function
square_wave_timer = Timer(0)
square_wave_timer.init(period=8, mode=Timer.PERIODIC, callback=square_wave_interrupt)
Further considerations
- Need to tap into that Reed switch in order to alert when water level is too low
- maybe replace with digispark instead? Only need 5 pins (h+,h-,led,Reed,indicator)