Skip to content

Commit ad2ed20

Browse files
author
simonmonk
committed
pi examples
1 parent 5e17630 commit ad2ed20

File tree

8 files changed

+122
-0
lines changed

8 files changed

+122
-0
lines changed

Icon

Whitespace-only changes.

arduino3V/Icon

Whitespace-only changes.

esp32/Icon

Whitespace-only changes.

raspberry_pi/01_meter.py

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import threading
2+
import time
3+
from guizero import App, Text
4+
from plant_monitor import PlantMonitor
5+
6+
pm = PlantMonitor()
7+
8+
app = App(title="Plant Monitor", width=550, height=300, layout="grid")
9+
10+
def update_readings(): # update fields with new temp and eCO2 readings
11+
while True:
12+
wetness_field.value = str(pm.get_wetness())
13+
temp_c_field.value = str(pm.get_temp())
14+
humidity_field.value = str(pm.get_humidity())
15+
time.sleep(1)
16+
17+
t1 = threading.Thread(target=update_readings)
18+
19+
# define the user interface
20+
Text(app, text="Wetness (%)", grid=[0,0], size=20)
21+
wetness_field = Text(app, text="-", grid=[1,0], size=100)
22+
Text(app, text="Temp (C)", grid=[0,1], size=20)
23+
temp_c_field = Text(app, text="-", grid=[1,1], size=100)
24+
Text(app, text="Humidity (%)", grid=[0,2], size=20)
25+
humidity_field = Text(app, text="-", grid=[1,2], size=100)
26+
t1.start() # start the thread that updates the readings
27+
app.display()

raspberry_pi/02_data_logger.py

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import time
2+
from aq import AQ
3+
4+
from plant_monitor import PlantMonitor
5+
pm = PlantMonitor()
6+
7+
interval = int(input("Enter interval between readings (seconds):"))
8+
file_name = input("Enter filename:")
9+
current_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
10+
print("Logging started at: " + current_time)
11+
print("Press CTRL-c to end logging")
12+
13+
f = open(file_name, "w")
14+
f.write("time(s)\twetness\ttemp(C)\thumidity(%)\n")
15+
print("time(s)\twetness\ttemp(C)\thumidity(%)\n")
16+
17+
last_update = 0
18+
t0 = int(time.monotonic())
19+
20+
try:
21+
while True:
22+
now = time.monotonic()
23+
if (now > last_update + interval):
24+
last_update = now
25+
t = str(int(now) - t0)
26+
wetness = str(pm.get_wetness())
27+
temp_c = str(pm.get_temp())
28+
humidity = str(int(pm.get_humidity()))
29+
f.write(t + "\t")
30+
f.write(wetness + "\t")
31+
f.write(temp_c + "\t")
32+
f.write(humidity + "\n")
33+
print(t + "\t" + wetness + "\t" + temp_c + "\t" + humidity)
34+
except:
35+
f.close()
36+
print("\nLogging to file " + file_name + " complete")
37+
current_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
38+
print("Logging ended at: " + current_time)

raspberry_pi/Icon

Whitespace-only changes.

raspberry_pi/plant_monitor.py

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import serial
2+
import time
3+
4+
class PlantMonitor:
5+
"""A Class for the MonkMakes Plant Monitor"""
6+
7+
wetness = 0
8+
temp = 0
9+
humidity = 0
10+
ser = None
11+
delay_period = 0.1
12+
13+
def __init__(self):
14+
self.ser = serial.Serial("/dev/ttyS0", 9600)
15+
16+
def get_wetness(self):
17+
self.send("w")
18+
self._wait_for_message()
19+
return self.wetness
20+
21+
def get_temp(self):
22+
self.send("t")
23+
self._wait_for_message()
24+
return self.temp
25+
26+
def get_humidity(self):
27+
self.send("h")
28+
self._wait_for_message()
29+
return self.humidity
30+
31+
def led_off(self):
32+
self.send("l")
33+
34+
def led_on(self):
35+
self.send("L")
36+
37+
def send(self, message):
38+
self.ser.write(bytes(message+"\n", 'utf-8'))
39+
time.sleep(self.delay_period)
40+
41+
def _wait_for_message(self):
42+
time.sleep(self.delay_period) # give attiny time to respond
43+
incoming_message = str(self.ser.readline()[:-2].decode("utf-8")) # rem>
44+
message_parts = incoming_message.split("=")
45+
if len(message_parts) == 2:
46+
code, value = message_parts
47+
if code == "w":
48+
self.wetness = float(value)
49+
elif code == "t":
50+
self.temp = float(value)
51+
elif code == "h":
52+
self.humidity = float(value)
53+
54+
pm = PlantMonitor()
55+
while True:
56+
print(pm.get_wetness())
57+
time.sleep(1)

raspbery_pi_pico/Icon

Whitespace-only changes.

0 commit comments

Comments
 (0)