raspberry_pi_iot 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +7 -0
  2. data/doc/Actuator.html +145 -0
  3. data/doc/BH1750.html +535 -0
  4. data/doc/BME280.html +276 -0
  5. data/doc/BMP280.html +276 -0
  6. data/doc/BMxSensor.html +559 -0
  7. data/doc/BinaryActuator.html +177 -0
  8. data/doc/BinaryEffector.html +246 -0
  9. data/doc/BinaryReceptor.html +387 -0
  10. data/doc/BinarySensor.html +168 -0
  11. data/doc/Bus.html +126 -0
  12. data/doc/Button.html +986 -0
  13. data/doc/DHT11.html +287 -0
  14. data/doc/DHT22.html +287 -0
  15. data/doc/DHTxxSensor.html +361 -0
  16. data/doc/DS18B20.html +339 -0
  17. data/doc/DigitalActuator.html +164 -0
  18. data/doc/DigitalEffector.html +636 -0
  19. data/doc/DigitalReceptor.html +242 -0
  20. data/doc/DigitalSensor.html +162 -0
  21. data/doc/Effector.html +257 -0
  22. data/doc/HCSR501.html +172 -0
  23. data/doc/HumitureSensor.html +453 -0
  24. data/doc/IoT.html +116 -0
  25. data/doc/LED.html +784 -0
  26. data/doc/MAX44009.html +830 -0
  27. data/doc/RaspberryPi.html +309 -0
  28. data/doc/Receptor.html +257 -0
  29. data/doc/Sensor.html +145 -0
  30. data/doc/TemperatureSensor.html +644 -0
  31. data/doc/_index.html +379 -0
  32. data/doc/class_list.html +51 -0
  33. data/doc/file_list.html +51 -0
  34. data/doc/frames.html +17 -0
  35. data/doc/index.html +379 -0
  36. data/doc/method_list.html +715 -0
  37. data/doc/top-level-namespace.html +112 -0
  38. data/lib/bh1750.rb +43 -0
  39. data/lib/binary_effector.rb +16 -0
  40. data/lib/binary_receptor.rb +23 -0
  41. data/lib/bmx_sensor.rb +86 -0
  42. data/lib/bus.rb +26 -0
  43. data/lib/button.rb +70 -0
  44. data/lib/dht_sensor.rb +36 -0
  45. data/lib/digital_effector.rb +56 -0
  46. data/lib/digital_receptor.rb +20 -0
  47. data/lib/ds18b20.rb +24 -0
  48. data/lib/effector.rb +32 -0
  49. data/lib/hcsr501.rb +7 -0
  50. data/lib/humiture_sensor.rb +26 -0
  51. data/lib/iot.rb +4 -0
  52. data/lib/led.rb +58 -0
  53. data/lib/led_pwm.rb +6 -0
  54. data/lib/led_rgb.rb +100 -0
  55. data/lib/max44009.rb +77 -0
  56. data/lib/raspberry_pi.rb +41 -0
  57. data/lib/raspberry_pi_iot.rb +3 -0
  58. data/lib/receptor.rb +33 -0
  59. data/lib/temperature_sensor.rb +49 -0
  60. data/lib/thermal_sensor.rb +22 -0
  61. metadata +203 -0
data/lib/led_rgb.rb ADDED
@@ -0,0 +1,100 @@
1
+ require 'led'
2
+
3
+ class LED
4
+ class RGB < DigitalEffector
5
+ @red = nil # GPIO pins
6
+ @green = nil #
7
+ @blue = nil #
8
+
9
+ def initialize(red = 17, green = 27, blue = 22)
10
+ super({:red => red, :green => green, :blue => blue}, :low)
11
+ @red = red
12
+ @green = green
13
+ @blue = blue
14
+ end
15
+
16
+ def red_on
17
+ DigitalEffector.on @red
18
+ end
19
+
20
+ def red_off
21
+ DigitalEffector.off @red
22
+ end
23
+
24
+ def green_on
25
+ DigitalEffector.on @green
26
+ end
27
+
28
+ def green_off
29
+ DigitalEffector.off @green
30
+ end
31
+
32
+ def blue_on
33
+ DigitalEffector.on @blue
34
+ end
35
+
36
+ def blue_off
37
+ DigitalEffector.off @blue
38
+ end
39
+
40
+ def on(color)
41
+ color = :aoi if color == :aqua
42
+ case color
43
+ when :red
44
+ red_on
45
+ when :green
46
+ green_on
47
+ when :blue
48
+ blue_on
49
+ when :yellow
50
+ red_on
51
+ green_on
52
+ when :aoi
53
+ blue_on
54
+ green_on
55
+ else
56
+ end
57
+ end
58
+
59
+ def off(color=:all)
60
+ color = :aoi if color == :aqua
61
+ case color
62
+ when :red
63
+ red_off
64
+ when :green
65
+ green_off
66
+ when :blue
67
+ blue_off
68
+ when :yellow
69
+ red_off
70
+ green_off
71
+ when :aoi
72
+ blue_off
73
+ green_off
74
+ when :all
75
+ all_off
76
+ else
77
+ all_off
78
+ end
79
+ end
80
+
81
+ def all_off
82
+ red_off
83
+ green_off
84
+ blue_off
85
+ end
86
+
87
+
88
+ def blink(list = :all, repeat=3, switched_on=0.25, switched_off=0.5)
89
+ colors = (list == :all) ? [:red, :green, :blue] : (list.class == Array ? list : [list])
90
+ repeat.times do |n|
91
+ colors.each do |color|
92
+ on color
93
+ sleep switched_on
94
+ off color
95
+ sleep switched_off
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
data/lib/max44009.rb ADDED
@@ -0,0 +1,77 @@
1
+ require 'bus'
2
+
3
+ # MAX44009 - low-power ambient Light Sensor
4
+ # Output: digital, Bus: I²C, Range: 0.045..188,000 Lux, VCC: 1.7..3.6V, Operating Current: 0.65µA
5
+ # https://datasheets.maximintegrated.com/en/ds/MAX44009.pdf
6
+ class MAX44009
7
+ MAX44009_DEFAULT_ADDRESS = 0x4A
8
+ # MAX44009 Register Map
9
+ MAX44009_REG_INTR_STATUS = 0x00 # Interrupt Status Register
10
+ MAX44009_REG_INTR_ENABLE = 0x01 # Interrupt Enable Register
11
+ MAX44009_REG_CONFIG = 0x02 # Configuration Register
12
+ MAX44009_REG_LUX_HIGH = 0x03 # Lux High Byte
13
+ MAX44009_REG_LUX_LOW = 0x04 # Lux Low Byte
14
+ MAX44009_REG_THRES_UP_HI = 0x05 # Upper Threshold High Byte
15
+ MAX44009_REG_THRES_LO_HI = 0x06 # Upper Threshold Low Byte
16
+ MAX44009_REG_THRES_TIMER = 0x07 # Threshold Timer
17
+ # MAX44009 INTERRUPT ENABLE REGISTER
18
+ MAX44009_REG_INTR_ENABLE_NO_ASSRT = 0x00 # The INT pin and the INTS bit are not asserted even if an interrupt event has occurred
19
+ MAX44009_REG_INTR_ENABLE_TRIGGER = 0x01 # Detection of an interrupt event triggers a hardware interrupt
20
+ # MAX44009 CONFIGURATION REGISTER
21
+ MAX44009_REG_CONFIG_CONTMODE_DEFAULT = 0x00 # Default mode
22
+ MAX44009_REG_CONFIG_CONTMODE_CONTIN = 0x80 # Continuous mode
23
+ MAX44009_REG_CONFIG_MANUAL_DEFAULT = 0x00 # Default mode of configuration is used for the IC
24
+ MAX44009_REG_CONFIG_MANUAL_MODEON = 0x40 # Manual mode of configuration is used for the IC
25
+ MAX44009_REG_CONFIG_CDR_NODIVIDED = 0x00 # Current not divided. All of the photodiode current goes to the ADC
26
+ MAX44009_REG_CONFIG_CDR_DIVIDED = 0x08 # Current divided by 8
27
+ MAX44009_REG_CONFIG_INTRTIMER_800 = 0x00 # Integration Time = 800ms, This is a preferred mode for boosting low-light sensitivity
28
+ MAX44009_REG_CONFIG_INTRTIMER_400 = 0x01 # Integration Time = 400ms
29
+ MAX44009_REG_CONFIG_INTRTIMER_200 = 0x02 # Integration Time = 200ms
30
+ MAX44009_REG_CONFIG_INTRTIMER_100 = 0x03 # Integration Time = 100ms, This is a preferred mode for high-brightness applications
31
+ MAX44009_REG_CONFIG_INTRTIMER_50 = 0x04 # Integration Time = 50ms, Manual Mode only
32
+ MAX44009_REG_CONFIG_INTRTIMER_25 = 0x05 # Integration Time = 25ms, Manual Mode only
33
+ MAX44009_REG_CONFIG_INTRTIMER_12_5 = 0x06 # Integration Time = 12.5ms, Manual Mode only
34
+ MAX44009_REG_CONFIG_INTRTIMER_6_25 = 0x07 # Integration Time = 6.25ms, Manual Mode only
35
+
36
+ DEVICE = MAX44009_DEFAULT_ADDRESS # I2C sensor address
37
+
38
+ def initialize(i2c_bus='/dev/i2c-1')
39
+ @sensor_name = 'MAX44009'
40
+ @i2c_bus = i2c_bus
41
+ @device = I2CDevice.new(address: DEVICE, driver: I2CDevice::Driver::I2CDev.new(@i2c_bus))
42
+ write_config()
43
+ @length = 2
44
+ @value = read_sensor
45
+ end
46
+
47
+ def write_config()
48
+ # Select the configuration register data from the given provided values
49
+ config = (MAX44009_REG_CONFIG_CONTMODE_CONTIN | MAX44009_REG_CONFIG_MANUAL_MODEON | MAX44009_REG_CONFIG_CDR_NODIVIDED | MAX44009_REG_CONFIG_INTRTIMER_800)
50
+ @device.i2cset(MAX44009_REG_CONFIG, config)
51
+ end
52
+
53
+ def read_sensor
54
+ # Read data back from MAX44009_REG_LUX_HIGH(0x03), 2 bytes, luminance MSB, luminance LSB
55
+ data = @device.i2cget(MAX44009_REG_LUX_HIGH, 2)
56
+ @value = data_to_lux(data)
57
+ end
58
+
59
+ # Return
60
+ def lux
61
+ read_sensor
62
+ @value
63
+ end
64
+
65
+ private
66
+ # Convert the data to lux
67
+ def data_to_lux(data)
68
+ exponent = (data[0].ord & 0xF0) >> 4
69
+ mantissa = ((data[0].ord & 0x0F) << 4) | (data[1].ord & 0x0F)
70
+ luminance = ((2 ** exponent) * mantissa) * 0.045
71
+ end
72
+
73
+ # convert sensor data to a float number
74
+ def to_f(data)
75
+ return ((data[1].ord + (256 * data[0].ord)) / 1.2)
76
+ end
77
+ end
@@ -0,0 +1,41 @@
1
+ module RaspberryPi
2
+ # https://www.raspberrypi-spy.co.uk/2012/09/checking-your-raspberry-pi-board-version/
3
+
4
+ # Pi Model 3B V1.2
5
+ def self.pi_model_old
6
+ info = `pinout | grep -Eo "Pi Model[^|]+"`
7
+ info.strip
8
+ end
9
+
10
+ def self.pi_model
11
+ info = `cat /proc/device-tree/model`
12
+ info.strip
13
+ end
14
+
15
+ # Revision : a22082
16
+ # SoC : BCM2837
17
+ # RAM : 1024Mb
18
+ # Storage : MicroSD
19
+ # USB ports : 4 (excluding power)
20
+ # Ethernet ports : 1
21
+ # Wi-fi : True
22
+ # Bluetooth : True
23
+ # Camera ports (CSI) : 1
24
+ # Display ports (DSI): 1
25
+ def self.hardware_info
26
+ info = {}
27
+ lines = ` pinout | grep ': '`
28
+ lines << `cat /proc/cpuinfo | grep ': '`
29
+ lines.split("\n").each do |line|
30
+ key, value = line.split(':')
31
+ key.strip!
32
+ if key == 'processor'
33
+ value = (value.to_i+1).to_s
34
+ key = 'Cores'
35
+ end
36
+ key = 'CPU name' if key == 'model name'
37
+ info[key] = value.strip
38
+ end
39
+ info
40
+ end
41
+ end
@@ -0,0 +1,3 @@
1
+ require 'raspberry_pi'
2
+ require 'receptor'
3
+ require 'effector'
data/lib/receptor.rb ADDED
@@ -0,0 +1,33 @@
1
+ require 'rpi_gpio'
2
+
3
+ RPi::GPIO.set_warnings(false)
4
+ RPi::GPIO.set_numbering :bcm
5
+
6
+ # Receptor - physical device that can provide info about real world
7
+ class Receptor
8
+ @model = 'N/A'
9
+ @name = 'N/A'
10
+ @value = nil
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
+ # Sensor - a synonym for Receptor
31
+ class Sensor < Receptor
32
+
33
+ end
@@ -0,0 +1,49 @@
1
+ require 'digital_receptor'
2
+
3
+ # TemperatureSensor - temperature sensing receptor
4
+ class TemperatureSensor < DigitalSensor
5
+ @temperature = 0.0
6
+
7
+ def initialize
8
+ @temperature = read_data
9
+ end
10
+
11
+ def read_data
12
+ @temperature
13
+ end
14
+ def celsius
15
+ @temperature
16
+ end
17
+
18
+ def fahrenheit
19
+ @temperature * 9.0 / 5.0 + 32
20
+ end
21
+
22
+ def kelvin
23
+ @temperature + 273.15
24
+ end
25
+
26
+ def reaumur
27
+ @temperature * 0.8
28
+ end
29
+
30
+ def to_s
31
+ sprintf "%5.2f°C", @temperature
32
+ end
33
+
34
+ def temperature(mode=:celsius)
35
+ case mode
36
+ when :celsius
37
+ celsius
38
+ when :fahrenheit
39
+ fahrenheit
40
+ when :kelvin
41
+ kelvin
42
+ when :reaumur
43
+ reaumur
44
+ else
45
+ celsius
46
+ end
47
+ end
48
+ end
49
+
@@ -0,0 +1,22 @@
1
+ require 'temperature_sensor'
2
+
3
+ # ThermalSensor - Raspberry Pi internal SoC temperature sensor
4
+ module RaspberryPi
5
+ class ThermalSensor < TemperatureSensor
6
+
7
+ def initialize
8
+ @sensor_name = 'DS18B20'
9
+ super
10
+ end
11
+
12
+ def read_data
13
+ @sensor_file = '/sys/class/thermal/thermal_zone0/temp'
14
+ File.open(@sensor_file, 'r') do |f|
15
+ value = f.read
16
+ @temperature = value.to_i / 1000.00
17
+ end
18
+ @temperature
19
+ end
20
+ end
21
+ end
22
+
metadata ADDED
@@ -0,0 +1,203 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: raspberry_pi_iot
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.6
5
+ platform: ruby
6
+ authors:
7
+ - Mike Shock (Mikhail V. Shokhirev)
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-12-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rpi_gpio
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.3.3
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.3.3
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: 0.3.3
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.3.3
33
+ - !ruby/object:Gem::Dependency
34
+ name: i2c-devices
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 0.0.6
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 0.0.6
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: 0.0.6
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 0.0.6
53
+ - !ruby/object:Gem::Dependency
54
+ name: i2c
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: 0.4.2
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 0.4.2
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: 0.4.2
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 0.4.2
73
+ - !ruby/object:Gem::Dependency
74
+ name: i2c-bme280
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: 0.1.2
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 0.1.2
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.1.2
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 0.1.2
93
+ - !ruby/object:Gem::Dependency
94
+ name: dht-sensor-ffi
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: 0.2.0
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 0.2.0
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: 0.2.0
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: 0.2.0
113
+ description: A set of classes for IoT (Inrternet of Things) / physical computing with
114
+ Raspberry Pi
115
+ email: mshock25@gmail.com
116
+ executables: []
117
+ extensions: []
118
+ extra_rdoc_files: []
119
+ files:
120
+ - doc/Actuator.html
121
+ - doc/BH1750.html
122
+ - doc/BME280.html
123
+ - doc/BMP280.html
124
+ - doc/BMxSensor.html
125
+ - doc/BinaryActuator.html
126
+ - doc/BinaryEffector.html
127
+ - doc/BinaryReceptor.html
128
+ - doc/BinarySensor.html
129
+ - doc/Bus.html
130
+ - doc/Button.html
131
+ - doc/DHT11.html
132
+ - doc/DHT22.html
133
+ - doc/DHTxxSensor.html
134
+ - doc/DS18B20.html
135
+ - doc/DigitalActuator.html
136
+ - doc/DigitalEffector.html
137
+ - doc/DigitalReceptor.html
138
+ - doc/DigitalSensor.html
139
+ - doc/Effector.html
140
+ - doc/HCSR501.html
141
+ - doc/HumitureSensor.html
142
+ - doc/IoT.html
143
+ - doc/LED.html
144
+ - doc/MAX44009.html
145
+ - doc/RaspberryPi.html
146
+ - doc/Receptor.html
147
+ - doc/Sensor.html
148
+ - doc/TemperatureSensor.html
149
+ - doc/_index.html
150
+ - doc/class_list.html
151
+ - doc/file_list.html
152
+ - doc/frames.html
153
+ - doc/index.html
154
+ - doc/method_list.html
155
+ - doc/top-level-namespace.html
156
+ - lib/bh1750.rb
157
+ - lib/binary_effector.rb
158
+ - lib/binary_receptor.rb
159
+ - lib/bmx_sensor.rb
160
+ - lib/bus.rb
161
+ - lib/button.rb
162
+ - lib/dht_sensor.rb
163
+ - lib/digital_effector.rb
164
+ - lib/digital_receptor.rb
165
+ - lib/ds18b20.rb
166
+ - lib/effector.rb
167
+ - lib/hcsr501.rb
168
+ - lib/humiture_sensor.rb
169
+ - lib/iot.rb
170
+ - lib/led.rb
171
+ - lib/led_pwm.rb
172
+ - lib/led_rgb.rb
173
+ - lib/max44009.rb
174
+ - lib/raspberry_pi.rb
175
+ - lib/raspberry_pi_iot.rb
176
+ - lib/receptor.rb
177
+ - lib/temperature_sensor.rb
178
+ - lib/thermal_sensor.rb
179
+ homepage: https://github.com/mike-shock/Ruby-Raspberry_Pi_IoT/
180
+ licenses:
181
+ - MIT
182
+ metadata: {}
183
+ post_install_message:
184
+ rdoc_options: []
185
+ require_paths:
186
+ - lib
187
+ required_ruby_version: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - ">="
190
+ - !ruby/object:Gem::Version
191
+ version: '0'
192
+ required_rubygems_version: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - ">="
195
+ - !ruby/object:Gem::Version
196
+ version: '0'
197
+ requirements: []
198
+ rubyforge_project:
199
+ rubygems_version: 2.5.2.1
200
+ signing_key:
201
+ specification_version: 4
202
+ summary: IoT library for Raspberry Pi projects in Ruby
203
+ test_files: []