raspberry_pi_iot 0.0.8 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. checksums.yaml +5 -5
  2. data/doc/IoT.html +8 -6
  3. data/doc/{Bus.html → RaspberryPiIoT.html} +21 -26
  4. data/doc/_index.html +84 -77
  5. data/doc/class_list.html +1 -1
  6. data/doc/file.LICENSE.html +92 -0
  7. data/doc/file.README.html +63 -29
  8. data/doc/file_list.html +5 -0
  9. data/doc/frames.html +1 -1
  10. data/doc/index.html +63 -29
  11. data/doc/method_list.html +170 -202
  12. data/doc/top-level-namespace.html +4 -6
  13. data/lib/bus.rb +0 -2
  14. data/lib/iot.rb +4 -2
  15. data/lib/iot/actuator.rb +7 -0
  16. data/lib/iot/bh1750.rb +54 -0
  17. data/lib/iot/binary_actuator.rb +7 -0
  18. data/lib/iot/binary_effector.rb +11 -0
  19. data/lib/iot/binary_receptor.rb +20 -0
  20. data/lib/iot/binary_sensor.rb +7 -0
  21. data/lib/iot/bmx_sensor.rb +73 -0
  22. data/lib/iot/button.rb +100 -0
  23. data/lib/iot/dht_sensor.rb +41 -0
  24. data/lib/iot/digital_actuator.rb +7 -0
  25. data/lib/iot/digital_effector.rb +67 -0
  26. data/lib/iot/digital_receptor.rb +17 -0
  27. data/lib/iot/digital_sensor.rb +7 -0
  28. data/lib/iot/ds18b20.rb +25 -0
  29. data/lib/iot/effector.rb +32 -0
  30. data/lib/iot/hcsr501.rb +8 -0
  31. data/lib/iot/humiture_sensor.rb +27 -0
  32. data/lib/iot/led.rb +64 -0
  33. data/lib/iot/led_pwm.rb +8 -0
  34. data/lib/iot/led_rgb.rb +86 -0
  35. data/lib/iot/max44009.rb +84 -0
  36. data/lib/iot/receptor.rb +38 -0
  37. data/lib/iot/sensor.rb +8 -0
  38. data/lib/iot/temperature_sensor.rb +51 -0
  39. data/lib/raspberry_pi.rb +46 -1
  40. data/lib/raspberry_pi_iot.rb +9 -3
  41. data/lib/raspberry_pi_iot/version.rb +3 -0
  42. data/lib/thermal_sensor.rb +2 -3
  43. data/test/test.sh +17 -0
  44. data/test/test.txt +173 -0
  45. data/test/test_Raspberry_Pi_IoT.rb +10 -0
  46. data/test/test_bh1750.rb +9 -4
  47. data/test/{standalone_test_bmp280.rb → test_bme280.rb} +24 -19
  48. data/test/test_bmp280.rb +52 -0
  49. data/test/test_button.rb +25 -14
  50. data/test/test_dht11.rb +3 -3
  51. data/test/test_dht22.rb +35 -0
  52. data/test/test_ds18b20.rb +4 -3
  53. data/test/test_helper.rb +6 -0
  54. data/test/test_info.rb +24 -3
  55. data/test/test_ky008.rb +41 -0
  56. data/test/test_led.rb +9 -9
  57. data/test/test_led_rgb.rb +28 -5
  58. data/test/test_max44009_gy49.rb +4 -4
  59. data/test/test_thermal.rb +27 -0
  60. metadata +103 -59
  61. data/doc/Actuator.html +0 -145
  62. data/doc/BH1750.html +0 -541
  63. data/doc/BME280.html +0 -276
  64. data/doc/BMP280.html +0 -276
  65. data/doc/BMxSensor.html +0 -557
  66. data/doc/BinaryActuator.html +0 -177
  67. data/doc/BinaryEffector.html +0 -246
  68. data/doc/BinaryReceptor.html +0 -387
  69. data/doc/BinarySensor.html +0 -168
  70. data/doc/Button.html +0 -986
  71. data/doc/DHT11.html +0 -287
  72. data/doc/DHT22.html +0 -287
  73. data/doc/DHTxxSensor.html +0 -361
  74. data/doc/DS18B20.html +0 -339
  75. data/doc/DigitalActuator.html +0 -164
  76. data/doc/DigitalEffector.html +0 -636
  77. data/doc/DigitalReceptor.html +0 -242
  78. data/doc/DigitalSensor.html +0 -162
  79. data/doc/Effector.html +0 -257
  80. data/doc/HCSR501.html +0 -172
  81. data/doc/HumitureSensor.html +0 -453
  82. data/doc/LED.html +0 -784
  83. data/doc/MAX44009.html +0 -830
  84. data/doc/RaspberryPi.html +0 -317
  85. data/doc/Receptor.html +0 -257
  86. data/doc/Sensor.html +0 -145
  87. data/doc/TemperatureSensor.html +0 -644
  88. data/lib/bh1750.rb +0 -46
  89. data/lib/binary_actuator.rb +0 -5
  90. data/lib/binary_effector.rb +0 -12
  91. data/lib/binary_receptor.rb +0 -19
  92. data/lib/binary_sensor.rb +0 -5
  93. data/lib/bmx_sensor.rb +0 -85
  94. data/lib/button.rb +0 -70
  95. data/lib/dht_sensor.rb +0 -36
  96. data/lib/digital_actuator.rb +0 -5
  97. data/lib/digital_effector.rb +0 -69
  98. data/lib/digital_receptor.rb +0 -16
  99. data/lib/digital_sensor.rb +0 -5
  100. data/lib/ds18b20.rb +0 -24
  101. data/lib/effector.rb +0 -32
  102. data/lib/hcsr501.rb +0 -7
  103. data/lib/humiture_sensor.rb +0 -26
  104. data/lib/led.rb +0 -58
  105. data/lib/led_pwm.rb +0 -6
  106. data/lib/led_rgb.rb +0 -101
  107. data/lib/max44009.rb +0 -77
  108. data/lib/receptor.rb +0 -33
  109. data/lib/temperature_sensor.rb +0 -49
@@ -1,46 +0,0 @@
1
- require 'bus'
2
-
3
- # BH1750 - ambient light sensor
4
- class BH1750
5
- DEVICE = 0x23 # I2C sensor address
6
- POWER_DOWN = 0x00 # off state
7
- POWER_ON = 0x01 # on state
8
- RESET = 0x07 # reset state: POWER_DOWN = 0x00
9
-
10
- CONTINUOUS_LOW_RES_MODE = 0x13 # Measure with resolution 4.0 lx and timing ~16 ms
11
- CONTINUOUS_HIGH_RES_MODE_1 = 0x10 # Measure with resolution 1.0 lx and timing ~120 ms
12
- CONTINUOUS_HIGH_RES_MODE_2 = 0x11 # Measure with resolution 0.5 lx and timing ~120 ms
13
- ONE_TIME_LOW_RES_MODE = 0x23 # Measure with resolution 4.0 lx, POWER DOWN after measuring
14
- ONE_TIME_HIGH_RES_MODE_1 = 0x20 # Measure with resolution 1.0 lx, POWER DOWN after measuring
15
- ONE_TIME_HIGH_RES_MODE_2 = 0x21 # Measure with resolution 0.5 lx, POWER DOWN after measuring
16
-
17
- def initialize(device_address=DEVICE, bus_number=1)
18
- @sensor_name = 'BH1750'
19
- Bus::I2C.bus_number = bus_number
20
- @device_address = device_address
21
-
22
- @i2c_bus = Bus::I2C.bus
23
- @device = I2CDevice.new(address: DEVICE, driver: I2CDevice::Driver::I2CDev.new(@i2c_bus))
24
- @resolution = ONE_TIME_HIGH_RES_MODE_1
25
- @length = 2
26
- @value = read_sensor
27
- end
28
-
29
- # Read raw data from sensor and convert it to numeric
30
- def read_sensor
31
- data = @device.i2cget(@resolution, @length)
32
- @value = to_f(data)
33
- end
34
-
35
- # Return value in Lux
36
- def lux
37
- read_sensor
38
- @value
39
- end
40
-
41
- private
42
- # Convert 2 bytes of sensor data to a float number
43
- def to_f(data)
44
- return ((data[1].ord + (256 * data[0].ord)) / 1.2)
45
- end
46
- end
@@ -1,5 +0,0 @@
1
- require 'binary_effector'
2
-
3
- # BinaryActuator - a synomym for BinaryEffector
4
- class BinaryActuator < BinaryEffector
5
- end
@@ -1,12 +0,0 @@
1
- require 'digital_effector'
2
-
3
- # BinaryEffector - effector with binary logic
4
- class BinaryEffector < DigitalEffector
5
- @pin = nil # pin
6
-
7
- def initialize(pin=25, state=:low)
8
- super({:pin => pin}, :low)
9
- @pin = pin
10
- end
11
-
12
- end
@@ -1,19 +0,0 @@
1
- require 'receptor'
2
-
3
- # BinaryReceptor - receptor/actuator with binary logic
4
- class BinaryReceptor < Receptor
5
- @pin = nil # pin
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
@@ -1,5 +0,0 @@
1
- require 'binary_receptor'
2
-
3
- # BinarySensor - a synonym for BinaryReceptor
4
- class BinarySensor < BinaryReceptor
5
- end
@@ -1,85 +0,0 @@
1
- gem 'i2c'
2
- require 'i2c'
3
- gem 'i2c-bme280'
4
- require 'i2c/bme280'
5
- require 'humiture_sensor'
6
-
7
- # BMP/BME humidity, temperature & atmospheric pressure sensor family
8
- class BMxSensor < HumitureSensor
9
-
10
- def initialize(sensor_name, bus=1)
11
- @sensor_name = sensor_name
12
- @sensor = I2C::Driver::BME280.new(device: bus)
13
- @temperature, @humidity, @pressure = read_data
14
- end
15
-
16
- def read_data
17
- data = @sensor.all
18
- @temperature = data[:t]
19
- @pressure = data[:p]
20
- @humidity = data[:h]
21
- [@temperature, @humidity, @pressure]
22
- end
23
-
24
- # standard atmospheric pressure @ sea level = 1.01325 bar = 1013.25 mbar = 101.325 kPa
25
- def hPa
26
- @pressure
27
- end
28
-
29
- def pressure(mode=:hPa)
30
- case mode
31
- when :hPa # 1 hPa = 100 Pa = 1 mbar = 1 hPa = 0.750062 mmHg [@ 0°C]
32
- hPa
33
- when :kPa # 1 kPa = 1000 Pa = 10 hPa
34
- hPa / 10.0
35
- when :Pa # 1 Pa = 0.01 hPa = 0.001 kPa
36
- hPa * 100.0
37
- when :mmHg # 1 mmHg = 1.3332236842105263 hPa = 133.322387415 Pa = 1.000000142466321... Torr
38
- hPa / (1013.25 / 760) # 760 mmHg = 101.3250144354 kPa
39
- when :atm # 1 atm = 101325 Pa = 101.325 kPa
40
- hPa / 1013.25
41
- when :bar # 1 bar ≡ 100000 Pa = 1000 hPa = 0.987 atm = 750.06 mmHg = 750.06 Torr
42
- hPa / 1000.0
43
- when :mbar # 1 mbar = 0.001 bar
44
- bar * 1000.0
45
- when :Torr # 1 Torr = 1/760 atm = 101325/760 Pa = 0.999999857533699... mmHg
46
- (hPa / 1013.25) / 760
47
- else
48
- hPa
49
- end
50
- end
51
-
52
- def to_s
53
- sprintf "%5.2f°C, %5.2f %%, %5.2f mmHg", @temperature, @humidity, pressure(:mmHg)
54
- end
55
-
56
- # OLD implementation with 'i2c-devices.gem'
57
- #require 'bus'
58
- #require 'i2c/device/bme280'
59
-
60
- # BMP/BME humidity, temperature & atmospheric pressure sensor family
61
- # def initialize(sensor_name)
62
- # @sensor_name = sensor_name
63
- # @sensor = I2CDevice::Bme280.new
64
- # @temperature, @humidity, @pressure = read_data
65
- # end
66
- # def read_data
67
- # data = @sensor.calc_sensor_data
68
- # @temperature = data[:temp]
69
- # @pressure = data[:pressure]
70
- # @humidity = data[:hum]
71
- # [@temperature, @humidity, @pressure]
72
- # end
73
- end
74
-
75
- class BMP280 < BMxSensor
76
- def initialize
77
- super('BMP280')
78
- end
79
- end
80
-
81
- class BME280 < BMxSensor
82
- def initialize
83
- super('BME280')
84
- end
85
- end
@@ -1,70 +0,0 @@
1
- require 'binary_receptor'
2
-
3
- # Button - simple push button
4
- class Button < BinaryReceptor
5
- attr_writer :measure_pause
6
-
7
- def initialize(pin)
8
- receptor_name = 'BUTTON'
9
- super(pin)
10
- @measure_pause = 0.01
11
- @long_click = 1.0
12
- @short_interval = 0.2
13
- @intervals = []
14
- end
15
-
16
- # Is button pressed?
17
- def pressed?
18
- low?
19
- end
20
-
21
- # Is button not pressed?
22
- def not_pressed?
23
- high?
24
- end
25
-
26
- # Wait for the 1st pressing of button
27
- def wait_for_press
28
- wait_for_presses(1)
29
- end
30
-
31
- # Wait for several sequential presses
32
- def wait_for_presses(attempts=2)
33
- @intervals = []
34
- attempts.times do
35
- interval = []
36
- timer = Time.now
37
- while not_pressed? do
38
- sleep @measure_pause
39
- end
40
- interval << Time.now-timer
41
- timer = Time.now
42
- while pressed? do
43
- sleep @measure_pause
44
- end
45
- interval << Time.now-timer
46
- @intervals << interval
47
- end
48
- @intervals
49
- end
50
-
51
- # Was the button pressed once?
52
- def single_press?(intervals=@intervals)
53
- intervals.size == 1
54
- end
55
-
56
- # Was the button pressed twice?
57
- def double_press?(intervals=@intervals)
58
- intervals.size == 2 && intervals[1][0] <= @short_interval
59
- end
60
-
61
- # Was the button pressed 3 times?
62
- def triple_press?(intervals=@intervals)
63
- intervals.size == 3
64
- end
65
-
66
- # Was the button pressed for more than @long_click?
67
- def long_press?(intervals=@intervals)
68
- intervals.size == 1 && intervals[0][1] >= @long_click
69
- end
70
- end
@@ -1,36 +0,0 @@
1
- require 'humiture_sensor'
2
- require 'dht-sensor-ffi'
3
-
4
- # DHT11/22 humidity & temperature sensor family
5
- class DHTxxSensor < HumitureSensor
6
-
7
- def initialize(pin, sensor_model)
8
- @pin = pin
9
- @sensor_name = 'DHT'+sensor_model.to_s
10
- @sensor_model = sensor_model.to_i
11
- @temperature, @humidity = read_data
12
- end
13
-
14
- # Read values by 'DhtSensor.read' from 'dht-sensor-ffi'
15
- def read_data
16
- sensor_data = DhtSensor.read(@pin, @sensor_model)
17
- @temperature = sensor_data.temp
18
- @humidity = sensor_data.humidity
19
- [@temperature, @humidity]
20
- end
21
-
22
- end
23
-
24
- # DHT11 - junior model, lower presicion
25
- class DHT11 < DHTxxSensor
26
- def initialize(pin)
27
- super(pin, 11)
28
- end
29
- end
30
-
31
- # DHT11 - senior model, higher presicion
32
- class DHT22 < DHTxxSensor
33
- def initialize(pin)
34
- super(pin, 22)
35
- end
36
- end
@@ -1,5 +0,0 @@
1
- require 'digital_effector'
2
-
3
- # DigitalActuator - a synonym for DigitalEffector
4
- class DigitalActuator < DigitalEffector
5
- end
@@ -1,69 +0,0 @@
1
- require 'effector'
2
-
3
- RPi::GPIO.set_warnings(false)
4
- RPi::GPIO.set_numbering :bcm
5
-
6
- # DigitalEffector - effector/actuator with digitized control
7
- class DigitalEffector < Effector
8
- @pin = nil
9
- @pins = {} # GPIO pins
10
-
11
- def initialize(pins, state=:low)
12
- @states = {}
13
- @pins = pins
14
- @pins.each_value do |pin|
15
- RPi::GPIO.setup pin, :as => :output, :initialize => state
16
- @states[pin] = (state == :high)
17
- end
18
- @pin = pins.values[0]
19
- end
20
-
21
- def self.on(pin=@pin)
22
- RPi::GPIO.set_high pin
23
- end
24
-
25
- def self.off(pin=@pin)
26
- RPi::GPIO.set_low pin
27
- end
28
-
29
- def on(pin=@pin)
30
- BinaryEffector.on @pin
31
- @states[pin] = true
32
- end
33
-
34
- def off(pin=@pin)
35
- BinaryEffector.off @pin
36
- @states[pin] = false
37
- end
38
-
39
- def on?(pin=@pin)
40
- state = nil
41
- if pin.class.name == 'Fixnum' # by number
42
- state = @states[pin]
43
- elsif @pins[pin] # by name
44
- state = @states[@pins[pin]]
45
- end
46
- state
47
- end
48
-
49
- def off?(pin=@pin)
50
- !on?(pin)
51
- end
52
-
53
- private
54
- def pin_number(pin)
55
- if pin.class.name == 'Fixnum' # by number
56
- pin
57
- elsif @pins[pin] # by name
58
- @pins[pin]
59
- end
60
- end
61
-
62
- def high?(pin=@pin)
63
- RPi::GPIO.high? pin
64
- end
65
-
66
- def low?(pin=@pin)
67
- RPi::GPIO.low? pin
68
- end
69
- end
@@ -1,16 +0,0 @@
1
- require 'receptor'
2
-
3
- # DigitalReceptor - receptor with digitized values
4
- class DigitalReceptor < Receptor
5
- @@one_wire_bus = '/sys/bus/w1/devices'
6
- @sensor_file = nil
7
-
8
- def self.one_wire_file(prefix='28*', device='w1_slave')
9
- files = Dir[@@one_wire_bus+'/'+prefix]
10
- if files.size > 0 then
11
- @sensor_file = files[0]+'/'+device
12
- end
13
- @sensor_file
14
- end
15
-
16
- end
@@ -1,5 +0,0 @@
1
- require 'digital_receptor'
2
-
3
- # DigitalSensor - a synonym for DigitalReceptor
4
- class DigitalSensor < DigitalReceptor
5
- end
@@ -1,24 +0,0 @@
1
- require 'temperature_sensor'
2
-
3
- # DS18B20 - high precision temperature sensor with 1-wire interface
4
- class DS18B20 < TemperatureSensor
5
-
6
- def initialize(device='w1_slave')
7
- self.name = 'DS18B20'
8
- @sensor_file = DigitalReceptor.one_wire_file('28*', device)
9
- if @sensor_file
10
- @temperature = read_data
11
- else
12
- raise "#{self.name} - Sensor NOT FOUND!"
13
- end
14
- end
15
-
16
- def read_data
17
- File.open(@sensor_file, 'r') do |f|
18
- value = f.read
19
- @temperature = value.scan(/t=(\d+)/).flatten[0].to_i/1000.0
20
- end
21
- @temperature
22
- end
23
- end
24
-
@@ -1,32 +0,0 @@
1
- # https://github.com/ClockVapor/rpi_gpio
2
- require 'rpi_gpio'
3
-
4
- RPi::GPIO.set_warnings(false)
5
- RPi::GPIO.set_numbering :bcm
6
-
7
- # Effector - a controlled physical device that performs some (useful) action
8
- class Effector
9
- @model = 'N/A'
10
- @name = 'N/A'
11
-
12
- def name
13
- @name
14
- end
15
-
16
- def model_name
17
- @model
18
- end
19
-
20
- protected
21
- def name=(name)
22
- @name = name
23
- end
24
-
25
- def model_name=(name)
26
- @model_name = name
27
- end
28
- end
29
-
30
- # Actuator - a synonym for Effector
31
- class Actuator < Effector
32
- end