This repository has been archived by the owner on Nov 11, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhardware.py
178 lines (143 loc) · 5.15 KB
/
hardware.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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
# -*- coding: utf-8 -*-
"""
Created on Thu Apr 4 15:04:08 2019
@author: Xu Liang
"""
import RPi.GPIO as GPIO
from gpiozero import DigitalInputDevice
import Adafruit_DHT
from smbus import SMBus
from sys import argv
class Hardware:
def __init__(self, leds, pins):
self.leds = leds
self.pins = pins
GPIO.setmode(GPIO.BCM)
GPIO.setup(self.leds.values(), GPIO.OUT)
self.HumidityTemperature = Adafruit_DHT.DHT11
self.lightAddress = 0x23
self.lightMode = 0x20
self.Light = SMBus(1)
GPIO.setup(self.pins['PIR'], GPIO.IN)
for pin in self.pins['PIR']:
GPIO.add_event_detect(pin, GPIO.RISING, callback=self._onPIR)
self.PIRON = False
GPIO.setup(self.pins['Sound'], GPIO.IN)
GPIO.add_event_detect(self.pins['Sound'], GPIO.RISING, callback=self._onSound)
self.SOUNDON = False
GPIO.setup(self.pins['Human'], GPIO.IN)
GPIO.add_event_detect(self.pins['Human'], GPIO.RISING, callback=self._onHuman)
self.HUMANON = False
def _set(self, led, state):
if state:
GPIO.output(led, GPIO.HIGH)
else:
GPIO.output(led, GPIO.LOW)
def _getHumidityTemperature(self):
humidity, temperature = Adafruit_DHT.read_retry(self.HumidityTemperature, self.pins['HumidityTemperature'])
return humidity, temperature
def _getLight(self):
reading = self.Light.read_i2c_block_data(self.lightAddress, self.lightMode)
def convertToNumber(data):
return (data[1] + (256 * data[0]))/1.2
return convertToNumber(reading)
def _onPIR(self, *args):
self.PIRON = True
def _getPIR(self):
if self.PIRON:
self.PIRON = False
return 1
else:
return 0
def _onSound(self, *args):
self.SOUNDON = True
def _getSound(self):
if self.SOUNDON:
self.SOUNDON = False
return 1
else:
return 0
def _getTemperature(self):
reading = self.Temperature.read_word_data(self.temperatureAddress, 0) & 0xFFFF
reading = ((reading << 8) & 0xFF00) + (reading >> 8)
return (reading / 32.0) / 8.0
def _onHuman(self, *args):
self.HUMANON = True
def _getHuman(self):
if self.HUMANON:
self.HUMANON = False
return 1
else:
return 0
def update(self, booked=None, occupied=None):
if booked:
self._set(self.leds['YELLOW'], booked)
self._set(self.leds['GREEN'], (not booked))
if occupied:
self._set(self.leds['YELLOW'], occupied)
self._set(self.leds['GREEN'], (not occupied))
# Sets the appropriate lighting/screen based on the booked and occupied status
def download(self):
data = {}
data['Humidity'], data['Temperature'] = self._getHumidityTemperature()
data['Light'] = self._getLight()
data['Sound'] = self._getSound()
data['PIR'] = self._getPIR()
data['Human'] = self._getHuman()
print(data)
return data
# Returns dictionary of sensors and their respective values
'''
Human Radar Sensor:
from gpiozero import DigitalInputDevice
inputPin = # input pin number
radar = DigitalInputDevice(inputPin, pull_up=False, bounce_time=2.0)
def detect():
# Actions on detection
radar.when_activated = detect
Humidity Sensor:
import Adafruit_DHT
sensor = Adafruit_DHT.DHT11
inputPin = # input pin number
humidity, temperature = Adafruit_DHT.read_retry(sensor, inputPin)
# The above line retries up to 15 times with a 2 second wait to get a reading.
# Can also use Adafruit_DHT.read(sensor, inputPin) for a single read attempt.
Light Sensor:
import smbus
device = 0x23
mode = 0x20
# refer to bh1750.py to change mode
bus = smbus.SMBus(1)
data = bus.read_i2c_block_data(device, mode)
def convertToNumber(data):
return (data[1] + (256 * data[0]))/1.2
lightlevel = convertToNumber(data)
PIR Sensor:
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
inputPin = # input pin number
GPIO.setup(inputPin, GPIO.IN)
motion = GPIO.input(inputPin)
# High (== 1) when someone is detected, other wise Low (== 0)
Sound Sensor:
import RPI.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
inputPin = # input pin number
GPIO.setup(inputPin, GPIO.IN)
def detect():
# Actions on detection
GPIO.add_event_detect(inputPin, GPIO.BOTH, bouncetime=300)
GPIO.add_event_callback(inputPin, detect)
# The above two lines detect when the input goes from High to Low.
Temperature Sensor:
import smbus
import sys
device = 0x48
if len(sys.argv):
device = int(sys.argv[1], 16)
# Check if another device address is specified.
bus = smbus.SMBus(1)
data = bus.read_word_data(device, 0) & 0xFFFF
data = ((data << 8) & 0xFF00) + (data >> 8)
temperature = (data / 32.0) / 8.0
'''