From 601cc7c37ccba0e33bd2993b3526a5de4395abd4 Mon Sep 17 00:00:00 2001 From: NikhitaR-IFX Date: Wed, 12 Apr 2023 21:38:08 +0530 Subject: [PATCH 1/8] micropython/drivers/sensor/pasco2: Adding support for IFX-PASCO2 sensor. Signed-off-by: NikhitaR-IFX --- micropython/drivers/sensor/pasco2/manifest.py | 3 + micropython/drivers/sensor/pasco2/pasco2.py | 107 ++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 micropython/drivers/sensor/pasco2/manifest.py create mode 100644 micropython/drivers/sensor/pasco2/pasco2.py diff --git a/micropython/drivers/sensor/pasco2/manifest.py b/micropython/drivers/sensor/pasco2/manifest.py new file mode 100644 index 00000000..ac29972f --- /dev/null +++ b/micropython/drivers/sensor/pasco2/manifest.py @@ -0,0 +1,3 @@ +metadata(description="Driver for XENSIV PAS CO2 sensor.", version="0.1.0") + +module("pasco2.py", opt=3) \ No newline at end of file diff --git a/micropython/drivers/sensor/pasco2/pasco2.py b/micropython/drivers/sensor/pasco2/pasco2.py new file mode 100644 index 00000000..2552867f --- /dev/null +++ b/micropython/drivers/sensor/pasco2/pasco2.py @@ -0,0 +1,107 @@ +from machine import I2C +from utime import sleep, sleep_ms + +# Sensor Register Address Stack +#_PASCO2_REG_PROD_ID = const(0x00) # Product and revision ID register address +_PASCO2_REG_SENS_STS = const(0x01) # Sensor status register address +_PASCO2_REG_MEAS_RATE_H = const(0x02) # Measurement period MSB configuration register address +#_PASCO2_REG_MEAS_RATE_L = const(0x03) # Measurement period LSB register address +_PASCO2_REG_MEAS_CFG = const(0x04) # Measurement mode configuration register address +_PASCO2_REG_CO2PPM_H = const(0x05) # CO2 concentration result MSB register address +#_PASCO2_REG_CO2PPM_L = const(0x06) # CO2 concentration result LSB register address +_PASCO2_REG_MEAS_STS = const(0x07) # Measurement status register address +#_PASCO2_REG_INT_CFG = const(0x08) # Interrupt pin configuration register address +#_PASCO2_REG_ALARM_TH_H = const(0x09) # Alarm threshold MSB register address +_PASCO2_REG_SENS_RST = const(0x10) # Soft reset register address + +#Error codes +_PASCO2_SUCCESS = 0 +_PASCO2_ERROR = -1 + +addr = 0 +mask = 1 + +i2c = I2C(0) + +class PASCO2: + """IFX - XENSIV PAS CO2 sensor driver""" + regMap = { # RegAddr, Mask + 'REG_SENS_STS_BITF_SENS_RDY' : [_PASCO2_REG_SENS_STS, 0x80], + 'REG_MEAS_CFG_BITF_OP_MODE' : [_PASCO2_REG_MEAS_CFG, 0x03], + 'REG_MEAS_STS_BITF_DATA_RDY' : [_PASCO2_REG_MEAS_STS, 0x10], # Data ready status bit + 'REG_CO2PPM_H_BITF_CO2_PPM_H': [_PASCO2_REG_CO2PPM_H, 0xFF], + } + + def __init__(self, bus, measInterval=10, sensorAddr=0x28): + self.bus = bus + self.sensorAddr = sensorAddr + self.measInterval = measInterval + self.softResetCode = b"\xa3" + + def _read_reg(self, regAddr, bytesToRead=1): + readVal = self.bus.readfrom_mem(self.sensorAddr, regAddr, bytesToRead) + return readVal + + def _write_reg(self, regAddr, writeData): + self.bus.writeto_mem(self.sensorAddr, regAddr, writeData) + + def _is_sensor_ready(self): + reg = self.regMap['REG_SENS_STS_BITF_SENS_RDY'] + return (self._read_reg(reg[addr])[0] & reg[mask]) + + def _soft_reset(self): + self._write_reg(_PASCO2_REG_SENS_RST, self.softResetCode) + + def _set_mode(self, mode): + if mode == 'idle': modeVal = 0x00 + if mode == 'continuous': modeVal = 0x02 + + reg = self.regMap['REG_MEAS_CFG_BITF_OP_MODE'] + readData = self._read_reg(reg[addr])[0] + writeData = bytes([(readData & ~(reg[mask])) | modeVal]) + self._write_reg(_PASCO2_REG_MEAS_CFG,writeData) + + + def initialize(self): + try: + # wait for sensor to be ready + sensor_ready = self._is_sensor_ready() + while not sensor_ready: + sleep(1) + sensor_ready = self._is_sensor_ready() + + # soft reset sensor register + self._soft_reset() + sleep_ms(800) + + # set measure rate + buf = bytes([(self.measInterval >> 8) & 0xFF, self.measInterval & 0xFF]) + self._write_reg(_PASCO2_REG_MEAS_RATE_H, buf) + + # reset operation mode to idle mode + self._set_mode('idle') + + # start continuous mode + self._set_mode('continuous') + + return _PASCO2_SUCCESS + + except: + return _PASCO2_ERROR + + def getCO2Value(self): + while True: + try: + # get meas status + reg = self.regMap['REG_MEAS_STS_BITF_DATA_RDY'] + readStatus = self._read_reg(reg[addr]) + data_ready = readStatus[0] & reg[mask] + + if data_ready: + # get CO2 value + reg = self.regMap['REG_CO2PPM_H_BITF_CO2_PPM_H'] + readVal = self._read_reg(reg[addr], 2) + co2_value = (readVal[0] << 8) | readVal[1] + return co2_value + except: + return _PASCO2_ERROR \ No newline at end of file From 11c1fe2c27233d099a4e3e36efc3c48ff5ea52c6 Mon Sep 17 00:00:00 2001 From: NikhitaR-IFX Date: Thu, 13 Apr 2023 14:47:11 +0530 Subject: [PATCH 2/8] micropython/drivers/sensor/pasco2: Cleanup and adding code comments. Signed-off-by: NikhitaR-IFX --- micropython/drivers/sensor/pasco2/pasco2.py | 31 +++++++++++++-------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/micropython/drivers/sensor/pasco2/pasco2.py b/micropython/drivers/sensor/pasco2/pasco2.py index 2552867f..adcd9614 100644 --- a/micropython/drivers/sensor/pasco2/pasco2.py +++ b/micropython/drivers/sensor/pasco2/pasco2.py @@ -2,16 +2,11 @@ from machine import I2C from utime import sleep, sleep_ms # Sensor Register Address Stack -#_PASCO2_REG_PROD_ID = const(0x00) # Product and revision ID register address _PASCO2_REG_SENS_STS = const(0x01) # Sensor status register address _PASCO2_REG_MEAS_RATE_H = const(0x02) # Measurement period MSB configuration register address -#_PASCO2_REG_MEAS_RATE_L = const(0x03) # Measurement period LSB register address _PASCO2_REG_MEAS_CFG = const(0x04) # Measurement mode configuration register address -_PASCO2_REG_CO2PPM_H = const(0x05) # CO2 concentration result MSB register address -#_PASCO2_REG_CO2PPM_L = const(0x06) # CO2 concentration result LSB register address -_PASCO2_REG_MEAS_STS = const(0x07) # Measurement status register address -#_PASCO2_REG_INT_CFG = const(0x08) # Interrupt pin configuration register address -#_PASCO2_REG_ALARM_TH_H = const(0x09) # Alarm threshold MSB register address +_PASCO2_REG_CO2PPM_H = const(0x05) # CO2 concentration result MSB register address +_PASCO2_REG_MEAS_STS = const(0x07) # Measurement status register address _PASCO2_REG_SENS_RST = const(0x10) # Soft reset register address #Error codes @@ -25,34 +20,44 @@ i2c = I2C(0) class PASCO2: """IFX - XENSIV PAS CO2 sensor driver""" - regMap = { # RegAddr, Mask - 'REG_SENS_STS_BITF_SENS_RDY' : [_PASCO2_REG_SENS_STS, 0x80], - 'REG_MEAS_CFG_BITF_OP_MODE' : [_PASCO2_REG_MEAS_CFG, 0x03], + # RegAddr, Mask, + regMap = { + 'REG_SENS_STS_BITF_SENS_RDY' : [_PASCO2_REG_SENS_STS, 0x80], # Sensor status bit + 'REG_MEAS_CFG_BITF_OP_MODE' : [_PASCO2_REG_MEAS_CFG, 0x03], # Operation Mode type bit 'REG_MEAS_STS_BITF_DATA_RDY' : [_PASCO2_REG_MEAS_STS, 0x10], # Data ready status bit - 'REG_CO2PPM_H_BITF_CO2_PPM_H': [_PASCO2_REG_CO2PPM_H, 0xFF], + 'REG_CO2PPM_H_BITF_CO2_PPM_H': [_PASCO2_REG_CO2PPM_H, 0xFF], # Stored CO2 value bit } def __init__(self, bus, measInterval=10, sensorAddr=0x28): + """" Intialize the sensor and required dependencies """ self.bus = bus self.sensorAddr = sensorAddr self.measInterval = measInterval self.softResetCode = b"\xa3" def _read_reg(self, regAddr, bytesToRead=1): + """ Internal function to read data from the sensor register and returns it raw """ readVal = self.bus.readfrom_mem(self.sensorAddr, regAddr, bytesToRead) return readVal def _write_reg(self, regAddr, writeData): + """ Internal function to write data to sensor register """ self.bus.writeto_mem(self.sensorAddr, regAddr, writeData) def _is_sensor_ready(self): + """ Helper function to check the sensor status """ reg = self.regMap['REG_SENS_STS_BITF_SENS_RDY'] return (self._read_reg(reg[addr])[0] & reg[mask]) def _soft_reset(self): + """ Helper function to perform soft reset of the sensor """ self._write_reg(_PASCO2_REG_SENS_RST, self.softResetCode) def _set_mode(self, mode): + """ Helper function to set the mode of sensor. Currently supported modes: + 1. Idle + 2. Continuous + """ if mode == 'idle': modeVal = 0x00 if mode == 'continuous': modeVal = 0x02 @@ -63,6 +68,7 @@ class PASCO2: def initialize(self): + """ Public function to initialize the sensor """ try: # wait for sensor to be ready sensor_ready = self._is_sensor_ready() @@ -80,7 +86,7 @@ class PASCO2: # reset operation mode to idle mode self._set_mode('idle') - + # start continuous mode self._set_mode('continuous') @@ -90,6 +96,7 @@ class PASCO2: return _PASCO2_ERROR def getCO2Value(self): + """ Public function to get the CO2 value """ while True: try: # get meas status From af939e65faa55b5324daf674b58c85a780ebe626 Mon Sep 17 00:00:00 2001 From: NikhitaR-IFX Date: Thu, 13 Apr 2023 14:50:23 +0530 Subject: [PATCH 3/8] micropython/drivers/sensor/pasco2: Cleanup and adding code comments. Signed-off-by: NikhitaR-IFX --- micropython/drivers/sensor/pasco2/pasco2.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/micropython/drivers/sensor/pasco2/pasco2.py b/micropython/drivers/sensor/pasco2/pasco2.py index adcd9614..3e8f625f 100644 --- a/micropython/drivers/sensor/pasco2/pasco2.py +++ b/micropython/drivers/sensor/pasco2/pasco2.py @@ -1,3 +1,5 @@ +# Infineon XENSIV PAS CO2 sensor driver for MicroPython + from machine import I2C from utime import sleep, sleep_ms @@ -16,8 +18,6 @@ _PASCO2_ERROR = -1 addr = 0 mask = 1 -i2c = I2C(0) - class PASCO2: """IFX - XENSIV PAS CO2 sensor driver""" # RegAddr, Mask, @@ -66,7 +66,6 @@ class PASCO2: writeData = bytes([(readData & ~(reg[mask])) | modeVal]) self._write_reg(_PASCO2_REG_MEAS_CFG,writeData) - def initialize(self): """ Public function to initialize the sensor """ try: From a71c421943faadee620e62f1891bf873e54a617c Mon Sep 17 00:00:00 2001 From: NikhitaR-IFX Date: Thu, 13 Apr 2023 17:49:09 +0530 Subject: [PATCH 4/8] micropython: Adding pre-coomit config file. Signed-off-by: NikhitaR-IFX --- micropython/drivers/sensor/pasco2/manifest.py | 2 +- micropython/drivers/sensor/pasco2/pasco2.py | 90 ++++++++++--------- 2 files changed, 48 insertions(+), 44 deletions(-) diff --git a/micropython/drivers/sensor/pasco2/manifest.py b/micropython/drivers/sensor/pasco2/manifest.py index ac29972f..8afa9bc3 100644 --- a/micropython/drivers/sensor/pasco2/manifest.py +++ b/micropython/drivers/sensor/pasco2/manifest.py @@ -1,3 +1,3 @@ metadata(description="Driver for XENSIV PAS CO2 sensor.", version="0.1.0") -module("pasco2.py", opt=3) \ No newline at end of file +module("pasco2.py", opt=3) diff --git a/micropython/drivers/sensor/pasco2/pasco2.py b/micropython/drivers/sensor/pasco2/pasco2.py index 3e8f625f..03e4eaca 100644 --- a/micropython/drivers/sensor/pasco2/pasco2.py +++ b/micropython/drivers/sensor/pasco2/pasco2.py @@ -4,70 +4,74 @@ from machine import I2C from utime import sleep, sleep_ms # Sensor Register Address Stack -_PASCO2_REG_SENS_STS = const(0x01) # Sensor status register address -_PASCO2_REG_MEAS_RATE_H = const(0x02) # Measurement period MSB configuration register address -_PASCO2_REG_MEAS_CFG = const(0x04) # Measurement mode configuration register address -_PASCO2_REG_CO2PPM_H = const(0x05) # CO2 concentration result MSB register address -_PASCO2_REG_MEAS_STS = const(0x07) # Measurement status register address -_PASCO2_REG_SENS_RST = const(0x10) # Soft reset register address - -#Error codes +_PASCO2_REG_SENS_STS = const(0x01) # Sensor status register address +_PASCO2_REG_MEAS_RATE_H = const(0x02) # Measurement period MSB configuration register address +_PASCO2_REG_MEAS_CFG = const(0x04) # Measurement mode configuration register address +_PASCO2_REG_CO2PPM_H = const(0x05) # CO2 concentration result MSB register address +_PASCO2_REG_MEAS_STS = const(0x07) # Measurement status register address +_PASCO2_REG_SENS_RST = const(0x10) # Soft reset register address + +# Error codes _PASCO2_SUCCESS = 0 _PASCO2_ERROR = -1 addr = 0 mask = 1 + class PASCO2: """IFX - XENSIV PAS CO2 sensor driver""" + # RegAddr, Mask, regMap = { - 'REG_SENS_STS_BITF_SENS_RDY' : [_PASCO2_REG_SENS_STS, 0x80], # Sensor status bit - 'REG_MEAS_CFG_BITF_OP_MODE' : [_PASCO2_REG_MEAS_CFG, 0x03], # Operation Mode type bit - 'REG_MEAS_STS_BITF_DATA_RDY' : [_PASCO2_REG_MEAS_STS, 0x10], # Data ready status bit - 'REG_CO2PPM_H_BITF_CO2_PPM_H': [_PASCO2_REG_CO2PPM_H, 0xFF], # Stored CO2 value bit + "REG_SENS_STS_BITF_SENS_RDY": [_PASCO2_REG_SENS_STS, 0x80], # Sensor status bit + "REG_MEAS_CFG_BITF_OP_MODE": [_PASCO2_REG_MEAS_CFG, 0x03], # Operation Mode type bit + "REG_MEAS_STS_BITF_DATA_RDY": [_PASCO2_REG_MEAS_STS, 0x10], # Data ready status bit + "REG_CO2PPM_H_BITF_CO2_PPM_H": [_PASCO2_REG_CO2PPM_H, 0xFF], # Stored CO2 value bit } - + def __init__(self, bus, measInterval=10, sensorAddr=0x28): - """" Intialize the sensor and required dependencies """ + """ " Intialize the sensor and required dependencies""" self.bus = bus self.sensorAddr = sensorAddr self.measInterval = measInterval self.softResetCode = b"\xa3" - + def _read_reg(self, regAddr, bytesToRead=1): - """ Internal function to read data from the sensor register and returns it raw """ + """Internal function to read data from the sensor register and returns it raw""" readVal = self.bus.readfrom_mem(self.sensorAddr, regAddr, bytesToRead) return readVal - + def _write_reg(self, regAddr, writeData): - """ Internal function to write data to sensor register """ + """Internal function to write data to sensor register""" self.bus.writeto_mem(self.sensorAddr, regAddr, writeData) - + def _is_sensor_ready(self): - """ Helper function to check the sensor status """ - reg = self.regMap['REG_SENS_STS_BITF_SENS_RDY'] - return (self._read_reg(reg[addr])[0] & reg[mask]) - + """Helper function to check the sensor status""" + reg = self.regMap["REG_SENS_STS_BITF_SENS_RDY"] + return self._read_reg(reg[addr])[0] & reg[mask] + def _soft_reset(self): - """ Helper function to perform soft reset of the sensor """ + """Helper function to perform soft reset of the sensor""" self._write_reg(_PASCO2_REG_SENS_RST, self.softResetCode) - + def _set_mode(self, mode): - """ Helper function to set the mode of sensor. Currently supported modes: + """Helper function to set the mode of sensor. Currently supported modes: 1. Idle 2. Continuous """ - if mode == 'idle': modeVal = 0x00 - if mode == 'continuous': modeVal = 0x02 - - reg = self.regMap['REG_MEAS_CFG_BITF_OP_MODE'] + if mode == "idle": + modeVal = 0x00 + if mode == "continuous": + modeVal = 0x02 + + reg = self.regMap["REG_MEAS_CFG_BITF_OP_MODE"] readData = self._read_reg(reg[addr])[0] writeData = bytes([(readData & ~(reg[mask])) | modeVal]) - self._write_reg(_PASCO2_REG_MEAS_CFG,writeData) - + self._write_reg(_PASCO2_REG_MEAS_CFG, writeData) + def initialize(self): - """ Public function to initialize the sensor """ + """Public function to initialize the sensor""" try: # wait for sensor to be ready sensor_ready = self._is_sensor_ready() @@ -84,30 +88,30 @@ class PASCO2: self._write_reg(_PASCO2_REG_MEAS_RATE_H, buf) # reset operation mode to idle mode - self._set_mode('idle') + self._set_mode("idle") # start continuous mode - self._set_mode('continuous') - + self._set_mode("continuous") + return _PASCO2_SUCCESS except: return _PASCO2_ERROR - + def getCO2Value(self): - """ Public function to get the CO2 value """ + """Public function to get the CO2 value""" while True: - try: + try: # get meas status - reg = self.regMap['REG_MEAS_STS_BITF_DATA_RDY'] + reg = self.regMap["REG_MEAS_STS_BITF_DATA_RDY"] readStatus = self._read_reg(reg[addr]) data_ready = readStatus[0] & reg[mask] - if data_ready: + if data_ready: # get CO2 value - reg = self.regMap['REG_CO2PPM_H_BITF_CO2_PPM_H'] + reg = self.regMap["REG_CO2PPM_H_BITF_CO2_PPM_H"] readVal = self._read_reg(reg[addr], 2) co2_value = (readVal[0] << 8) | readVal[1] return co2_value except: - return _PASCO2_ERROR \ No newline at end of file + return _PASCO2_ERROR From e78d4c61ffc6cd397dd9c01183f5618e0764525e Mon Sep 17 00:00:00 2001 From: NikhitaR-IFX Date: Thu, 13 Apr 2023 19:03:14 +0530 Subject: [PATCH 5/8] micropython/drivers/sensor/pasco2: Renaming function to get_co2_value. Signed-off-by: NikhitaR-IFX --- micropython/drivers/sensor/pasco2/pasco2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/micropython/drivers/sensor/pasco2/pasco2.py b/micropython/drivers/sensor/pasco2/pasco2.py index 03e4eaca..07bcc749 100644 --- a/micropython/drivers/sensor/pasco2/pasco2.py +++ b/micropython/drivers/sensor/pasco2/pasco2.py @@ -98,7 +98,7 @@ class PASCO2: except: return _PASCO2_ERROR - def getCO2Value(self): + def get_co2_value(self): """Public function to get the CO2 value""" while True: try: From 79534f132d9bd222e4f25bca36168719934149c4 Mon Sep 17 00:00:00 2001 From: NikhitaR-IFX Date: Tue, 16 May 2023 13:13:51 +0530 Subject: [PATCH 6/8] micropython/drivers/sensor/pasco2: Adding functioand implementing test. Signed-off-by: NikhitaR-IFX --- .../drivers/sensor/pasco2/pasco2Test.py | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 micropython/drivers/sensor/pasco2/pasco2Test.py diff --git a/micropython/drivers/sensor/pasco2/pasco2Test.py b/micropython/drivers/sensor/pasco2/pasco2Test.py new file mode 100644 index 00000000..e2016e4b --- /dev/null +++ b/micropython/drivers/sensor/pasco2/pasco2Test.py @@ -0,0 +1,45 @@ +# Tests for PASCO2 module +from machine import I2C +import time +import pasco2 as sensor + +i2c = I2C(0) +pasco2 = sensor.PASCO2(i2c) + + +def sensor_init(): + init_status = pasco2.initialize() + return init_status + + +def sensor_get_specs(): + # read product id + sensorID = pasco2.get_prod_id() + # read revision id + revID = pasco2.get_rev_id() + return [sensorID, revID] + + +def sensor_get_values(): + co2ppm = pasco2.get_co2_value() + return co2ppm + + +print("PASCO2 test module running") +print("\nTest 1: Sensor Init") +print("Status: Test", "passed" if sensor_init() == 0 else "failed") +print("\nTest 2: Get sensor specs") +specs = sensor_get_specs() +print("Status: Test", "passed" if (specs.count(-1) == 0) else "failed") +print("\nTest 3: Get sensor values for 100 cycles") +for i in range(0, 100): + time.sleep(1) + co2ppm = sensor_get_values() + if co2ppm != -1: + print( + "Status: Test", + "passed" if (co2ppm in range(0, 1000)) else "failed", + "[CO2 Value:", + co2ppm, + "]", + ) From c9ff37bfb6dca6ecce49fae07ea661e958c61ea5 Mon Sep 17 00:00:00 2001 From: NikhitaR-IFX Date: Tue, 16 May 2023 13:17:38 +0530 Subject: [PATCH 7/8] sensor/pasco2: Adding functions and implementing test. Signed-off-by: NikhitaR-IFX --- micropython/drivers/sensor/pasco2/pasco2.py | 25 +++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/micropython/drivers/sensor/pasco2/pasco2.py b/micropython/drivers/sensor/pasco2/pasco2.py index 07bcc749..500ffd52 100644 --- a/micropython/drivers/sensor/pasco2/pasco2.py +++ b/micropython/drivers/sensor/pasco2/pasco2.py @@ -10,6 +10,7 @@ _PASCO2_REG_MEAS_CFG = const(0x04) # Measurement mode configuration register ad _PASCO2_REG_CO2PPM_H = const(0x05) # CO2 concentration result MSB register address _PASCO2_REG_MEAS_STS = const(0x07) # Measurement status register address _PASCO2_REG_SENS_RST = const(0x10) # Soft reset register address +_PASCO2_REG_PROD_ID = const(0x00) # Product and revision ID register address # Error codes _PASCO2_SUCCESS = 0 @@ -28,6 +29,8 @@ class PASCO2: "REG_MEAS_CFG_BITF_OP_MODE": [_PASCO2_REG_MEAS_CFG, 0x03], # Operation Mode type bit "REG_MEAS_STS_BITF_DATA_RDY": [_PASCO2_REG_MEAS_STS, 0x10], # Data ready status bit "REG_CO2PPM_H_BITF_CO2_PPM_H": [_PASCO2_REG_CO2PPM_H, 0xFF], # Stored CO2 value bit + "REG_PROD_ID_BITF_PROD": [_PASCO2_REG_PROD_ID, 0xE0], # Product id bit + "REG_PROD_ID_BITF_REV": [_PASCO2_REG_PROD_ID, 0x1F], # Revision id bit } def __init__(self, bus, measInterval=10, sensorAddr=0x28): @@ -70,6 +73,8 @@ class PASCO2: writeData = bytes([(readData & ~(reg[mask])) | modeVal]) self._write_reg(_PASCO2_REG_MEAS_CFG, writeData) + # def _get_bit_field(self, bitField, bitValue): + def initialize(self): """Public function to initialize the sensor""" try: @@ -115,3 +120,23 @@ class PASCO2: return co2_value except: return _PASCO2_ERROR + + def get_prod_id(self): + """Public function to get the sensor product id""" + try: + reg = self.regMap["REG_PROD_ID_BITF_PROD"] + readID = (self._read_reg(reg[addr])[0] & 0xE0) >> 5 + return readID + + except: + return _PASCO2_ERROR + + def get_rev_id(self): + """Public function to get the sensor revision id""" + try: + reg = self.regMap["REG_PROD_ID_BITF_REV"] + readID = (self._read_reg(reg[addr])[0] & 0x1F) >> 0 + return readID + + except: + return _PASCO2_ERROR From dcfadf6762e2e8ba42d6bb084dcd5dbe6dcad85e Mon Sep 17 00:00:00 2001 From: NikhitaR-IFX Date: Tue, 16 May 2023 13:31:17 +0530 Subject: [PATCH 8/8] sensor/pasco2: Removing commented code. Signed-off-by: NikhitaR-IFX --- micropython/drivers/sensor/pasco2/pasco2.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/micropython/drivers/sensor/pasco2/pasco2.py b/micropython/drivers/sensor/pasco2/pasco2.py index 500ffd52..4c80532d 100644 --- a/micropython/drivers/sensor/pasco2/pasco2.py +++ b/micropython/drivers/sensor/pasco2/pasco2.py @@ -73,8 +73,6 @@ class PASCO2: writeData = bytes([(readData & ~(reg[mask])) | modeVal]) self._write_reg(_PASCO2_REG_MEAS_CFG, writeData) - # def _get_bit_field(self, bitField, bitValue): - def initialize(self): """Public function to initialize the sensor""" try: