/
Sensors.py
144 lines (115 loc) · 3.49 KB
/
Sensors.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
import Adafruit_DHT
import time
import logging
import logging.handlers
import picamera
import RPi.GPIO as GPIO
import Adafruit_GPIO.SPI as SPI
import Adafruit_MCP3008
from datetime import datetime
# DHT-11 Power Pin
dht11_power = 17
# DHT-11 Data Pin
dht11_data = 3
# MCP3008 & Vegetronix power pin
mcp3008_power = 27
# ADC channel vegatronix is on
veg_chan = 0
# Software SPI Configuration
CLK = 11
MISO = 9
MOSI = 10
CS = 8
mcp = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI)
# Set up GPIO pins
GPIO.setmode(GPIO.BCM)
GPIO.setup(dht11_power, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(mcp3008_power, GPIO.OUT, initial=GPIO.LOW)
def getTempHum():
"""
Returns Temperature and Humidity
"""
humidity = 0.0
temperature = 0.0
# Set up logger
logger = logging.getLogger(__name__)
handler = logging.handlers.RotatingFileHandler(
filename='logs/sensors.log',
maxBytes=16992,
backupCount=7
)
handler.setFormatter(
logging.Formatter(fmt="%(asctime)s %(levelname)s:%(message)s")
)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
# Turn sensor on
GPIO.output(dht11_power, GPIO.HIGH)
# Calculate average temperature and humidity
for i in range(10):
# Get data from DHT 11 on pin 3
h, t = Adafruit_DHT.read_retry(11, dht11_data)
if h == None or t == None:
logger.error("DHT11 sensor failure")
i = i - 1
if (i == -1):
# Turn sensor off.
GPIO.output(dht11_power, GPIO.LOW)
return (-1, -1)
break
humidity = humidity + h
temperature = temperature + t
humidity = humidity / (i+1)
temperature = temperature / (i+1)
# Convert to F
temperature = temperature * 9/5.0 + 32
logger.info(
'Temp: {0:0.1f} F Humidity: {1:0.1f} %'.format(temperature, humidity))
# Turn sensor off.
GPIO.output(dht11_power, GPIO.LOW)
# Add information to web app.
return (temperature, humidity)
def getSoilMoisture():
"""
Returns soil moisture
"""
# Set up logger
logger = logging.getLogger(__name__)
handler = logging.handlers.RotatingFileHandler(
filename='logs/sensors.log',
maxBytes=16992,
backupCount=7
)
handler.setFormatter(
logging.Formatter(fmt="%(asctime)s %(levelname)s:%(message)s")
)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
# Turn sensor on.
GPIO.output(mcp3008_power, GPIO.HIGH)
# Sleep to give the ADC and sensor time to power on.
time.sleep(0.5)
value = mcp.read_adc(veg_chan)
if value == None:
logger.error("Vegatronix sensor failure")
# Turn sensor off.
GPIO.output(mcp3008_power, GPIO.LOW)
return -1
percent = float(value)/931 * 100
if percent > 100:
percent = 100
logger.info("Soil moisture at %3.1f%%" % (percent))
# Turn sensor off.
GPIO.output(mcp3008_power, GPIO.LOW)
return percent
def getPic():
"""
Take picture with camera and store in imgs/
Returns name of new image.
"""
#name = '%s.jpg' % datetime.today().strftime("%c")
#name = name.replace(' ', '_')
name = 'Capture.jpg'
with picamera.PiCamera() as camera:
camera.capture('dynamic/%s' % name)
return name