class TsicSource(SignalSource): """ Temperature measurement signal source from TSIC 206/306 connected to GPIO. """ def __init__(self, identifier: str, pigpio_pi: pigpio, gpio_bcm: int, **kwargs): super().__init__(identifier, **kwargs) try: self.__gpio = gpio_bcm self.tsic = TsicInputChannel(pigpio_pi, gpio_bcm) except Exception as e: logger.warning('Failed to initialize TSIC input channel: ' + str(e)) # handle missing GPIO access for windows development self.tsic = None def start(self) -> None: super().start() if self.tsic is not None: self.tsic.start(lambda m: self._send(round(m.degree_celsius, 3), self.STATUS_OK)) def stop(self) -> None: super().stop() if self.tsic is not None: self.tsic.stop() def __repr__(self) -> str: return super().__repr__() + ' bcm_gpio=' + str(self.__gpio)
def read_temp(): pi = pigpio.pi() tsic = TsicInputChannel(pigpio_pi=pi, gpio=temperature_pin, tsic_type=TSIC306) measurement = tsic.measure_once(timeout=1.0) pi.stop() if not (measurement == Measurement.UNDEF): return measurement.degree_celsius
def read_temp(): pi = pigpio.pi() tsic = TsicInputChannel(pigpio_pi=pi, gpio=pin, tsic_type=TSIC306) measurement = tsic.measure_once(timeout=1.0) pi.stop() if measurement == Measurement.UNDEF: return "-273.15" else: return f"{round(measurement.degree_celsius, 2)}"
def __init__(self, pigpio_pi, gpio_bcm, **kwargs): super().__init__(**kwargs) try: self.__gpio = gpio_bcm self.tsic = TsicInputChannel(pigpio_pi, gpio_bcm) except Exception as e: logger.warn('Failed to initialize TSIC input channel: ' + str(e)) # handle missing GPIO access for windows development self.tsic = None
def __init__(self, gpio=4): self._temperature: float = 0 self._lock = threading.Lock() pi = pigpio.pi() self.tsic = TsicInputChannel(pigpio_pi=pi, gpio=gpio, tsic_type=TSIC306) self.tsic.start(self._store_measurement) time.sleep(0.2)
class TemperatureReader(object): def __init__(self, gpio=4): self._temperature: float = 0 self._lock = threading.Lock() pi = pigpio.pi() self.tsic = TsicInputChannel(pigpio_pi=pi, gpio=gpio, tsic_type=TSIC306) self.tsic.start(self._store_measurement) time.sleep(0.2) def get(self) -> float: self._lock.acquire() ret_temp = self._temperature self._lock.release() return ret_temp def close(self): self.tsic.stop() def _store_measurement(self, measurement: Measurement): self._lock.acquire() self._temperature = round(measurement.degree_celsius) self._lock.release()
""" __author__ = 'Holger Fleischmann' __copyright__ = 'Copyright 2019, Holger Fleischmann, Bavaria/Germany' __license__ = 'Apache License 2.0' import time import pigpio from tsic import TsicInputChannel, Measurement, TSIC306 # TsicInputChannel and ZacWireInputChannel require pigpio # for GPIO access with precise timing: pi = pigpio.pi() tsic = TsicInputChannel(pigpio_pi=pi, gpio=17, tsic_type=TSIC306) print('\nA. Single measurement:') print(tsic.measure_once(timeout=1.0)) print('\nB. All measurements for 1 second:') tsic.start(lambda measurement: print(measurement)) time.sleep(1) tsic.stop() print('\nC. One measurement per second for 3 seconds:') # start receiving in a context: with tsic: for i in range(3): time.sleep(1)