M5StickC & Sensor SHT 31



  • Hello, how can I integrate my SHT31 sensor into the M5StickC via Grove ?
    Here is my code from the Pycom Wipy with which the SHT runs perfectly.

    Main.py
    if (Sensorwahl) == 'sht31':

    i2c = I2C(0, I2C.MASTER, baudrate=100000)
    sensor = sht31.SHT31(i2c, addr=0x44)
    temp_humi = sensor.get_temp_humi()
    time.sleep(0.6)
    
    pycom.rgbled(0xff007f) # magenta
    pycom.heartbeat(False) #Lampe ausschalten um Energie zu sparen
    
    Temp1 = round(temp_humi[0],2)
    Feuchte1 = round(temp_humi[1],2)
    time.sleep(1)
    
    print('----------------------------------------------------------------------')
    print("Ohne Runden = Temperature: {} °C | Humidity: {} %".format(temp_humi[0], temp_humi[1]))
    print('----------------------------------------------------------------------')
    
    #Übergabe der Sensorwerte---------------------------------------
    Temp1 = (Temp1 + 0) #Übergabe und Differenzeingabe
    Feuchte1 = (Feuchte1 + 0) #Übergabe und Differenzeingabe
    #Übergabe der Sensorwerte---------------------------------------
    

    sht31.py
    from machine import I2C
    import time

    R_HIGH = const(1)
    R_MEDIUM = const(2)
    R_LOW = const(3)

    class SHT31(object):
    """
    Diese Klasse implementiert eine Schnittstelle zur SHT31 Temperatur und Luftfeuchtigkeit.
    Sensor von Sensirion.
    """
    # Diese statische Karte hilft, den Heap und die Programmlogik sauber zu halten.
    _map_cs_r = {
    True: {
    R_HIGH : b'\x2c\x06',
    R_MEDIUM : b'\x2c\x0d',
    R_LOW: b'\x2c\x10'
    },
    False: {
    R_HIGH : b'\x24\x00',
    R_MEDIUM : b'\x24\x0b',
    R_LOW: b'\x24\x16'
    }
    }

    def __init__(self, i2c, addr=0x44):
        """
        Initialisiert ein Sensorobjekt auf dem angegebenen I2C-Bus, auf das von der
        angegebene Adresse.
        """
        if i2c == None or i2c.__class__ != I2C:
            raise ValueError('I2C-Objekt als Argument benötigt!')
        self._i2c = i2c
        self._addr = addr
    
    def _send(self, buf):
        """
        Sendet das angegebene Pufferobjekt über I2C an den Sensor.
        """
        self._i2c.writeto(self._addr, buf)
    
    def _recv(self, count):
        """
        Lesen von Bytes vom Sensor über I2C. Die Anzahl der Bytes kann angegeben werden.
        als Argument.
        Liefert ein Bytearray für das Ergebnis.
        """
        return self._i2c.readfrom(self._addr, count)
    
    def _raw_temp_humi(self, r=R_HIGH, cs=True):
        """
        Lesen Sie die Rohtemperatur und Luftfeuchtigkeit vom Sensor ab und überspringen Sie CRC. Überprüfung.
        Liefert ein Tupel für beide Werte in dieser Reihenfolge.
        """
        if r not in (R_HIGH, R_MEDIUM, R_LOW):
            raise ValueError('Falscher Wiederholbarkeitswert angegeben!')
        self._send(self._map_cs_r[cs][r])
        time.sleep_ms(50)
        raw = self._recv(6)
        return (raw[0] << 8) + raw[1], (raw[3] << 8) + raw[4]
    
    def get_temp_humi(self, resolution=R_HIGH, clock_stretch=True, celsius=True):
        """
        Lesen Sie die Temperatur in Grad Celsius oder Fahrenheit und relativ dazu ab.
        Feuchtigkeit. Auflösung und Taktverlängerung können festgelegt werden.
        Liefert ein Tupel für beide Werte in dieser Reihenfolge.
        """
        t, h = self._raw_temp_humi(resolution, clock_stretch)
        if celsius:
            temp = -45 + (175 * (t / 65535.0))
        else:
            temp = -49 + (315 * (t / 65535.0))
        return temp, 100 * (h / 65535.0)