69 lines
1.5 KiB
Python
69 lines
1.5 KiB
Python
import time
|
|
|
|
import adafruit_mcp3xxx.mcp3008 as MCP
|
|
import board
|
|
import busio
|
|
import digitalio
|
|
import RPi.GPIO as gp
|
|
|
|
from adafruit_mcp3xxx.analog_in import AnalogIn
|
|
|
|
def _set_up_capacitive_sensor():
|
|
# spi bus
|
|
spi = busio.SPI(clock=board.SCK, MISO=board.MISO, MOSI=board.MOSI)
|
|
# chip
|
|
chip = digitalio.DigitalInOut(board.D5)
|
|
mcp = MCP.MCP3008(spi, chip)
|
|
|
|
return mcp
|
|
|
|
def _get_sensor_reading():
|
|
mcp = _set_up_capacitive_sensor()
|
|
analog_input_channel = AnalogIn(mcp, MCP.P5)
|
|
|
|
return analog_input_channel
|
|
|
|
def _set_up_pump(rly=None):
|
|
# use GPIO numbering
|
|
gp.setmode(gp.BCM)
|
|
gp.setup(rly, gp.OUT)
|
|
|
|
|
|
def _pump_on_off(rly=None):
|
|
_set_up_pump(rly)
|
|
try:
|
|
# on
|
|
gp.output(rly, gp.LOW)
|
|
time.sleep(1)
|
|
# off
|
|
gp.output(rly, gp.HIGH)
|
|
time.sleep(1)
|
|
except KeyboardInterrupt:
|
|
gp.cleanup()
|
|
# else:
|
|
# gp.cleanup()
|
|
|
|
|
|
def read_moisture_level(verbose=False):
|
|
sensor = _get_sensor_reading()
|
|
if verbose:
|
|
print(f"Voltage is {sensor.voltage:.3f} V")
|
|
return sensor.voltage
|
|
|
|
def water_plants():
|
|
moisture = read_moisture_level()
|
|
|
|
try:
|
|
while True:
|
|
if moisture > 1.2:
|
|
_pump_on_off(rly=21)
|
|
moisture = read_moisture_level()
|
|
else:
|
|
time.sleep(1)
|
|
moisture = read_moisture_level()
|
|
except KeyboardInterrupt:
|
|
exit
|
|
|
|
if __name__ == "__main__":
|
|
water_plants()
|