Beispiel #1
0
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)
Beispiel #2
0
 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
Beispiel #3
0
 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)}"
Beispiel #4
0
 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
Beispiel #5
0
 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)
Beispiel #6
0
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()
Beispiel #7
0
"""

__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)