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.
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