37
37
from micropython import const
38
38
from adafruit_bus_device import i2c_device
39
39
40
+ try :
41
+ from typing import Optional , List , Tuple , Type
42
+ from busio import I2C
43
+ except ImportError :
44
+ pass
40
45
41
46
_BH1750_DEVICE_ID = 0xE1 # Correct content of WHO_AM_I register
42
47
@@ -67,7 +72,9 @@ class CV:
67
72
"""struct helper"""
68
73
69
74
@classmethod
70
- def add_values (cls , value_tuples ):
75
+ def add_values (
76
+ cls , value_tuples : List [Tuple [str , int , str , Optional [int ]]]
77
+ ) -> None :
71
78
"""Add CV values to the class"""
72
79
cls .string = {}
73
80
cls .lsb = {}
@@ -79,7 +86,7 @@ def add_values(cls, value_tuples):
79
86
cls .lsb [value ] = lsb
80
87
81
88
@classmethod
82
- def is_valid (cls , value ) :
89
+ def is_valid (cls , value : int ) -> bool :
83
90
"""Validate that a given value is a member"""
84
91
return value in cls .string
85
92
@@ -97,15 +104,15 @@ class RWBitfields:
97
104
98
105
"""
99
106
100
- def __init__ (self , num_bits , lowest_bit ) :
107
+ def __init__ (self , num_bits : int , lowest_bit : int ) -> None :
101
108
self ._bit_mask = ((1 << num_bits ) - 1 ) << lowest_bit
102
109
self ._lowest_bit = lowest_bit
103
110
104
- def __get__ (self , obj , objtype = None ) :
111
+ def __get__ (self , obj : Optional [ "BH1750" ] , objtype : Type [ "BH1750" ]) -> int :
105
112
106
113
return (obj ._settings & self ._bit_mask ) >> self ._lowest_bit
107
114
108
- def __set__ (self , obj , value ) :
115
+ def __set__ (self , obj : "BH1750" , value : int ) -> None :
109
116
# shift the value over to the right spot
110
117
value <<= self ._lowest_bit
111
118
settings = obj ._settings
@@ -182,31 +189,31 @@ class BH1750: # pylint:disable=too-many-instance-attributes
182
189
mode = RWBitfields (2 , 4 )
183
190
resolution = RWBitfields (2 , 0 )
184
191
185
- def __init__ (self , i2c , address = _BH1750_DEFAULT_ADDRESS ):
192
+ def __init__ (self , i2c : I2C , address : int = _BH1750_DEFAULT_ADDRESS ) -> None :
186
193
187
194
self .i2c_device = i2c_device .I2CDevice (i2c , address )
188
195
self ._buffer = bytearray (2 )
189
196
self ._settings_byte = 0
190
197
191
198
self .initialize ()
192
199
193
- def initialize (self ):
200
+ def initialize (self ) -> None :
194
201
"""Configure the sensors with the default settings."""
195
202
self .mode = Mode .CONTINUOUS # pylint:disable=no-member
196
203
self .resolution = Resolution .HIGH # pylint:disable=no-member
197
204
198
205
@property
199
- def _settings (self ):
206
+ def _settings (self ) -> int :
200
207
return self ._settings_byte
201
208
202
209
@_settings .setter
203
- def _settings (self , value ) :
210
+ def _settings (self , value : int ) -> None :
204
211
self ._settings_byte = value
205
212
self ._write (self ._settings_byte )
206
213
sleep (0.180 ) # worse case time to take a new measurement
207
214
208
215
@property
209
- def _raw_reading (self ):
216
+ def _raw_reading (self ) -> int :
210
217
211
218
self ._buffer [0 ] = 0
212
219
self ._buffer [1 ] = 0
@@ -217,19 +224,19 @@ def _raw_reading(self):
217
224
return unpack_from (">H" , self ._buffer )[0 ]
218
225
219
226
@property
220
- def lux (self ):
227
+ def lux (self ) -> float :
221
228
"""Light value in lux."""
222
229
raw_lux = self ._raw_reading
223
230
224
231
return self ._convert_to_lux (raw_lux )
225
232
226
- def _convert_to_lux (self , raw_lux ) :
233
+ def _convert_to_lux (self , raw_lux : int ) -> float :
227
234
measured_lux = raw_lux / 1.2
228
235
if self .resolution == Resolution .HIGH : # pylint:disable=no-member
229
236
measured_lux = measured_lux / 2
230
237
return measured_lux
231
238
232
- def _write (self , cmd_byte ) :
239
+ def _write (self , cmd_byte : int ) -> None :
233
240
self ._buffer [0 ] = cmd_byte
234
241
with self .i2c_device as i2c :
235
242
i2c .write (self ._buffer , end = 1 )
0 commit comments