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
@@ -0,0 +1,17 @@
1
+ require_relative 'receptor'
2
+
3
+ module IoT
4
+ # DigitalReceptor - receptor with digitized values
5
+ class DigitalReceptor < IoT::Receptor
6
+ @@one_wire_bus = '/sys/bus/w1/devices'
7
+ @sensor_file = nil
8
+
9
+ def self.one_wire_file(prefix='28*', device='w1_slave')
10
+ files = Dir[@@one_wire_bus+'/'+prefix]
11
+ if files.size > 0 then
12
+ @sensor_file = files[0]+'/'+device
13
+ end
14
+ @sensor_file
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,7 @@
1
+ require_relative 'digital_receptor'
2
+
3
+ module IoT
4
+ # DigitalSensor - a synonym for DigitalReceptor
5
+ class DigitalSensor < IoT::DigitalReceptor
6
+ end
7
+ end
@@ -0,0 +1,25 @@
1
+ require_relative 'temperature_sensor'
2
+
3
+ # DS18B20 - high precision temperature sensor with 1-wire interface
4
+ module IoT
5
+ class DS18B20 < IoT::TemperatureSensor
6
+
7
+ def initialize(device='w1_slave')
8
+ self.name = 'DS18B20'
9
+ @sensor_file = DigitalReceptor.one_wire_file('28*', device)
10
+ if @sensor_file
11
+ @temperature = read_data
12
+ else
13
+ raise "#{self.name} - Sensor NOT FOUND!"
14
+ end
15
+ end
16
+
17
+ def read_data
18
+ File.open(@sensor_file, 'r') do |f|
19
+ value = f.read
20
+ @temperature = value.scan(/t=(\d+)/).flatten[0].to_i/1000.0
21
+ end
22
+ @temperature
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,32 @@
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
+ module IoT
8
+ # Effector - a controlled physical device that performs some (useful) action
9
+ class Effector
10
+ def initialize
11
+ @model = 'N/A'
12
+ @name = 'N/A'
13
+ end
14
+
15
+ def name
16
+ @name
17
+ end
18
+
19
+ def model_name
20
+ @model
21
+ end
22
+
23
+ protected
24
+ def name=(name)
25
+ @name = name
26
+ end
27
+
28
+ def model_name=(name)
29
+ @model_name = name
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'binary_sensor'
2
+
3
+ module IoT
4
+ # HCSR501 - PIR sensor
5
+ class HCSR501 < IoT::BinarySensor
6
+ # TODO: implement and test
7
+ end
8
+ end
@@ -0,0 +1,27 @@
1
+ require_relative 'temperature_sensor'
2
+
3
+ module IoT
4
+ # HumitureSensor - combined humidity & temperature sensor
5
+ class HumitureSensor < IoT::TemperatureSensor
6
+ @humidity = 0.0
7
+ @temperature = 0.0
8
+
9
+ def initialize
10
+ @humidity, @temperature = read_data
11
+ end
12
+
13
+ def read_data
14
+ [@humidity, @temperature]
15
+ end
16
+
17
+ # Humidity in per cents
18
+ def humidity
19
+ @humidity
20
+ end
21
+
22
+ # Temperature & humidity as a string
23
+ def to_s
24
+ sprintf "%5.2f°, %5.2f %%", @temperature, @humidity
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,64 @@
1
+ require_relative 'binary_effector'
2
+
3
+ module IoT
4
+ # LED - Light Emitting Diode
5
+ class LED < IoT::BinaryEffector
6
+ def initialize(pin)
7
+ super(pin)
8
+ self.name = 'LED'
9
+ end
10
+
11
+ # Turn on the LED.
12
+ def on(pin=@pin)
13
+ super(pin)
14
+ end
15
+
16
+ # Turn off the LED.
17
+ def off(pin=@pin)
18
+ super(pin)
19
+ end
20
+
21
+ # Repeat 'repeat' times: light the LED for 'switched_on' secs, then pause for 'switched_off' secs
22
+ def blink(repeat=3, switched_on=0.25, switched_off=0.5)
23
+ repeat.times do |n|
24
+ on
25
+ sleep switched_on
26
+ off
27
+ sleep switched_off
28
+ end
29
+ end
30
+
31
+ # Turn the LED on for N seconds.
32
+ def on_for(seconds=1)
33
+ on
34
+ sleep seconds
35
+ off
36
+ end
37
+
38
+ # Turn the LED off for N seconds.
39
+ def off_for(seconds=1)
40
+ off
41
+ sleep seconds
42
+ on
43
+ end
44
+ end
45
+
46
+ # Experimental methods with names in Russian
47
+ class LED
48
+ def LED.создать(pin = 25)
49
+ LED.new(pin)
50
+ end
51
+
52
+ def включить
53
+ on
54
+ end
55
+
56
+ def выключить
57
+ off
58
+ end
59
+
60
+ def мигать(repeat=3, switched_on=0.25, switched_off=0.5)
61
+ blink(repeat, switched_on, switched_off)
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'led'
2
+
3
+ module IoT
4
+ class LED
5
+ class PWM
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,86 @@
1
+ require_relative 'led'
2
+
3
+ module IoT
4
+ class LED
5
+ class RGB < IoT::DigitalEffector
6
+ @red = nil # GPIO pins
7
+ @green = nil #
8
+ @blue = nil #
9
+
10
+ def initialize(red = 17, green = 27, blue = 22)
11
+ super({:red => red, :green => green, :blue => blue}, :low)
12
+ @red = red
13
+ @green = green
14
+ @blue = blue
15
+ self.name = 'RGB LED'
16
+ end
17
+
18
+ def on(color=:all)
19
+ color = :aoi if color == :aqua
20
+ case color
21
+ when :red
22
+ super @red
23
+ when :green
24
+ super @green
25
+ when :blue
26
+ super @blue
27
+ when :yellow
28
+ super @red
29
+ super @green
30
+ when :aoi
31
+ super @blue
32
+ super @green
33
+ when :all
34
+ super @red
35
+ super @green
36
+ super @blue
37
+ else
38
+ end
39
+ end
40
+
41
+ def off(color=:all)
42
+ color = :aoi if color == :aqua
43
+ case color
44
+ when :red
45
+ super @red
46
+ when :green
47
+ super @green
48
+ when :blue
49
+ super @blue
50
+ when :yellow
51
+ super @red
52
+ super @green
53
+ when :aoi
54
+ super @blue
55
+ super @green
56
+ when :all
57
+ super @red
58
+ super @green
59
+ super @blue
60
+ else
61
+ all_off
62
+ end
63
+ end
64
+
65
+ def all_on
66
+ on :all
67
+ end
68
+
69
+ def all_off
70
+ off :all
71
+ end
72
+
73
+ def blink(list = :all, repeat=3, switched_on=0.25, switched_off=0.5)
74
+ colors = (list == :all) ? [:red, :green, :blue] : (list.class == Array ? list : [list])
75
+ repeat.times do |n|
76
+ colors.each do |color|
77
+ on color
78
+ sleep switched_on
79
+ off color
80
+ sleep switched_off
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,84 @@
1
+ require 'bus'
2
+
3
+ module IoT
4
+ # MAX44009 - low-power ambient Light Sensor
5
+ # Output: digital, Bus: I²C, Range: 0.045..188,000 Lux, VCC: 1.7..3.6V, Operating Current: 0.65µA
6
+ # https://datasheets.maximintegrated.com/en/ds/MAX44009.pdf
7
+ class MAX44009
8
+ MAX44009_DEFAULT_ADDRESS = 0x4A
9
+ # MAX44009 Register Map
10
+ MAX44009_REG_INTR_STATUS = 0x00 # Interrupt Status Register
11
+ MAX44009_REG_INTR_ENABLE = 0x01 # Interrupt Enable Register
12
+ MAX44009_REG_CONFIG = 0x02 # Configuration Register
13
+ MAX44009_REG_LUX_HIGH = 0x03 # Lux High Byte
14
+ MAX44009_REG_LUX_LOW = 0x04 # Lux Low Byte
15
+ MAX44009_REG_THRES_UP_HI = 0x05 # Upper Threshold High Byte
16
+ MAX44009_REG_THRES_LO_HI = 0x06 # Upper Threshold Low Byte
17
+ MAX44009_REG_THRES_TIMER = 0x07 # Threshold Timer
18
+ # MAX44009 INTERRUPT ENABLE REGISTER
19
+ MAX44009_REG_INTR_ENABLE_NO_ASSRT = 0x00 # The INT pin and the INTS bit are not asserted even if an interrupt event has occurred
20
+ MAX44009_REG_INTR_ENABLE_TRIGGER = 0x01 # Detection of an interrupt event triggers a hardware interrupt
21
+ # MAX44009 CONFIGURATION REGISTER
22
+ MAX44009_REG_CONFIG_CONTMODE_DEFAULT = 0x00 # Default mode
23
+ MAX44009_REG_CONFIG_CONTMODE_CONTIN = 0x80 # Continuous mode
24
+ MAX44009_REG_CONFIG_MANUAL_DEFAULT = 0x00 # Default mode of configuration is used for the IC
25
+ MAX44009_REG_CONFIG_MANUAL_MODEON = 0x40 # Manual mode of configuration is used for the IC
26
+ MAX44009_REG_CONFIG_CDR_NODIVIDED = 0x00 # Current not divided. All of the photodiode current goes to the ADC
27
+ MAX44009_REG_CONFIG_CDR_DIVIDED = 0x08 # Current divided by 8
28
+ MAX44009_REG_CONFIG_INTRTIMER_800 = 0x00 # Integration Time = 800ms, This is a preferred mode for boosting low-light sensitivity
29
+ MAX44009_REG_CONFIG_INTRTIMER_400 = 0x01 # Integration Time = 400ms
30
+ MAX44009_REG_CONFIG_INTRTIMER_200 = 0x02 # Integration Time = 200ms
31
+ MAX44009_REG_CONFIG_INTRTIMER_100 = 0x03 # Integration Time = 100ms, This is a preferred mode for high-brightness applications
32
+ MAX44009_REG_CONFIG_INTRTIMER_50 = 0x04 # Integration Time = 50ms, Manual Mode only
33
+ MAX44009_REG_CONFIG_INTRTIMER_25 = 0x05 # Integration Time = 25ms, Manual Mode only
34
+ MAX44009_REG_CONFIG_INTRTIMER_12_5 = 0x06 # Integration Time = 12.5ms, Manual Mode only
35
+ MAX44009_REG_CONFIG_INTRTIMER_6_25 = 0x07 # Integration Time = 6.25ms, Manual Mode only
36
+
37
+ DEVICE = MAX44009_DEFAULT_ADDRESS # I2C sensor address
38
+
39
+ def initialize(i2c_bus='/dev/i2c-1')
40
+ @sensor_name = 'MAX44009'
41
+ @i2c_bus = i2c_bus
42
+ @device = I2CDevice.new(address: DEVICE, driver: I2CDevice::Driver::I2CDev.new(@i2c_bus))
43
+ write_config()
44
+ @length = 2
45
+ @value = read_sensor
46
+ end
47
+
48
+ def name
49
+ @sensor_name
50
+ end
51
+
52
+ def write_config()
53
+ # Select the configuration register data from the given provided values
54
+ config = (MAX44009_REG_CONFIG_CONTMODE_CONTIN | MAX44009_REG_CONFIG_MANUAL_MODEON | MAX44009_REG_CONFIG_CDR_NODIVIDED | MAX44009_REG_CONFIG_INTRTIMER_800)
55
+ @device.i2cset(MAX44009_REG_CONFIG, config)
56
+ end
57
+
58
+ def read_sensor
59
+ # Read data back from MAX44009_REG_LUX_HIGH(0x03), 2 bytes, luminance MSB, luminance LSB
60
+ data = @device.i2cget(MAX44009_REG_LUX_HIGH, 2)
61
+ @value = data_to_lux(data)
62
+ end
63
+
64
+ def lux
65
+ # Return value in LX
66
+ read_sensor
67
+ @value
68
+ end
69
+
70
+ private
71
+ # Convert the data to lux
72
+ def data_to_lux(data)
73
+ exponent = (data[0].ord & 0xF0) >> 4
74
+ mantissa = ((data[0].ord & 0x0F) << 4) | (data[1].ord & 0x0F)
75
+ luminance = ((2 ** exponent) * mantissa) * 0.045
76
+ luminance
77
+ end
78
+
79
+ # convert sensor data to a float number
80
+ def to_f(data)
81
+ return ((data[1].ord + (256 * data[0].ord)) / 1.2)
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,38 @@
1
+ require 'rpi_gpio'
2
+
3
+ RPi::GPIO.set_warnings(false)
4
+ RPi::GPIO.set_numbering :bcm
5
+
6
+ module IoT
7
+ # Receptor - physical device that can provide info about real world
8
+ class Receptor
9
+ def initialize
10
+ @model = 'N/A'
11
+ @name = 'N/A'
12
+ @value = nil
13
+ end
14
+
15
+ def name
16
+ @name
17
+ end
18
+
19
+ def model_name
20
+ @model
21
+ end
22
+
23
+ def read
24
+ @value
25
+ end
26
+
27
+ alias read_sensor read
28
+
29
+ protected
30
+ def name=(name)
31
+ @name = name
32
+ end
33
+
34
+ def model_name=(name)
35
+ @model_name = name
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'receptor'
2
+
3
+ module IoT
4
+ # Sensor - a synonym for Receptor
5
+ class Sensor < IoT::Receptor
6
+
7
+ end
8
+ end
@@ -0,0 +1,51 @@
1
+ require_relative 'digital_sensor'
2
+
3
+ module IoT
4
+ # TemperatureSensor - temperature sensing receptor
5
+ class IoT::TemperatureSensor < IoT::DigitalSensor
6
+ @temperature = 0.0
7
+
8
+ def initialize
9
+ @temperature = read_data
10
+ end
11
+
12
+ def read_data
13
+ @temperature
14
+ end
15
+
16
+ def celsius
17
+ @temperature
18
+ end
19
+
20
+ def fahrenheit
21
+ @temperature * 9.0 / 5.0 + 32
22
+ end
23
+
24
+ def kelvin
25
+ @temperature + 273.15
26
+ end
27
+
28
+ def reaumur
29
+ @temperature * 0.8
30
+ end
31
+
32
+ def to_s
33
+ sprintf "%5.2f°C", @temperature
34
+ end
35
+
36
+ def temperature(mode=:celsius)
37
+ case mode
38
+ when :celsius
39
+ celsius
40
+ when :fahrenheit
41
+ fahrenheit
42
+ when :kelvin
43
+ kelvin
44
+ when :reaumur
45
+ reaumur
46
+ else
47
+ celsius
48
+ end
49
+ end
50
+ end
51
+ end