Page 1 of 1

Zacwire - Tsic506

Posted: Sun Feb 25, 2018 7:36 pm
by Chris001
Hi,

I would connect the Temperature sensor Tsic506 on my ESP32 board.
Does someone has already ported the zacwire protocol or successfull connect a Tsicxxx Sensor via pure Micropython?


Thanks
Chris

Re: Zacwire - Tsic506

Posted: Wed Mar 07, 2018 7:22 pm
by Chris001
Hi,

Im wondering why the first code does'nt return a correct result but the second does
The code is runnung on an ESP32.
Any ideas?

more about zagwire
https://www.mikrocontroller.net/attachm ... Oct-06.pdf

Code: Select all

import machine

MINTEMP = -10
MAXTEMP = 60

temperatur = []
tempvalue = []


def get_temperatur():
    if temperatur:
        tempstring = int("".join(str(val) for val in temperatur), 2)
        return round(float(tempstring / 2047 * (MAXTEMP - MINTEMP)) - MINTEMP, 1)

def callback(p):
    value = p.value()
    tempvalue.append(value)
    if len(tempvalue) == 6 and tempvalue != valid:
        tempvalue.pop(0)

    if len(tempvalue) == 20:
        temperatur.clear()
        temperatur.extend(tempvalue[1:9] + tempvalue[11:19])
        tempvalue.clear()

pin = machine.Pin(26, machine.Pin.IN, machine.Pin.PULL_UP)
pin.irq(trigger=machine.Pin.IRQ_FALLING, handler=callback)

Code: Select all

import machine

MINTEMP = -10
MAXTEMP = 60

class Temperatur(object):
    """ """

    _valid = [1, 0, 0, 0, 0, 0]

    def __init__(self, pin, celsius=True):
        """ """
        self._pin = machine.Pin(pin, machine.Pin.IN, machine.Pin.PULL_UP)
        self._celsius = celsius
        self._tempvalue = []
        self._temperatur = []

    def _callback(self, p):
        value = p.value()
        if not len(self._tempvalue) and not value:
            return

        self._verify(value)

    def _verify(self, value):
        """ """
        tempvalue = self._tempvalue
        tmp_len = len(tempvalue)

        if tmp_len == 6 and tempvalue != self._valid:
            tempvalue.pop(0)

        if tmp_len == 20:
            self._temperatur.clear()
            self._temperatur.extend(tempvalue[1:9] + tempvalue[11:19])
            tempvalue.clear()

    def sensor_on(self):
        self._pin.irq(trigger=machine.Pin.IRQ_FALLING, handler=self._callback)

    def sensor_off(self):
        pass

    def get_temperatur(self):
        if self._temperatur:
            print(self._temperatur)
            tempstring = int("".join(str(val) for val in self._temperatur), 2)
            return round(float(tempstring / 2047 * (MAXTEMP - MINTEMP)) - MINTEMP, 1)
temp = Temperatur(26)
temp.sensor_on()

print(temp.get_temperatur())

content of self._tempvalue

[1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1...

but is must be a sequence of..
content of tempvalue

[1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0,
1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1,
1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1,
1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0,
1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0,
1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0,
1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1,
1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1,
1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1,
1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0,
1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1,
1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1,
1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1,
1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1,
1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1,
1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0..

thank you
chris