denko 0.13.3 → 0.13.4
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 +4 -4
- data/CHANGELOG.md +39 -0
- data/HARDWARE.md +50 -23
- data/README.md +3 -3
- data/examples/advanced/m5_env.rb +48 -0
- data/examples/digital_io/button.rb +13 -0
- data/examples/sensor/aht10.rb +7 -3
- data/examples/sensor/aht20.rb +7 -3
- data/examples/sensor/bme280.rb +6 -43
- data/examples/sensor/bmp180.rb +22 -0
- data/examples/sensor/generic_pir.rb +25 -0
- data/examples/sensor/htu21d.rb +1 -1
- data/examples/sensor/htu31d.rb +15 -11
- data/examples/sensor/neat_tph_readings.rb +26 -0
- data/examples/sensor/qmp6988.rb +53 -0
- data/examples/sensor/rcwl9620.rb +15 -0
- data/examples/sensor/sht3x.rb +34 -0
- data/lib/denko/sensor/bme280.rb +1 -1
- data/lib/denko/sensor/bmp180.rb +223 -0
- data/lib/denko/sensor/generic_pir.rb +8 -0
- data/lib/denko/sensor/htu21d.rb +6 -2
- data/lib/denko/sensor/qmp6988.rb +308 -0
- data/lib/denko/sensor/rcwl9620.rb +34 -0
- data/lib/denko/sensor/sht3x.rb +128 -0
- data/lib/denko/sensor.rb +6 -0
- data/lib/denko/version.rb +1 -1
- metadata +15 -2
@@ -0,0 +1,128 @@
|
|
1
|
+
module Denko
|
2
|
+
module Sensor
|
3
|
+
class SHT3X
|
4
|
+
include I2C::Peripheral
|
5
|
+
include Behaviors::Poller
|
6
|
+
|
7
|
+
RESET = 0x30A2
|
8
|
+
RESET_TIME = 0.002
|
9
|
+
HEATER_OFF = 0x3066
|
10
|
+
HEATER_ON = 0x306D
|
11
|
+
FETCH_DATA = 0xE000
|
12
|
+
REPEATABILITY = {
|
13
|
+
high: { lsb: 0x00, measurement_time: 0.016 },
|
14
|
+
medium: { lsb: 0x0B, measurement_time: 0.007 },
|
15
|
+
low: { lsb: 0x16, measurement_time: 0.005 },
|
16
|
+
}
|
17
|
+
|
18
|
+
# Unused
|
19
|
+
READ_STATUS_REGISTER = 0xF32D
|
20
|
+
CLEAR_STATUS_REGISTER = 0x3041
|
21
|
+
BREAK = 0x3093
|
22
|
+
ART = 0x2B32
|
23
|
+
|
24
|
+
def before_initialize(options={})
|
25
|
+
@i2c_address = 0x44
|
26
|
+
super(options)
|
27
|
+
end
|
28
|
+
|
29
|
+
def after_initialize(options={})
|
30
|
+
super(options)
|
31
|
+
|
32
|
+
# Avoid repeated memory allocation for callback data and state.
|
33
|
+
@reading = { temperature: nil, humidity: nil }
|
34
|
+
self.state = { temperature: nil, humidity: nil }
|
35
|
+
|
36
|
+
reset
|
37
|
+
self.repeatability = :high
|
38
|
+
end
|
39
|
+
|
40
|
+
def repeatability=(key)
|
41
|
+
raise ArgumentError, "invalid repeatability setting: #{key}" unless REPEATABILITY.keys.include? key
|
42
|
+
@measurement_lsb = REPEATABILITY[key][:lsb]
|
43
|
+
@measurement_time = REPEATABILITY[key][:measurement_time]
|
44
|
+
end
|
45
|
+
|
46
|
+
def _read
|
47
|
+
i2c_write [0x24, @measurement_lsb]
|
48
|
+
sleep(@measurement_time)
|
49
|
+
i2c_read(FETCH_DATA, 6)
|
50
|
+
end
|
51
|
+
|
52
|
+
def pre_callback_filter(bytes)
|
53
|
+
# Temperature is bytes 0 to 2: MSB, LSB, CRC
|
54
|
+
if calculate_crc(bytes[0..2]) == bytes[2]
|
55
|
+
t_raw = (bytes[0] << 8) | bytes[1]
|
56
|
+
@reading[:temperature] = (175 * t_raw / 65535.0) - 45
|
57
|
+
else
|
58
|
+
@reading[:temperature] = nil
|
59
|
+
end
|
60
|
+
|
61
|
+
# Humidity is bytes 3 to 5: MSB, LSB, CRC
|
62
|
+
if calculate_crc(bytes[3..5]) == bytes[5]
|
63
|
+
h_raw = (bytes[3] << 8) | bytes[4]
|
64
|
+
@reading[:humidity] = 100 * h_raw / 65535.0
|
65
|
+
else
|
66
|
+
@reading[:humidity] = nil
|
67
|
+
end
|
68
|
+
|
69
|
+
@reading
|
70
|
+
end
|
71
|
+
|
72
|
+
def update_state(reading)
|
73
|
+
@state_mutex.synchronize do
|
74
|
+
@state[:temperature] = reading[:temperature]
|
75
|
+
@state[:humidity] = reading[:humidity]
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def reset
|
80
|
+
i2c_write [RESET]
|
81
|
+
sleep RESET_TIME
|
82
|
+
@heater_on = false
|
83
|
+
end
|
84
|
+
|
85
|
+
def heater_on?
|
86
|
+
@heater_on
|
87
|
+
end
|
88
|
+
|
89
|
+
def heater_off?
|
90
|
+
!@heater_on
|
91
|
+
end
|
92
|
+
|
93
|
+
def heater_on
|
94
|
+
i2c_write [HEATER_ON]
|
95
|
+
@heater_on = true
|
96
|
+
end
|
97
|
+
|
98
|
+
def heater_off
|
99
|
+
i2c_write [HEATER_OFF]
|
100
|
+
@heater_on = false
|
101
|
+
end
|
102
|
+
|
103
|
+
# CRC is same as AHT20 sensor. Copied from that file.
|
104
|
+
CRC_INITIAL_VALUE = 0xFF
|
105
|
+
CRC_POLYNOMIAL = 0x31
|
106
|
+
MSBIT_MASK = 0x80
|
107
|
+
|
108
|
+
def calculate_crc(bytes)
|
109
|
+
crc = CRC_INITIAL_VALUE
|
110
|
+
|
111
|
+
# Ignore last byte. That's the CRC value to compare with.
|
112
|
+
bytes.take(bytes.length - 1).each do |byte|
|
113
|
+
crc = crc ^ byte
|
114
|
+
8.times do
|
115
|
+
if (crc & MSBIT_MASK) > 0
|
116
|
+
crc = (crc << 1) ^ CRC_POLYNOMIAL
|
117
|
+
else
|
118
|
+
crc = crc << 1
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
# Limit CRC size to 8 bits.
|
124
|
+
crc = crc & 0xFF
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
data/lib/denko/sensor.rb
CHANGED
@@ -4,10 +4,16 @@ module Denko
|
|
4
4
|
autoload :Humidity, "#{__dir__}/sensor/virtual"
|
5
5
|
autoload :DHT, "#{__dir__}/sensor/dht"
|
6
6
|
autoload :DS18B20, "#{__dir__}/sensor/ds18b20"
|
7
|
+
autoload :BMP180, "#{__dir__}/sensor/bmp180"
|
7
8
|
autoload :BME280, "#{__dir__}/sensor/bme280"
|
9
|
+
autoload :BMP280, "#{__dir__}/sensor/bme280"
|
8
10
|
autoload :HTU21D, "#{__dir__}/sensor/htu21d"
|
9
11
|
autoload :HTU31D, "#{__dir__}/sensor/htu31d"
|
10
12
|
autoload :AHT10, "#{__dir__}/sensor/aht"
|
11
13
|
autoload :AHT20, "#{__dir__}/sensor/aht"
|
14
|
+
autoload :SHT3X, "#{__dir__}/sensor/sht3x"
|
15
|
+
autoload :QMP6988, "#{__dir__}/sensor/qmp6988"
|
16
|
+
autoload :RCWL9620, "#{__dir__}/sensor/rcwl9620"
|
17
|
+
autoload :GenericPIR, "#{__dir__}/sensor/generic_pir"
|
12
18
|
end
|
13
19
|
end
|
data/lib/denko/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: denko
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.13.
|
4
|
+
version: 0.13.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- vickash, Austinbv
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-10-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyserial
|
@@ -113,6 +113,7 @@ files:
|
|
113
113
|
- bin/denko
|
114
114
|
- build
|
115
115
|
- denko.gemspec
|
116
|
+
- examples/advanced/m5_env.rb
|
116
117
|
- examples/advanced/rotary_encoder_mac_volume.rb
|
117
118
|
- examples/advanced/ssd1306_time_temp_rh.rb
|
118
119
|
- examples/analog_io/ads1115.rb
|
@@ -120,6 +121,7 @@ files:
|
|
120
121
|
- examples/analog_io/dac_loopback.rb
|
121
122
|
- examples/analog_io/input.rb
|
122
123
|
- examples/connection/tcp.rb
|
124
|
+
- examples/digital_io/button.rb
|
123
125
|
- examples/digital_io/rotary_encoder.rb
|
124
126
|
- examples/display/hd44780.png
|
125
127
|
- examples/display/hd44780.rb
|
@@ -143,10 +145,16 @@ files:
|
|
143
145
|
- examples/sensor/aht10.rb
|
144
146
|
- examples/sensor/aht20.rb
|
145
147
|
- examples/sensor/bme280.rb
|
148
|
+
- examples/sensor/bmp180.rb
|
146
149
|
- examples/sensor/dht.rb
|
147
150
|
- examples/sensor/ds18b20.rb
|
151
|
+
- examples/sensor/generic_pir.rb
|
148
152
|
- examples/sensor/htu21d.rb
|
149
153
|
- examples/sensor/htu31d.rb
|
154
|
+
- examples/sensor/neat_tph_readings.rb
|
155
|
+
- examples/sensor/qmp6988.rb
|
156
|
+
- examples/sensor/rcwl9620.rb
|
157
|
+
- examples/sensor/sht3x.rb
|
150
158
|
- examples/spi/input_register.rb
|
151
159
|
- examples/spi/output_register.rb
|
152
160
|
- examples/spi/ssd_through_register.rb
|
@@ -247,10 +255,15 @@ files:
|
|
247
255
|
- lib/denko/sensor.rb
|
248
256
|
- lib/denko/sensor/aht.rb
|
249
257
|
- lib/denko/sensor/bme280.rb
|
258
|
+
- lib/denko/sensor/bmp180.rb
|
250
259
|
- lib/denko/sensor/dht.rb
|
251
260
|
- lib/denko/sensor/ds18b20.rb
|
261
|
+
- lib/denko/sensor/generic_pir.rb
|
252
262
|
- lib/denko/sensor/htu21d.rb
|
253
263
|
- lib/denko/sensor/htu31d.rb
|
264
|
+
- lib/denko/sensor/qmp6988.rb
|
265
|
+
- lib/denko/sensor/rcwl9620.rb
|
266
|
+
- lib/denko/sensor/sht3x.rb
|
254
267
|
- lib/denko/sensor/virtual.rb
|
255
268
|
- lib/denko/spi.rb
|
256
269
|
- lib/denko/spi/base_register.rb
|