raspberry_pi_iot 0.0.8 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/doc/IoT.html +8 -6
- data/doc/{Bus.html → RaspberryPiIoT.html} +21 -26
- data/doc/_index.html +84 -77
- data/doc/class_list.html +1 -1
- data/doc/file.LICENSE.html +92 -0
- data/doc/file.README.html +63 -29
- data/doc/file_list.html +5 -0
- data/doc/frames.html +1 -1
- data/doc/index.html +63 -29
- data/doc/method_list.html +170 -202
- data/doc/top-level-namespace.html +4 -6
- data/lib/bus.rb +0 -2
- data/lib/iot.rb +4 -2
- data/lib/iot/actuator.rb +7 -0
- data/lib/iot/bh1750.rb +54 -0
- data/lib/iot/binary_actuator.rb +7 -0
- data/lib/iot/binary_effector.rb +11 -0
- data/lib/iot/binary_receptor.rb +20 -0
- data/lib/iot/binary_sensor.rb +7 -0
- data/lib/iot/bmx_sensor.rb +73 -0
- data/lib/iot/button.rb +100 -0
- data/lib/iot/dht_sensor.rb +41 -0
- data/lib/iot/digital_actuator.rb +7 -0
- data/lib/iot/digital_effector.rb +67 -0
- data/lib/iot/digital_receptor.rb +17 -0
- data/lib/iot/digital_sensor.rb +7 -0
- data/lib/iot/ds18b20.rb +25 -0
- data/lib/iot/effector.rb +32 -0
- data/lib/iot/hcsr501.rb +8 -0
- data/lib/iot/humiture_sensor.rb +27 -0
- data/lib/iot/led.rb +64 -0
- data/lib/iot/led_pwm.rb +8 -0
- data/lib/iot/led_rgb.rb +86 -0
- data/lib/iot/max44009.rb +84 -0
- data/lib/iot/receptor.rb +38 -0
- data/lib/iot/sensor.rb +8 -0
- data/lib/iot/temperature_sensor.rb +51 -0
- data/lib/raspberry_pi.rb +46 -1
- data/lib/raspberry_pi_iot.rb +9 -3
- data/lib/raspberry_pi_iot/version.rb +3 -0
- data/lib/thermal_sensor.rb +2 -3
- data/test/test.sh +17 -0
- data/test/test.txt +173 -0
- data/test/test_Raspberry_Pi_IoT.rb +10 -0
- data/test/test_bh1750.rb +9 -4
- data/test/{standalone_test_bmp280.rb → test_bme280.rb} +24 -19
- data/test/test_bmp280.rb +52 -0
- data/test/test_button.rb +25 -14
- data/test/test_dht11.rb +3 -3
- data/test/test_dht22.rb +35 -0
- data/test/test_ds18b20.rb +4 -3
- data/test/test_helper.rb +6 -0
- data/test/test_info.rb +24 -3
- data/test/test_ky008.rb +41 -0
- data/test/test_led.rb +9 -9
- data/test/test_led_rgb.rb +28 -5
- data/test/test_max44009_gy49.rb +4 -4
- data/test/test_thermal.rb +27 -0
- metadata +103 -59
- data/doc/Actuator.html +0 -145
- data/doc/BH1750.html +0 -541
- data/doc/BME280.html +0 -276
- data/doc/BMP280.html +0 -276
- data/doc/BMxSensor.html +0 -557
- data/doc/BinaryActuator.html +0 -177
- data/doc/BinaryEffector.html +0 -246
- data/doc/BinaryReceptor.html +0 -387
- data/doc/BinarySensor.html +0 -168
- data/doc/Button.html +0 -986
- data/doc/DHT11.html +0 -287
- data/doc/DHT22.html +0 -287
- data/doc/DHTxxSensor.html +0 -361
- data/doc/DS18B20.html +0 -339
- data/doc/DigitalActuator.html +0 -164
- data/doc/DigitalEffector.html +0 -636
- data/doc/DigitalReceptor.html +0 -242
- data/doc/DigitalSensor.html +0 -162
- data/doc/Effector.html +0 -257
- data/doc/HCSR501.html +0 -172
- data/doc/HumitureSensor.html +0 -453
- data/doc/LED.html +0 -784
- data/doc/MAX44009.html +0 -830
- data/doc/RaspberryPi.html +0 -317
- data/doc/Receptor.html +0 -257
- data/doc/Sensor.html +0 -145
- data/doc/TemperatureSensor.html +0 -644
- data/lib/bh1750.rb +0 -46
- data/lib/binary_actuator.rb +0 -5
- data/lib/binary_effector.rb +0 -12
- data/lib/binary_receptor.rb +0 -19
- data/lib/binary_sensor.rb +0 -5
- data/lib/bmx_sensor.rb +0 -85
- data/lib/button.rb +0 -70
- data/lib/dht_sensor.rb +0 -36
- data/lib/digital_actuator.rb +0 -5
- data/lib/digital_effector.rb +0 -69
- data/lib/digital_receptor.rb +0 -16
- data/lib/digital_sensor.rb +0 -5
- data/lib/ds18b20.rb +0 -24
- data/lib/effector.rb +0 -32
- data/lib/hcsr501.rb +0 -7
- data/lib/humiture_sensor.rb +0 -26
- data/lib/led.rb +0 -58
- data/lib/led_pwm.rb +0 -6
- data/lib/led_rgb.rb +0 -101
- data/lib/max44009.rb +0 -77
- data/lib/receptor.rb +0 -33
- data/lib/temperature_sensor.rb +0 -49
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<title>
|
|
7
7
|
Top Level Namespace
|
|
8
8
|
|
|
9
|
-
— Documentation by YARD 0.9.
|
|
9
|
+
— Documentation by YARD 0.9.20
|
|
10
10
|
|
|
11
11
|
</title>
|
|
12
12
|
|
|
@@ -82,12 +82,10 @@
|
|
|
82
82
|
<p class="children">
|
|
83
83
|
|
|
84
84
|
|
|
85
|
-
<strong class="modules">Modules:</strong> <span class='object_link'><a href="
|
|
85
|
+
<strong class="modules">Modules:</strong> <span class='object_link'><a href="IoT.html" title="IoT (module)">IoT</a></span>, <span class='object_link'><a href="RaspberryPiIoT.html" title="RaspberryPiIoT (module)">RaspberryPiIoT</a></span>
|
|
86
86
|
|
|
87
87
|
|
|
88
88
|
|
|
89
|
-
<strong class="classes">Classes:</strong> <span class='object_link'><a href="Actuator.html" title="Actuator (class)">Actuator</a></span>, <span class='object_link'><a href="BH1750.html" title="BH1750 (class)">BH1750</a></span>, <span class='object_link'><a href="BME280.html" title="BME280 (class)">BME280</a></span>, <span class='object_link'><a href="BMP280.html" title="BMP280 (class)">BMP280</a></span>, <span class='object_link'><a href="BMxSensor.html" title="BMxSensor (class)">BMxSensor</a></span>, <span class='object_link'><a href="BinaryActuator.html" title="BinaryActuator (class)">BinaryActuator</a></span>, <span class='object_link'><a href="BinaryEffector.html" title="BinaryEffector (class)">BinaryEffector</a></span>, <span class='object_link'><a href="BinaryReceptor.html" title="BinaryReceptor (class)">BinaryReceptor</a></span>, <span class='object_link'><a href="BinarySensor.html" title="BinarySensor (class)">BinarySensor</a></span>, <span class='object_link'><a href="Button.html" title="Button (class)">Button</a></span>, <span class='object_link'><a href="DHT11.html" title="DHT11 (class)">DHT11</a></span>, <span class='object_link'><a href="DHT22.html" title="DHT22 (class)">DHT22</a></span>, <span class='object_link'><a href="DHTxxSensor.html" title="DHTxxSensor (class)">DHTxxSensor</a></span>, <span class='object_link'><a href="DS18B20.html" title="DS18B20 (class)">DS18B20</a></span>, <span class='object_link'><a href="DigitalActuator.html" title="DigitalActuator (class)">DigitalActuator</a></span>, <span class='object_link'><a href="DigitalEffector.html" title="DigitalEffector (class)">DigitalEffector</a></span>, <span class='object_link'><a href="DigitalReceptor.html" title="DigitalReceptor (class)">DigitalReceptor</a></span>, <span class='object_link'><a href="DigitalSensor.html" title="DigitalSensor (class)">DigitalSensor</a></span>, <span class='object_link'><a href="Effector.html" title="Effector (class)">Effector</a></span>, <span class='object_link'><a href="HCSR501.html" title="HCSR501 (class)">HCSR501</a></span>, <span class='object_link'><a href="HumitureSensor.html" title="HumitureSensor (class)">HumitureSensor</a></span>, <span class='object_link'><a href="LED.html" title="LED (class)">LED</a></span>, <span class='object_link'><a href="MAX44009.html" title="MAX44009 (class)">MAX44009</a></span>, <span class='object_link'><a href="Receptor.html" title="Receptor (class)">Receptor</a></span>, <span class='object_link'><a href="Sensor.html" title="Sensor (class)">Sensor</a></span>, <span class='object_link'><a href="TemperatureSensor.html" title="TemperatureSensor (class)">TemperatureSensor</a></span>
|
|
90
|
-
|
|
91
89
|
|
|
92
90
|
</p>
|
|
93
91
|
|
|
@@ -102,9 +100,9 @@
|
|
|
102
100
|
</div>
|
|
103
101
|
|
|
104
102
|
<div id="footer">
|
|
105
|
-
Generated on
|
|
103
|
+
Generated on Wed Jun 10 16:52:49 2020 by
|
|
106
104
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
107
|
-
0.9.
|
|
105
|
+
0.9.20 (ruby-2.5.5).
|
|
108
106
|
</div>
|
|
109
107
|
|
|
110
108
|
</div>
|
data/lib/bus.rb
CHANGED
data/lib/iot.rb
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
require_relative 'iot/receptor'
|
|
2
|
+
require_relative 'iot/effector'
|
|
3
|
+
|
|
1
4
|
# IoT - Internet of Things classes and modules
|
|
2
5
|
module IoT
|
|
3
|
-
|
|
4
6
|
# Logging events and actions
|
|
5
7
|
class Log
|
|
6
|
-
|
|
8
|
+
attr_accessor :file_name
|
|
7
9
|
|
|
8
10
|
def initialize(file_name='/tmp/iot.log')
|
|
9
11
|
@file_name = file_name
|
data/lib/iot/actuator.rb
ADDED
data/lib/iot/bh1750.rb
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
require 'bus'
|
|
2
|
+
require_relative 'digital_receptor'
|
|
3
|
+
|
|
4
|
+
module IoT
|
|
5
|
+
# BH1750 - ambient light sensor
|
|
6
|
+
class BH1750 < IoT::DigitalReceptor
|
|
7
|
+
DEVICE = 0x23 # I2C sensor address
|
|
8
|
+
POWER_DOWN = 0x00 # off state
|
|
9
|
+
POWER_ON = 0x01 # on state
|
|
10
|
+
RESET = 0x07 # reset state: POWER_DOWN = 0x00
|
|
11
|
+
|
|
12
|
+
CONTINUOUS_LOW_RES_MODE = 0x13 # Measure with resolution 4.0 lx and timing ~16 ms
|
|
13
|
+
CONTINUOUS_HIGH_RES_MODE_1 = 0x10 # Measure with resolution 1.0 lx and timing ~120 ms
|
|
14
|
+
CONTINUOUS_HIGH_RES_MODE_2 = 0x11 # Measure with resolution 0.5 lx and timing ~120 ms
|
|
15
|
+
ONE_TIME_LOW_RES_MODE = 0x23 # Measure with resolution 4.0 lx, POWER DOWN after measuring
|
|
16
|
+
ONE_TIME_HIGH_RES_MODE_1 = 0x20 # Measure with resolution 1.0 lx, POWER DOWN after measuring
|
|
17
|
+
ONE_TIME_HIGH_RES_MODE_2 = 0x21 # Measure with resolution 0.5 lx, POWER DOWN after measuring
|
|
18
|
+
|
|
19
|
+
def initialize(device_address=DEVICE, bus_number=1)
|
|
20
|
+
@sensor_name = 'BH1750'
|
|
21
|
+
Bus::I2C.bus_number = bus_number
|
|
22
|
+
@device_address = device_address
|
|
23
|
+
|
|
24
|
+
@i2c_bus = Bus::I2C.bus
|
|
25
|
+
@device = I2CDevice.new(address: DEVICE, driver: I2CDevice::Driver::I2CDev.new(@i2c_bus))
|
|
26
|
+
@resolution = ONE_TIME_HIGH_RES_MODE_1
|
|
27
|
+
@length = 2
|
|
28
|
+
@value = read
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Read raw data from sensor and convert it to numeric
|
|
32
|
+
def read
|
|
33
|
+
data = @device.i2cget(@resolution, @length)
|
|
34
|
+
@value = to_f(data)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Return value in Lux
|
|
38
|
+
def lux
|
|
39
|
+
read
|
|
40
|
+
@value
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def name
|
|
45
|
+
@sensor_name
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
private
|
|
49
|
+
# Convert 2 bytes of sensor data to a float number
|
|
50
|
+
def to_f(data)
|
|
51
|
+
return ((data[1].ord + (256 * data[0].ord)) / 1.2)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require_relative 'receptor'
|
|
2
|
+
|
|
3
|
+
module IoT
|
|
4
|
+
# BinaryReceptor - receptor/actuator with binary logic
|
|
5
|
+
class BinaryReceptor < IoT::Receptor
|
|
6
|
+
|
|
7
|
+
def initialize(pin=21, pull=:up)
|
|
8
|
+
@pin = pin
|
|
9
|
+
RPi::GPIO.setup pin, :as => :input, :pull => pull
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def high?
|
|
13
|
+
RPi::GPIO.high? @pin
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def low?
|
|
17
|
+
RPi::GPIO.low? @pin
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
require 'i2c/backends/i2c-dev.rb'
|
|
2
|
+
require 'i2c/bme280'
|
|
3
|
+
require_relative 'humiture_sensor'
|
|
4
|
+
|
|
5
|
+
module IoT
|
|
6
|
+
# Bosch BMP/BME humidity, temperature & atmospheric pressure sensor family
|
|
7
|
+
class BMxSensor < IoT::HumitureSensor
|
|
8
|
+
|
|
9
|
+
def initialize(sensor_name='BMx280', bus=1)
|
|
10
|
+
@sensor_name = sensor_name
|
|
11
|
+
|
|
12
|
+
device = I2C::Dev.create("/dev/i2c-#{bus}")
|
|
13
|
+
@sensor = I2C::Driver::BME280.new(device: device)
|
|
14
|
+
@temperature, @humidity, @pressure = read_data
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def read_data
|
|
18
|
+
data = @sensor.all
|
|
19
|
+
@temperature = data[:t]
|
|
20
|
+
@pressure = data[:p]
|
|
21
|
+
@humidity = data[:h]
|
|
22
|
+
[@temperature, @humidity, @pressure]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def name
|
|
26
|
+
@sensor_name
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# standard atmospheric pressure @ sea level = 1.01325 bar = 1013.25 mbar = 101.325 kPa
|
|
30
|
+
def hPa
|
|
31
|
+
@pressure
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def pressure(mode=:hPa)
|
|
35
|
+
case mode
|
|
36
|
+
when :hPa # 1 hPa = 100 Pa = 1 mbar = 1 hPa = 0.750062 mmHg [@ 0°C]
|
|
37
|
+
hPa
|
|
38
|
+
when :kPa # 1 kPa = 1000 Pa = 10 hPa
|
|
39
|
+
hPa / 10.0
|
|
40
|
+
when :Pa # 1 Pa = 0.01 hPa = 0.001 kPa
|
|
41
|
+
hPa * 100.0
|
|
42
|
+
when :mmHg # 1 mmHg = 1.3332236842105263 hPa = 133.322387415 Pa = 1.000000142466321... Torr
|
|
43
|
+
hPa / (1013.25 / 760) # 760 mmHg = 101.3250144354 kPa
|
|
44
|
+
when :atm # 1 atm = 101325 Pa = 101.325 kPa
|
|
45
|
+
hPa / 1013.25
|
|
46
|
+
when :bar # 1 bar ≡ 100000 Pa = 1000 hPa = 0.987 atm = 750.06 mmHg = 750.06 Torr
|
|
47
|
+
hPa / 1000.0
|
|
48
|
+
when :mbar # 1 mbar = 0.001 bar
|
|
49
|
+
bar * 1000.0
|
|
50
|
+
when :Torr # 1 Torr = 1/760 atm = 101325/760 Pa = 0.999999857533699... mmHg
|
|
51
|
+
(hPa / 1013.25) / 760
|
|
52
|
+
else
|
|
53
|
+
hPa
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def to_s
|
|
58
|
+
sprintf "%5.2f°C, %5.2f %%, %5.2f mmHg", @temperature, @humidity, pressure(:mmHg)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
class BMP280 < IoT::BMxSensor # combined atmospheric pressure & temperature sensor
|
|
63
|
+
def initialize
|
|
64
|
+
super('BMP280')
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
class BME280 < IoT::BMxSensor # combined atmospheric pressure, temperature & humidity sensor
|
|
69
|
+
def initialize
|
|
70
|
+
super('BME280')
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
data/lib/iot/button.rb
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
require_relative 'binary_receptor'
|
|
2
|
+
|
|
3
|
+
module IoT
|
|
4
|
+
# Button - simple tactile / push button
|
|
5
|
+
class Button < IoT::BinaryReceptor
|
|
6
|
+
attr_writer :measure_pause
|
|
7
|
+
|
|
8
|
+
def initialize(pin)
|
|
9
|
+
@receptor_name = 'BUTTON'
|
|
10
|
+
super(pin)
|
|
11
|
+
@measure_pause = 0.01
|
|
12
|
+
@long_click = 1.0
|
|
13
|
+
@short_interval = 0.2
|
|
14
|
+
@timeout = 30
|
|
15
|
+
@intervals = []
|
|
16
|
+
# samples: wait time press time wait time press time
|
|
17
|
+
# double press: [[1.486804292, 0.090814152], [0.131284967, 0.13125429]]
|
|
18
|
+
# long press: [[0.910878286, 1.109352219]]
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def name
|
|
22
|
+
@receptor_name
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Is button being pressed?
|
|
26
|
+
def pressed?
|
|
27
|
+
low?
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Is button not being pressed?
|
|
31
|
+
def not_pressed?
|
|
32
|
+
high?
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def was_pressed?
|
|
36
|
+
@intervals.size > 0
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def was_not_pressed?
|
|
40
|
+
!was_pressed?
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Wait for the 1st pressing of button
|
|
44
|
+
def wait_for_press
|
|
45
|
+
wait_for_presses(1)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Wait for several sequential presses
|
|
49
|
+
def wait_for_presses(attempts=2, timeout=@timeout)
|
|
50
|
+
@intervals = []
|
|
51
|
+
attempts.times do
|
|
52
|
+
interval = []
|
|
53
|
+
timer = Time.now
|
|
54
|
+
while not_pressed? && (Time.now-timer) < timeout do
|
|
55
|
+
sleep @measure_pause
|
|
56
|
+
end
|
|
57
|
+
interval << Time.now-timer
|
|
58
|
+
timer = Time.now
|
|
59
|
+
while pressed? do
|
|
60
|
+
sleep @measure_pause
|
|
61
|
+
end
|
|
62
|
+
interval << Time.now-timer
|
|
63
|
+
@intervals << interval
|
|
64
|
+
end
|
|
65
|
+
@intervals
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Was the button pressed once?
|
|
69
|
+
def single_press?(intervals=@intervals)
|
|
70
|
+
intervals.size == 1
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Was the button pressed twice?
|
|
74
|
+
def double_press?(intervals=@intervals)
|
|
75
|
+
intervals.size == 2 && intervals[1][0] <= @short_interval
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Was the button pressed 3 times?
|
|
79
|
+
def triple_press?(intervals=@intervals)
|
|
80
|
+
intervals.size == 3
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Was the button pressed for more than @long_click?
|
|
84
|
+
def long_press?(intervals=@intervals)
|
|
85
|
+
intervals.size == 1 && intervals[0][1] >= @long_click
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def set_timeout(timeout)
|
|
89
|
+
@timeout = timeout
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def timeout?
|
|
93
|
+
min_wait_time = 60.0*60.0*60.00
|
|
94
|
+
@intervals.each do |interval|
|
|
95
|
+
min_wait_time = [min_wait_time, interval[0]].min
|
|
96
|
+
end
|
|
97
|
+
min_wait_time > @timeout
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require_relative 'humiture_sensor'
|
|
2
|
+
require 'dht-sensor-ffi'
|
|
3
|
+
|
|
4
|
+
module IoT
|
|
5
|
+
# DHT11/22 humidity & temperature sensor family
|
|
6
|
+
class DHTxxSensor < IoT::HumitureSensor
|
|
7
|
+
|
|
8
|
+
def initialize(pin, sensor_model)
|
|
9
|
+
@pin = pin
|
|
10
|
+
@sensor_name = 'DHT'+sensor_model.to_s
|
|
11
|
+
@sensor_model = sensor_model.to_i
|
|
12
|
+
@temperature, @humidity = read_data
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def name
|
|
16
|
+
@sensor_name
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Read values by 'DhtSensor.read' from 'dht-sensor-ffi'
|
|
20
|
+
def read_data
|
|
21
|
+
sensor_data = DhtSensor.read(@pin, @sensor_model)
|
|
22
|
+
@temperature = sensor_data.temp
|
|
23
|
+
@humidity = sensor_data.humidity
|
|
24
|
+
[@temperature, @humidity]
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# DHT11 - junior model, lower presicion
|
|
29
|
+
class DHT11 < DHTxxSensor
|
|
30
|
+
def initialize(pin)
|
|
31
|
+
super(pin, 11)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# DHT22 - senior model, higher presicion
|
|
36
|
+
class DHT22 < DHTxxSensor
|
|
37
|
+
def initialize(pin)
|
|
38
|
+
super(pin, 22)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
require_relative 'effector'
|
|
2
|
+
|
|
3
|
+
RPi::GPIO.set_warnings(false)
|
|
4
|
+
RPi::GPIO.set_numbering :bcm
|
|
5
|
+
|
|
6
|
+
module IoT
|
|
7
|
+
# DigitalEffector - effector/actuator with digitized control
|
|
8
|
+
class DigitalEffector < IoT::Effector
|
|
9
|
+
def initialize(pins={}, state=:low)
|
|
10
|
+
@pin = nil
|
|
11
|
+
@states = {} # ON / Off states for pin numbers
|
|
12
|
+
@pins = pins # DigitalEffector.new {red: 17, green: 28, blue: 22}
|
|
13
|
+
@pins.each_value do |pin|
|
|
14
|
+
RPi::GPIO.setup pin, :as => :output, :initialize => state
|
|
15
|
+
@states[pin] = (state == :high)
|
|
16
|
+
end
|
|
17
|
+
@pin = pins.values[0] # default pin
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def self.on(pin=@pin)
|
|
21
|
+
RPi::GPIO.set_high pin
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.off(pin=@pin)
|
|
25
|
+
RPi::GPIO.set_low pin
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def on(pin=@pin)
|
|
29
|
+
DigitalEffector.on pin
|
|
30
|
+
@states[pin_number(pin)] = true
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def off(pin=@pin)
|
|
34
|
+
DigitalEffector.off pin
|
|
35
|
+
@states[pin_number(pin)] = false
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def on?(pin=@pin)
|
|
39
|
+
@states[pin_number(pin)]
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def off?(pin=@pin)
|
|
43
|
+
!on?(pin)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
private
|
|
47
|
+
def pin_number(pin)
|
|
48
|
+
if (pin.class.name == 'Integer') || (pin.class.name == 'Fixnum') # by number
|
|
49
|
+
pin
|
|
50
|
+
elsif @pins[pin] # by name as Symbol
|
|
51
|
+
@pins[pin]
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def high?(pin=@pin)
|
|
56
|
+
RPi::GPIO.high? pin
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def low?(pin=@pin)
|
|
60
|
+
RPi::GPIO.low? pin
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def state
|
|
64
|
+
[@pins, @states]
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|