From e31c5dcb2b461aa5b3a752626c198e37a8ff56fe Mon Sep 17 00:00:00 2001 From: jposada202020 Date: Fri, 17 Mar 2023 06:03:32 -0400 Subject: [PATCH 1/9] memory_optimization --- adafruit_tmp117.py | 223 ++++++++------------- docs/conf.py | 2 +- examples/tmp117_limits_test.py | 10 +- examples/tmp117_rate_and_averaging_test.py | 38 ++-- examples/tmp117_single_measurement_test.py | 19 +- 5 files changed, 109 insertions(+), 183 deletions(-) diff --git a/adafruit_tmp117.py b/adafruit_tmp117.py index c502ab5..392c74d 100644 --- a/adafruit_tmp117.py +++ b/adafruit_tmp117.py @@ -47,8 +47,9 @@ from adafruit_register.i2c_bits import RWBits, ROBits try: - from typing import Sequence, Tuple, Optional, Union + from typing import Tuple from busio import I2C + from typing_extensions import Literal except ImportError: pass @@ -72,100 +73,33 @@ 0.0078125 # Resolution of the device, found on (page 1 of datasheet) ) -_CONTINUOUS_CONVERSION_MODE = 0b00 # Continuous Conversion Mode -_ONE_SHOT_MODE = 0b11 # One Shot Conversion Mode -_SHUTDOWN_MODE = 0b01 # Shutdown Conversion Mode +_CONTINUOUS_CONVERSION_MODE = const(0b00) # Continuous Conversion Mode +_ONE_SHOT_MODE = const(0b11) # One Shot Conversion Mode +_SHUTDOWN_MODE = const(0b01) # Shutdown Conversion Mode -AlertStatus = namedtuple("AlertStatus", ["high_alert", "low_alert"]) - - -def _convert_to_integer(bytes_to_convert: bytearray) -> int: - """Use bitwise operators to convert the bytes into integers.""" - integer = None - for chunk in bytes_to_convert: - if not integer: - integer = chunk - else: - integer = integer << 8 - integer = integer | chunk - return integer - - -class CV: - """struct helper""" - - @classmethod - def add_values( - cls, value_tuples: Sequence[Tuple[str, int, Union[int, str], Optional[int]]] - ): - """Add CV values to the class""" - cls.string = {} - cls.lsb = {} - - for value_tuple in value_tuples: - name, value, string, lsb = value_tuple - setattr(cls, name, value) - cls.string[value] = string - cls.lsb[value] = lsb - - @classmethod - def is_valid(cls, value: int) -> bool: - """Validate that a given value is a member""" - return value in cls.string - - -class AverageCount(CV): - """Options for `averaged_measurements`""" - - -AverageCount.add_values( - ( - ("AVERAGE_1X", 0b00, 1, None), - ("AVERAGE_8X", 0b01, 8, None), - ("AVERAGE_32X", 0b10, 32, None), - ("AVERAGE_64X", 0b11, 64, None), - ) -) +ALERT_WINDOW = const(0) +ALERT_HYSTERESIS = const(1) +AVERAGE_1X = const(0b00) +AVERAGE_8X = const(0b01) +AVERAGE_32X = const(0b10) +AVERAGE_64X = const(0b11) -class MeasurementDelay(CV): - """Options for `measurement_delay`""" - - -MeasurementDelay.add_values( - ( - ("DELAY_0_0015_S", 0b000, 0.00155, None), - ("DELAY_0_125_S", 0b01, 0.125, None), - ("DELAY_0_250_S", 0b010, 0.250, None), - ("DELAY_0_500_S", 0b011, 0.500, None), - ("DELAY_1_S", 0b100, 1, None), - ("DELAY_4_S", 0b101, 4, None), - ("DELAY_8_S", 0b110, 8, None), - ("DELAY_16_S", 0b111, 16, None), - ) -) - +DELAY_0_0015_S = const(0b000) # 0.00155 +DELAY_0_125_S = const(0b01) # 0.125 +DELAY_0_250_S = const(0b010) # 0.250 +DELAY_0_500_S = const(0b011) # 0.500 +DELAY_1_S = const(0b100) # 1 +DELAY_4_S = const(0b101) # 4 +DELAY_8_S = const(0b110) # 8 +DELAY_16_S = const(0b111) # 16 -class AlertMode(CV): - """Options for `alert_mode`. See `alert_mode` for more information.""" +MEASUREMENTMODE_CONTINUOUS = const(0b00) +MEASUREMENTMODE_ONE_SHOT = const(0b11) +MEASUREMENTMODE_SHUTDOWN = const(0b01) -AlertMode.add_values( - (("WINDOW", 0, "Window", None), ("HYSTERESIS", 1, "Hysteresis", None)) -) - - -class MeasurementMode(CV): - """Options for `measurement_mode`. See `measurement_mode` for more information.""" - - -MeasurementMode.add_values( - ( - ("CONTINUOUS", 0, "Continuous", None), - ("ONE_SHOT", 3, "One shot", None), - ("SHUTDOWN", 1, "Shutdown", None), - ) -) +AlertStatus = namedtuple("AlertStatus", ["high_alert", "low_alert"]) class TMP117: @@ -244,10 +178,7 @@ def temperature_offset(self): @temperature_offset.setter def temperature_offset(self, value: float): - if value > 256 or value < -256: - raise AttributeError("temperature_offset must be from -256 to 256") - scaled_offset = int(value / _TMP117_RESOLUTION) - self._raw_temperature_offset = scaled_offset + self._raw_temperature_offset = self._scaled_limit(value) @property def high_limit(self): @@ -259,10 +190,7 @@ def high_limit(self): @high_limit.setter def high_limit(self, value: float): - if value > 256 or value < -256: - raise AttributeError("high_limit must be from 255 to -256") - scaled_limit = int(value / _TMP117_RESOLUTION) - self._raw_high_limit = scaled_limit + self._raw_high_limit = self._scaled_limit(value) @property def low_limit(self): @@ -274,10 +202,7 @@ def low_limit(self): @low_limit.setter def low_limit(self, value: float): - if value > 256 or value < -256: - raise AttributeError("low_limit must be from 255 to -256") - scaled_limit = int(value / _TMP117_RESOLUTION) - self._raw_low_limit = scaled_limit + self._raw_low_limit = self._scaled_limit(value) @property def alert_status(self): @@ -299,10 +224,10 @@ def alert_status(self): print("Low limit", tmp117.low_limit) # Try changing `alert_mode` to see how it modifies the behavior of the alerts. - # tmp117.alert_mode = AlertMode.WINDOW #default - # tmp117.alert_mode = AlertMode.HYSTERESIS + # tmp117.alert_mode = adafruit_tmp117.ALERT_WINDOW #default + # tmp117.alert_mode = adafruit_tmp117.HYSTERESIS - print("Alert mode:", AlertMode.string[tmp117.alert_mode]) + print("Alert mode:", tmp117.alert_mode) print("") print("") while True: @@ -331,21 +256,21 @@ def averaged_measurements(self): import time import board - from adafruit_tmp117 import TMP117, AverageCount + import adafruit_tmp117 i2c = board.I2C() # uses board.SCL and board.SDA - tmp117 = TMP117(i2c) + tmp117 = adafruit_tmp117.TMP117(i2c) # uncomment different options below to see how it affects the reported temperature - # tmp117.averaged_measurements = AverageCount.AVERAGE_1X - # tmp117.averaged_measurements = AverageCount.AVERAGE_8X - # tmp117.averaged_measurements = AverageCount.AVERAGE_32X - # tmp117.averaged_measurements = AverageCount.AVERAGE_64X + # tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_1X + # tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_8X + # tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_32X + # tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_64X print( "Number of averaged samples per measurement:", - AverageCount.string[tmp117.averaged_measurements], + tmp117.averaged_measurements, ) print("") @@ -358,8 +283,8 @@ def averaged_measurements(self): @averaged_measurements.setter def averaged_measurements(self, value: int): - if not AverageCount.is_valid(value): - raise AttributeError("averaged_measurements must be an `AverageCount`") + if value not in [0, 1, 2, 3]: + raise ValueError("averaged_measurements must be 0, 1, 2 or 3") self._raw_averaged_measurements = value @property @@ -371,13 +296,13 @@ def measurement_mode(self): +----------------------------------------+------------------------------------------------------+ | Mode | Behavior | +========================================+======================================================+ - | :py:const:`MeasurementMode.CONTINUOUS` | Measurements are made at the interval determined by | + | :py:const:`MEASUREMENTMODE_CONTINUOUS` | Measurements are made at the interval determined by | | | | | | `averaged_measurements` and `measurement_delay`. | | | | | | `temperature` returns the most recent measurement | +----------------------------------------+------------------------------------------------------+ - | :py:const:`MeasurementMode.ONE_SHOT` | Take a single measurement with the current number of | + | :py:const:`MEASUREMENTMODE_ONE_SHOT` | Take a single measurement with the current number of | | | | | | `averaged_measurements` and switch to | | | :py:const:`SHUTDOWN` when | @@ -392,7 +317,7 @@ def measurement_mode(self): | | | | | set again. | +----------------------------------------+------------------------------------------------------+ - | :py:const:`MeasurementMode.SHUTDOWN` | The sensor is put into a low power state and no new | + | :py:const:`MEASUREMENTMODE_SHUTDOWN` | The sensor is put into a low power state and no new | | | | | | measurements are taken. | | | | @@ -406,16 +331,13 @@ def measurement_mode(self): return self._mode @measurement_mode.setter - def measurement_mode(self, value: int): - if not MeasurementMode.is_valid(value): - raise AttributeError("measurement_mode must be a `MeasurementMode` ") - + def measurement_mode(self, value: int) -> None: self._set_mode_and_wait_for_measurement(value) @property def measurement_delay(self): - """The minimum amount of time between measurements in seconds. Must be a - `MeasurementDelay`. The specified amount may be exceeded depending on the + """The minimum amount of time between measurements in seconds. + The specified amount may be exceeded depending on the current setting off `averaged_measurements` which determines the minimum time needed between reported measurements. @@ -423,25 +345,25 @@ def measurement_delay(self): import time import board - from adafruit_tmp117 import TMP117, AverageCount, MeasurementDelay + import adafruit_tmp117 ii2c = board.I2C() # uses board.SCL and board.SDA - tmp117 = TMP117(i2c) + tmp117 = adafruit_tmp117.TMP117(i2c) # uncomment different options below to see how it affects the reported temperature - # tmp117.measurement_delay = MeasurementDelay.DELAY_0_0015_S - # tmp117.measurement_delay = MeasurementDelay.DELAY_0_125_S - # tmp117.measurement_delay = MeasurementDelay.DELAY_0_250_S - # tmp117.measurement_delay = MeasurementDelay.DELAY_0_500_S - # tmp117.measurement_delay = MeasurementDelay.DELAY_1_S - # tmp117.measurement_delay = MeasurementDelay.DELAY_4_S - # tmp117.measurement_delay = MeasurementDelay.DELAY_8_S - # tmp117.measurement_delay = MeasurementDelay.DELAY_16_S + # tmp117.measurement_delay = adafruit_tmp117.DELAY_0_0015_S + # tmp117.measurement_delay = adafruit_tmp117.DELAY_0_125_S + # tmp117.measurement_delay = adafruit_tmp117.DELAY_0_250_S + # tmp117.measurement_delay = adafruit_tmp117.DELAY_0_500_S + # tmp117.measurement_delay = adafruit_tmp117.DELAY_1_S + # tmp117.measurement_delay = adafruit_tmp117.DELAY_4_S + # tmp117.measurement_delay = adafruit_tmp117.DELAY_8_S + # tmp117.measurement_delay = adafruit_tmp117.DELAY_16_S print("Minimum time between measurements:", - MeasurementDelay.string[tmp117.measurement_delay], "seconds") + tmp117.measurement_delay) print("") @@ -454,9 +376,7 @@ def measurement_delay(self): return self._raw_measurement_delay @measurement_delay.setter - def measurement_delay(self, value: int): - if not MeasurementDelay.is_valid(value): - raise AttributeError("measurement_delay must be a `MeasurementDelay`") + def measurement_delay(self, value: int) -> None: self._raw_measurement_delay = value def take_single_measurement(self) -> float: @@ -472,25 +392,33 @@ def take_single_measurement(self) -> float: return self._set_mode_and_wait_for_measurement(_ONE_SHOT_MODE) # one shot @property - def alert_mode(self): + def alert_mode(self) -> Literal[ALERT_WINDOW, ALERT_HYSTERESIS]: """Sets the behavior of the `low_limit`, `high_limit`, and `alert_status` properties. - When set to :py:const:`AlertMode.WINDOW`, the `high_limit` property will unset when the + When set to :py:const:`ALERT_WINDOW`, the `high_limit` property will unset when the measured temperature goes below `high_limit`. Similarly `low_limit` will be True or False depending on if the measured temperature is below (`False`) or above(`True`) `low_limit`. - When set to :py:const:`AlertMode.HYSTERESIS`, the `high_limit` property will be set to + When set to :py:const:`ALERT_HYSTERESIS`, the `high_limit` property will be set to `False` when the measured temperature goes below `low_limit`. In this mode, the `low_limit` property of `alert_status` will not be set. - The default is :py:const:`AlertMode.WINDOW`""" + The default is :py:const:`ALERT_WINDOW`""" return self._raw_alert_mode @alert_mode.setter - def alert_mode(self, value: int): - if not AlertMode.is_valid(value): - raise AttributeError("alert_mode must be an `AlertMode`") + def alert_mode(self, value: Literal[ALERT_WINDOW, ALERT_HYSTERESIS]): + """The alert_mode of the sensor + + Could have the following values: + + * ALERT_WINDOW + * ALERT_HYSTERESIS + + """ + if value not in [0, 1]: + raise ValueError("alert_mode must be an 0 or 1") self._raw_alert_mode = value @property @@ -516,7 +444,7 @@ def serial_number(self): ] ) # Convert to an integer - return _convert_to_integer(combined_id) + return combined_id def _set_mode_and_wait_for_measurement(self, mode: int) -> float: @@ -542,3 +470,10 @@ def _read_status(self) -> Tuple[int, int, int]: def _read_temperature(self) -> float: return self._raw_temperature * _TMP117_RESOLUTION + + # pylint: disable=no-self-use + @staticmethod + def _scaled_limit(value: float) -> int: + if value > 256 or value < -256: + raise ValueError("value must be from 255 to -256") + return int(value / _TMP117_RESOLUTION) diff --git a/docs/conf.py b/docs/conf.py index 7c368fb..429c4cc 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -26,7 +26,7 @@ # Uncomment the below if you use native CircuitPython modules such as # digitalio, micropython and busio. List the modules you use. Without it, the # autodoc module docs will fail to generate with a warning. -# autodoc_mock_imports = ["digitalio", "busio"] +autodoc_mock_imports = ["adafruit_register",] intersphinx_mapping = { diff --git a/examples/tmp117_limits_test.py b/examples/tmp117_limits_test.py index 5692849..9c84a20 100644 --- a/examples/tmp117_limits_test.py +++ b/examples/tmp117_limits_test.py @@ -3,12 +3,12 @@ # SPDX-License-Identifier: Unlicense import time import board -from adafruit_tmp117 import TMP117, AlertMode +import adafruit_tmp117 i2c = board.I2C() # uses board.SCL and board.SDA # i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller -tmp117 = TMP117(i2c) +tmp117 = adafruit_tmp117.TMP117(i2c) tmp117.high_limit = 25 tmp117.low_limit = 10 @@ -17,10 +17,10 @@ print("Low limit", tmp117.low_limit) # Try changing `alert_mode` to see how it modifies the behavior of the alerts. -# tmp117.alert_mode = AlertMode.WINDOW #default -# tmp117.alert_mode = AlertMode.HYSTERESIS +# tmp117.alert_mode = adafruit_tmp117.ALERT_WINDOW #default +# tmp117.alert_mode = adafruit_tmp117.ALERT_HYSTERESIS -print("Alert mode:", AlertMode.string[tmp117.alert_mode]) +print("Alert mode:", tmp117.alert_mode) print("\n\n") while True: print("Temperature: %.2f degrees C" % tmp117.temperature) diff --git a/examples/tmp117_rate_and_averaging_test.py b/examples/tmp117_rate_and_averaging_test.py index 58a57ed..9f9b3e7 100644 --- a/examples/tmp117_rate_and_averaging_test.py +++ b/examples/tmp117_rate_and_averaging_test.py @@ -7,38 +7,34 @@ # such as the one built into the Mu editor. import time import board -from adafruit_tmp117 import TMP117, AverageCount, MeasurementDelay +import adafruit_tmp117 i2c = board.I2C() # uses board.SCL and board.SDA # i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller -tmp117 = TMP117(i2c) +tmp117 = adafruit_tmp117.TMP117(i2c) # uncomment different options below to see how it affects the reported temperature -# tmp117.averaged_measurements = AverageCount.AVERAGE_1X -# tmp117.averaged_measurements = AverageCount.AVERAGE_8X -# tmp117.averaged_measurements = AverageCount.AVERAGE_32X -# tmp117.averaged_measurements = AverageCount.AVERAGE_64X +# tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_1X +# tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_8X +# tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_32X +# tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_64X -# tmp117.measurement_delay = MeasurementDelay.DELAY_0_0015_S -# tmp117.measurement_delay = MeasurementDelay.DELAY_0_125_S -# tmp117.measurement_delay = MeasurementDelay.DELAY_0_250_S -# tmp117.measurement_delay = MeasurementDelay.DELAY_0_500_S -# tmp117.measurement_delay = MeasurementDelay.DELAY_1_S -# tmp117.measurement_delay = MeasurementDelay.DELAY_4_S -# tmp117.measurement_delay = MeasurementDelay.DELAY_8_S -# tmp117.measurement_delay = MeasurementDelay.DELAY_16_S +# tmp117.measurement_delay = adafruit_tmp117.DELAY_0_0015_S +# tmp117.measurement_delay = adafruit_tmp117.DELAY_0_125_S +# tmp117.measurement_delay = adafruit_tmp117.DELAY_0_250_S +# tmp117.measurement_delay = adafruit_tmp117.DELAY_0_500_S +# tmp117.measurement_delay = adafruit_tmp117.DELAY_1_S +# tmp117.measurement_delay = adafruit_tmp117.DELAY_4_S +# tmp117.measurement_delay = adafruit_tmp117.DELAY_8_S +# tmp117.measurement_delay = adafruit_tmp117.DELAY_16_S print( "Number of averaged samples per measurement:", - AverageCount.string[tmp117.averaged_measurements], -) -print( - "Minimum time between measurements:", - MeasurementDelay.string[tmp117.measurement_delay], - "seconds", + tmp117.averaged_measurements, ) +print("Minimum time between measurements:", tmp117.measurement_delay) print("") while True: print("Temperature:", tmp117.temperature) - time.sleep(0.01) + time.sleep(1) diff --git a/examples/tmp117_single_measurement_test.py b/examples/tmp117_single_measurement_test.py index d019621..2f0e8a6 100644 --- a/examples/tmp117_single_measurement_test.py +++ b/examples/tmp117_single_measurement_test.py @@ -2,28 +2,23 @@ # # SPDX-License-Identifier: Unlicense import board -from adafruit_tmp117 import TMP117, AverageCount +import adafruit_tmp117 i2c = board.I2C() # uses board.SCL and board.SDA # i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller -tmp117 = TMP117(i2c) +tmp117 = adafruit_tmp117.TMP117(i2c) # uncomment different options below to see how it affects the reported temperature # and measurement time -# tmp117.averaged_measurements = AverageCount.AVERAGE_1X -# tmp117.averaged_measurements = AverageCount.AVERAGE_8X -# tmp117.averaged_measurements = AverageCount.AVERAGE_32X -# tmp117.averaged_measurements = AverageCount.AVERAGE_64X +# tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_1X +# tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_8X +# tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_32X +# tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_64X print( "Number of averaged samples per measurement:", - AverageCount.string[tmp117.averaged_measurements], -) -print( - "Reads should take approximately", - AverageCount.string[tmp117.averaged_measurements] * 0.0155, - "seconds", + tmp117.averaged_measurements, ) while True: From e47c8bd8a6f1958a3ad8c3c4bf89f64ad720a2ee Mon Sep 17 00:00:00 2001 From: jposada202020 Date: Fri, 17 Mar 2023 06:14:56 -0400 Subject: [PATCH 2/9] format with black --- docs/conf.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 429c4cc..9f0e409 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -26,7 +26,9 @@ # Uncomment the below if you use native CircuitPython modules such as # digitalio, micropython and busio. List the modules you use. Without it, the # autodoc module docs will fail to generate with a warning. -autodoc_mock_imports = ["adafruit_register",] +autodoc_mock_imports = [ + "adafruit_register", +] intersphinx_mapping = { From a6f19361a0b125da3e16f3e62ea43e0907b487b3 Mon Sep 17 00:00:00 2001 From: jposada202020 Date: Wed, 12 Apr 2023 13:36:24 -0400 Subject: [PATCH 3/9] rate and averaging test example --- adafruit_tmp117.py | 2 -- examples/tmp117_rate_and_averaging_test.py | 19 +++++++++++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/adafruit_tmp117.py b/adafruit_tmp117.py index 392c74d..ca4cb45 100644 --- a/adafruit_tmp117.py +++ b/adafruit_tmp117.py @@ -56,7 +56,6 @@ __version__ = "0.0.0+auto.0" __repo__ = "https:#github.com/adafruit/Adafruit_CircuitPython_TMP117.git" - _I2C_ADDR = 0x48 # default I2C Address _TEMP_RESULT = const(0x00) _CONFIGURATION = const(0x01) @@ -98,7 +97,6 @@ MEASUREMENTMODE_ONE_SHOT = const(0b11) MEASUREMENTMODE_SHUTDOWN = const(0b01) - AlertStatus = namedtuple("AlertStatus", ["high_alert", "low_alert"]) diff --git a/examples/tmp117_rate_and_averaging_test.py b/examples/tmp117_rate_and_averaging_test.py index 9f9b3e7..4bd4b7e 100644 --- a/examples/tmp117_rate_and_averaging_test.py +++ b/examples/tmp117_rate_and_averaging_test.py @@ -1,4 +1,5 @@ # SPDX-FileCopyrightText: 2020 Bryan Siepert, written for Adafruit Industries +# SPDX-FileCopyrightText: 2023 Jose David Montoya # # SPDX-License-Identifier: Unlicense # pylint:disable=no-member @@ -13,6 +14,20 @@ # i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller tmp117 = adafruit_tmp117.TMP117(i2c) + +# Values here for the average_measurements and measurement_delay +Delay_times = { + 0: "DELAY_0_0015_S", + 1: "DELAY_0_125_S", + 2: "DELAY_0_250_S", + 3: "DELAY_0_500_S", + 4: "DELAY_1_S", + 5: "DELAY_4_S", + 6: "DELAY_8_S", + 7: "DELAY_16_S", +} +Average_Measure = {1: "AVERAGE_1X", 2: "AVERAGE_8X", 3: "AVERAGE_32X", 4: "AVERAGE_64X"} + # uncomment different options below to see how it affects the reported temperature # tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_1X # tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_8X @@ -30,9 +45,9 @@ print( "Number of averaged samples per measurement:", - tmp117.averaged_measurements, + Average_Measure[tmp117.averaged_measurements], ) -print("Minimum time between measurements:", tmp117.measurement_delay) +print("Minimum time between measurements:", Delay_times[tmp117.measurement_delay]) print("") while True: From 898cf6fc07491d9202c9f6c7c1143e3c5fb6fea9 Mon Sep 17 00:00:00 2001 From: jposada202020 Date: Wed, 12 Apr 2023 13:46:24 -0400 Subject: [PATCH 4/9] commenting out autodock_imports --- docs/conf.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 9f0e409..ab4433c 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -26,9 +26,7 @@ # Uncomment the below if you use native CircuitPython modules such as # digitalio, micropython and busio. List the modules you use. Without it, the # autodoc module docs will fail to generate with a warning. -autodoc_mock_imports = [ - "adafruit_register", -] +# autodoc_mock_imports = ["adafruit_register",] intersphinx_mapping = { From a9c067500bc946f62d43153ad4cbc81583f7c2a3 Mon Sep 17 00:00:00 2001 From: jposada202020 Date: Wed, 12 Apr 2023 14:21:21 -0400 Subject: [PATCH 5/9] Single Measurement Test Update --- examples/tmp117_single_measurement_test.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/examples/tmp117_single_measurement_test.py b/examples/tmp117_single_measurement_test.py index 2f0e8a6..8728848 100644 --- a/examples/tmp117_single_measurement_test.py +++ b/examples/tmp117_single_measurement_test.py @@ -8,6 +8,9 @@ # i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller tmp117 = adafruit_tmp117.TMP117(i2c) +# Values here for the average_measurements +Average_Measure = {1: "AVERAGE_1X", 2: "AVERAGE_8X", 3: "AVERAGE_32X", 4: "AVERAGE_64X"} + # uncomment different options below to see how it affects the reported temperature # and measurement time @@ -18,7 +21,7 @@ print( "Number of averaged samples per measurement:", - tmp117.averaged_measurements, + Average_Measure[tmp117.averaged_measurements], ) while True: From 719aebd412fec6bc7fb49101a2b4e055121270c2 Mon Sep 17 00:00:00 2001 From: jposada202020 Date: Wed, 12 Apr 2023 15:04:24 -0400 Subject: [PATCH 6/9] feeback Comments on library. --- adafruit_tmp117.py | 50 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 9 deletions(-) diff --git a/adafruit_tmp117.py b/adafruit_tmp117.py index ca4cb45..87770d6 100644 --- a/adafruit_tmp117.py +++ b/adafruit_tmp117.py @@ -149,7 +149,7 @@ def initialize(self): def temperature(self): """The current measured temperature in degrees Celsius""" - return self._read_temperature() + return self._raw_temperature * _TMP117_RESOLUTION @property def temperature_offset(self): @@ -260,6 +260,17 @@ def averaged_measurements(self): tmp117 = adafruit_tmp117.TMP117(i2c) + In order to print information in a nicer way we create a dictionary with the + sensor information for the averaged measurements. + + .. code-block::python3 + + Average_Measure = {1: "AVERAGE_1X", 2: "AVERAGE_8X", 3: "AVERAGE_32X", 4: "AVERAGE_64X"} + + We print the information for the Temperature sensor + + .. code-block::python3 + # uncomment different options below to see how it affects the reported temperature # tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_1X # tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_8X @@ -268,7 +279,7 @@ def averaged_measurements(self): print( "Number of averaged samples per measurement:", - tmp117.averaged_measurements, + Average_Measure[tmp117.averaged_measurements], ) print("") @@ -282,7 +293,7 @@ def averaged_measurements(self): @averaged_measurements.setter def averaged_measurements(self, value: int): if value not in [0, 1, 2, 3]: - raise ValueError("averaged_measurements must be 0, 1, 2 or 3") + raise ValueError("averaged_measurements must be set to 0, 1, 2 or 3") self._raw_averaged_measurements = value @property @@ -349,6 +360,26 @@ def measurement_delay(self): tmp117 = adafruit_tmp117.TMP117(i2c) + In order to print information in a nicer way, we create a dictionary with the + sensor information for the measurement delay. + + .. code-block::python3 + + Delay_times = { + 0: "DELAY_0_0015_S", + 1: "DELAY_0_125_S", + 2: "DELAY_0_250_S", + 3: "DELAY_0_500_S", + 4: "DELAY_1_S", + 5: "DELAY_4_S", + 6: "DELAY_8_S", + 7: "DELAY_16_S", + } + + We print the information for the Temperature sensor + + .. code-block::python3 + # uncomment different options below to see how it affects the reported temperature # tmp117.measurement_delay = adafruit_tmp117.DELAY_0_0015_S @@ -361,7 +392,7 @@ def measurement_delay(self): # tmp117.measurement_delay = adafruit_tmp117.DELAY_16_S print("Minimum time between measurements:", - tmp117.measurement_delay) + Delay_times[tmp117.measurement_delay]) print("") @@ -375,6 +406,10 @@ def measurement_delay(self): @measurement_delay.setter def measurement_delay(self, value: int) -> None: + if value not in [0, 1, 2, 3, 4, 5, 6, 7]: + raise ValueError( + "averaged_measurements must be set to 0, 1, 2, 3, 4, 5, 6, 7" + ) self._raw_measurement_delay = value def take_single_measurement(self) -> float: @@ -416,7 +451,7 @@ def alert_mode(self, value: Literal[ALERT_WINDOW, ALERT_HYSTERESIS]): """ if value not in [0, 1]: - raise ValueError("alert_mode must be an 0 or 1") + raise ValueError("alert_mode must be set to 0 or 1") self._raw_alert_mode = value @property @@ -451,7 +486,7 @@ def _set_mode_and_wait_for_measurement(self, mode: int) -> float: while not self._read_status()[2]: time.sleep(0.001) - return self._read_temperature() + return self._raw_temperature * _TMP117_RESOLUTION # eeprom write enable to set defaults for limits and config # requires context manager or something to perform a general call reset @@ -466,9 +501,6 @@ def _read_status(self) -> Tuple[int, int, int]: return (high_alert, low_alert, data_ready) - def _read_temperature(self) -> float: - return self._raw_temperature * _TMP117_RESOLUTION - # pylint: disable=no-self-use @staticmethod def _scaled_limit(value: float) -> int: From dd7a0ab38c8be36f9583e4cdda649baf60a35bc6 Mon Sep 17 00:00:00 2001 From: jposada202020 Date: Wed, 12 Apr 2023 17:03:50 -0400 Subject: [PATCH 7/9] moving measurement_delay and measure average to properties. --- adafruit_tmp117.py | 57 +++++++++------------- examples/tmp117_rate_and_averaging_test.py | 17 +------ examples/tmp117_single_measurement_test.py | 2 +- 3 files changed, 26 insertions(+), 50 deletions(-) diff --git a/adafruit_tmp117.py b/adafruit_tmp117.py index 87770d6..3f998df 100644 --- a/adafruit_tmp117.py +++ b/adafruit_tmp117.py @@ -260,17 +260,6 @@ def averaged_measurements(self): tmp117 = adafruit_tmp117.TMP117(i2c) - In order to print information in a nicer way we create a dictionary with the - sensor information for the averaged measurements. - - .. code-block::python3 - - Average_Measure = {1: "AVERAGE_1X", 2: "AVERAGE_8X", 3: "AVERAGE_32X", 4: "AVERAGE_64X"} - - We print the information for the Temperature sensor - - .. code-block::python3 - # uncomment different options below to see how it affects the reported temperature # tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_1X # tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_8X @@ -279,7 +268,7 @@ def averaged_measurements(self): print( "Number of averaged samples per measurement:", - Average_Measure[tmp117.averaged_measurements], + tmp117.averaged_measurements, ) print("") @@ -288,7 +277,15 @@ def averaged_measurements(self): time.sleep(0.1) """ - return self._raw_averaged_measurements + + average_measure = { + 1: "AVERAGE_1X", + 2: "AVERAGE_8X", + 3: "AVERAGE_32X", + 4: "AVERAGE_64X", + } + + return average_measure[self._raw_averaged_measurements] @averaged_measurements.setter def averaged_measurements(self, value: int): @@ -360,25 +357,6 @@ def measurement_delay(self): tmp117 = adafruit_tmp117.TMP117(i2c) - In order to print information in a nicer way, we create a dictionary with the - sensor information for the measurement delay. - - .. code-block::python3 - - Delay_times = { - 0: "DELAY_0_0015_S", - 1: "DELAY_0_125_S", - 2: "DELAY_0_250_S", - 3: "DELAY_0_500_S", - 4: "DELAY_1_S", - 5: "DELAY_4_S", - 6: "DELAY_8_S", - 7: "DELAY_16_S", - } - - We print the information for the Temperature sensor - - .. code-block::python3 # uncomment different options below to see how it affects the reported temperature @@ -392,7 +370,7 @@ def measurement_delay(self): # tmp117.measurement_delay = adafruit_tmp117.DELAY_16_S print("Minimum time between measurements:", - Delay_times[tmp117.measurement_delay]) + tmp117.measurement_delay) print("") @@ -402,7 +380,18 @@ def measurement_delay(self): """ - return self._raw_measurement_delay + delay_times = { + 0: "DELAY_0_0015_S", + 1: "DELAY_0_125_S", + 2: "DELAY_0_250_S", + 3: "DELAY_0_500_S", + 4: "DELAY_1_S", + 5: "DELAY_4_S", + 6: "DELAY_8_S", + 7: "DELAY_16_S", + } + + return delay_times[self._raw_measurement_delay] @measurement_delay.setter def measurement_delay(self, value: int) -> None: diff --git a/examples/tmp117_rate_and_averaging_test.py b/examples/tmp117_rate_and_averaging_test.py index 4bd4b7e..edda568 100644 --- a/examples/tmp117_rate_and_averaging_test.py +++ b/examples/tmp117_rate_and_averaging_test.py @@ -15,19 +15,6 @@ tmp117 = adafruit_tmp117.TMP117(i2c) -# Values here for the average_measurements and measurement_delay -Delay_times = { - 0: "DELAY_0_0015_S", - 1: "DELAY_0_125_S", - 2: "DELAY_0_250_S", - 3: "DELAY_0_500_S", - 4: "DELAY_1_S", - 5: "DELAY_4_S", - 6: "DELAY_8_S", - 7: "DELAY_16_S", -} -Average_Measure = {1: "AVERAGE_1X", 2: "AVERAGE_8X", 3: "AVERAGE_32X", 4: "AVERAGE_64X"} - # uncomment different options below to see how it affects the reported temperature # tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_1X # tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_8X @@ -45,9 +32,9 @@ print( "Number of averaged samples per measurement:", - Average_Measure[tmp117.averaged_measurements], + tmp117.averaged_measurements, ) -print("Minimum time between measurements:", Delay_times[tmp117.measurement_delay]) +print("Minimum time between measurements:", tmp117.measurement_delay) print("") while True: diff --git a/examples/tmp117_single_measurement_test.py b/examples/tmp117_single_measurement_test.py index 8728848..ad62d97 100644 --- a/examples/tmp117_single_measurement_test.py +++ b/examples/tmp117_single_measurement_test.py @@ -21,7 +21,7 @@ print( "Number of averaged samples per measurement:", - Average_Measure[tmp117.averaged_measurements], + tmp117.averaged_measurements, ) while True: From ef15f39c69acc49d64688b973de3c59d3f8e1622 Mon Sep 17 00:00:00 2001 From: jposada202020 Date: Thu, 13 Apr 2023 16:19:00 -0400 Subject: [PATCH 8/9] updating according to feedback --- adafruit_tmp117.py | 57 +++++++++------------- docs/conf.py | 2 +- examples/tmp117_rate_and_averaging_test.py | 17 +------ examples/tmp117_single_measurement_test.py | 2 +- requirements.txt | 2 - 5 files changed, 27 insertions(+), 53 deletions(-) diff --git a/adafruit_tmp117.py b/adafruit_tmp117.py index 87770d6..3f998df 100644 --- a/adafruit_tmp117.py +++ b/adafruit_tmp117.py @@ -260,17 +260,6 @@ def averaged_measurements(self): tmp117 = adafruit_tmp117.TMP117(i2c) - In order to print information in a nicer way we create a dictionary with the - sensor information for the averaged measurements. - - .. code-block::python3 - - Average_Measure = {1: "AVERAGE_1X", 2: "AVERAGE_8X", 3: "AVERAGE_32X", 4: "AVERAGE_64X"} - - We print the information for the Temperature sensor - - .. code-block::python3 - # uncomment different options below to see how it affects the reported temperature # tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_1X # tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_8X @@ -279,7 +268,7 @@ def averaged_measurements(self): print( "Number of averaged samples per measurement:", - Average_Measure[tmp117.averaged_measurements], + tmp117.averaged_measurements, ) print("") @@ -288,7 +277,15 @@ def averaged_measurements(self): time.sleep(0.1) """ - return self._raw_averaged_measurements + + average_measure = { + 1: "AVERAGE_1X", + 2: "AVERAGE_8X", + 3: "AVERAGE_32X", + 4: "AVERAGE_64X", + } + + return average_measure[self._raw_averaged_measurements] @averaged_measurements.setter def averaged_measurements(self, value: int): @@ -360,25 +357,6 @@ def measurement_delay(self): tmp117 = adafruit_tmp117.TMP117(i2c) - In order to print information in a nicer way, we create a dictionary with the - sensor information for the measurement delay. - - .. code-block::python3 - - Delay_times = { - 0: "DELAY_0_0015_S", - 1: "DELAY_0_125_S", - 2: "DELAY_0_250_S", - 3: "DELAY_0_500_S", - 4: "DELAY_1_S", - 5: "DELAY_4_S", - 6: "DELAY_8_S", - 7: "DELAY_16_S", - } - - We print the information for the Temperature sensor - - .. code-block::python3 # uncomment different options below to see how it affects the reported temperature @@ -392,7 +370,7 @@ def measurement_delay(self): # tmp117.measurement_delay = adafruit_tmp117.DELAY_16_S print("Minimum time between measurements:", - Delay_times[tmp117.measurement_delay]) + tmp117.measurement_delay) print("") @@ -402,7 +380,18 @@ def measurement_delay(self): """ - return self._raw_measurement_delay + delay_times = { + 0: "DELAY_0_0015_S", + 1: "DELAY_0_125_S", + 2: "DELAY_0_250_S", + 3: "DELAY_0_500_S", + 4: "DELAY_1_S", + 5: "DELAY_4_S", + 6: "DELAY_8_S", + 7: "DELAY_16_S", + } + + return delay_times[self._raw_measurement_delay] @measurement_delay.setter def measurement_delay(self, value: int) -> None: diff --git a/docs/conf.py b/docs/conf.py index ab4433c..429c4cc 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -26,7 +26,7 @@ # Uncomment the below if you use native CircuitPython modules such as # digitalio, micropython and busio. List the modules you use. Without it, the # autodoc module docs will fail to generate with a warning. -# autodoc_mock_imports = ["adafruit_register",] +autodoc_mock_imports = ["adafruit_register",] intersphinx_mapping = { diff --git a/examples/tmp117_rate_and_averaging_test.py b/examples/tmp117_rate_and_averaging_test.py index 4bd4b7e..edda568 100644 --- a/examples/tmp117_rate_and_averaging_test.py +++ b/examples/tmp117_rate_and_averaging_test.py @@ -15,19 +15,6 @@ tmp117 = adafruit_tmp117.TMP117(i2c) -# Values here for the average_measurements and measurement_delay -Delay_times = { - 0: "DELAY_0_0015_S", - 1: "DELAY_0_125_S", - 2: "DELAY_0_250_S", - 3: "DELAY_0_500_S", - 4: "DELAY_1_S", - 5: "DELAY_4_S", - 6: "DELAY_8_S", - 7: "DELAY_16_S", -} -Average_Measure = {1: "AVERAGE_1X", 2: "AVERAGE_8X", 3: "AVERAGE_32X", 4: "AVERAGE_64X"} - # uncomment different options below to see how it affects the reported temperature # tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_1X # tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_8X @@ -45,9 +32,9 @@ print( "Number of averaged samples per measurement:", - Average_Measure[tmp117.averaged_measurements], + tmp117.averaged_measurements, ) -print("Minimum time between measurements:", Delay_times[tmp117.measurement_delay]) +print("Minimum time between measurements:", tmp117.measurement_delay) print("") while True: diff --git a/examples/tmp117_single_measurement_test.py b/examples/tmp117_single_measurement_test.py index 8728848..ad62d97 100644 --- a/examples/tmp117_single_measurement_test.py +++ b/examples/tmp117_single_measurement_test.py @@ -21,7 +21,7 @@ print( "Number of averaged samples per measurement:", - Average_Measure[tmp117.averaged_measurements], + tmp117.averaged_measurements, ) while True: diff --git a/requirements.txt b/requirements.txt index fcef575..7a984a4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,5 +3,3 @@ # SPDX-License-Identifier: Unlicense Adafruit-Blinka -adafruit-circuitpython-register -adafruit-circuitpython-busdevice From bbcf5145ade273679e0d3f421c15e977b380ced4 Mon Sep 17 00:00:00 2001 From: jposada202020 Date: Thu, 13 Apr 2023 17:08:08 -0400 Subject: [PATCH 9/9] re-doing --- adafruit_tmp117.py | 57 +++++++++++++--------- docs/conf.py | 2 +- examples/tmp117_rate_and_averaging_test.py | 17 ++++++- examples/tmp117_single_measurement_test.py | 2 +- 4 files changed, 51 insertions(+), 27 deletions(-) diff --git a/adafruit_tmp117.py b/adafruit_tmp117.py index 3f998df..87770d6 100644 --- a/adafruit_tmp117.py +++ b/adafruit_tmp117.py @@ -260,6 +260,17 @@ def averaged_measurements(self): tmp117 = adafruit_tmp117.TMP117(i2c) + In order to print information in a nicer way we create a dictionary with the + sensor information for the averaged measurements. + + .. code-block::python3 + + Average_Measure = {1: "AVERAGE_1X", 2: "AVERAGE_8X", 3: "AVERAGE_32X", 4: "AVERAGE_64X"} + + We print the information for the Temperature sensor + + .. code-block::python3 + # uncomment different options below to see how it affects the reported temperature # tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_1X # tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_8X @@ -268,7 +279,7 @@ def averaged_measurements(self): print( "Number of averaged samples per measurement:", - tmp117.averaged_measurements, + Average_Measure[tmp117.averaged_measurements], ) print("") @@ -277,15 +288,7 @@ def averaged_measurements(self): time.sleep(0.1) """ - - average_measure = { - 1: "AVERAGE_1X", - 2: "AVERAGE_8X", - 3: "AVERAGE_32X", - 4: "AVERAGE_64X", - } - - return average_measure[self._raw_averaged_measurements] + return self._raw_averaged_measurements @averaged_measurements.setter def averaged_measurements(self, value: int): @@ -357,6 +360,25 @@ def measurement_delay(self): tmp117 = adafruit_tmp117.TMP117(i2c) + In order to print information in a nicer way, we create a dictionary with the + sensor information for the measurement delay. + + .. code-block::python3 + + Delay_times = { + 0: "DELAY_0_0015_S", + 1: "DELAY_0_125_S", + 2: "DELAY_0_250_S", + 3: "DELAY_0_500_S", + 4: "DELAY_1_S", + 5: "DELAY_4_S", + 6: "DELAY_8_S", + 7: "DELAY_16_S", + } + + We print the information for the Temperature sensor + + .. code-block::python3 # uncomment different options below to see how it affects the reported temperature @@ -370,7 +392,7 @@ def measurement_delay(self): # tmp117.measurement_delay = adafruit_tmp117.DELAY_16_S print("Minimum time between measurements:", - tmp117.measurement_delay) + Delay_times[tmp117.measurement_delay]) print("") @@ -380,18 +402,7 @@ def measurement_delay(self): """ - delay_times = { - 0: "DELAY_0_0015_S", - 1: "DELAY_0_125_S", - 2: "DELAY_0_250_S", - 3: "DELAY_0_500_S", - 4: "DELAY_1_S", - 5: "DELAY_4_S", - 6: "DELAY_8_S", - 7: "DELAY_16_S", - } - - return delay_times[self._raw_measurement_delay] + return self._raw_measurement_delay @measurement_delay.setter def measurement_delay(self, value: int) -> None: diff --git a/docs/conf.py b/docs/conf.py index 429c4cc..2f885c3 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -26,7 +26,7 @@ # Uncomment the below if you use native CircuitPython modules such as # digitalio, micropython and busio. List the modules you use. Without it, the # autodoc module docs will fail to generate with a warning. -autodoc_mock_imports = ["adafruit_register",] +autodoc_mock_imports = ["adafruit_register"] intersphinx_mapping = { diff --git a/examples/tmp117_rate_and_averaging_test.py b/examples/tmp117_rate_and_averaging_test.py index edda568..4bd4b7e 100644 --- a/examples/tmp117_rate_and_averaging_test.py +++ b/examples/tmp117_rate_and_averaging_test.py @@ -15,6 +15,19 @@ tmp117 = adafruit_tmp117.TMP117(i2c) +# Values here for the average_measurements and measurement_delay +Delay_times = { + 0: "DELAY_0_0015_S", + 1: "DELAY_0_125_S", + 2: "DELAY_0_250_S", + 3: "DELAY_0_500_S", + 4: "DELAY_1_S", + 5: "DELAY_4_S", + 6: "DELAY_8_S", + 7: "DELAY_16_S", +} +Average_Measure = {1: "AVERAGE_1X", 2: "AVERAGE_8X", 3: "AVERAGE_32X", 4: "AVERAGE_64X"} + # uncomment different options below to see how it affects the reported temperature # tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_1X # tmp117.averaged_measurements = adafruit_tmp117.AVERAGE_8X @@ -32,9 +45,9 @@ print( "Number of averaged samples per measurement:", - tmp117.averaged_measurements, + Average_Measure[tmp117.averaged_measurements], ) -print("Minimum time between measurements:", tmp117.measurement_delay) +print("Minimum time between measurements:", Delay_times[tmp117.measurement_delay]) print("") while True: diff --git a/examples/tmp117_single_measurement_test.py b/examples/tmp117_single_measurement_test.py index ad62d97..8728848 100644 --- a/examples/tmp117_single_measurement_test.py +++ b/examples/tmp117_single_measurement_test.py @@ -21,7 +21,7 @@ print( "Number of averaged samples per measurement:", - tmp117.averaged_measurements, + Average_Measure[tmp117.averaged_measurements], ) while True: