Treiber für Temperatursensor sirion-SHT3X-MicroPython

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Michael Saan
User
Beiträge: 3
Registriert: Montag 6. Dezember 2021, 08:36

Guten Tag,

ich habe eine Anfängerfrage. Ich möchte den in Python geschriebenen Treiber für den Temperatursensor SHT35 benutzen, den ich unter https://github.com/dvsu/Sensirion-SHT3X ... n/sht3x.py gefunden habe:

Code: Alles auswählen

from ubinascii import hexlify
from time import sleep
from machine import I2C


class SHT3X:

    def __init__(self, bus_obj:I2C, address:int):
        self.address = address
        self.bus = bus_obj

    def get_temperature_in_celsius(self, data:int) -> float:
        #   Temperature conversion formula (Celsius)
        #   T[C] = -45 + (175 * (raw_temp_data / (2^16 - 1)))
        return round(-45 + (175 * (data / ((2**16) - 1))), 2)    

    def get_temperature_in_fahrenheit(self, data:int) -> float:
        #   Temperature conversion formula (Fahrenheit)
        #   T[F] = -49 + (315 * (raw_temp_data / (2^16 - 1)))
        return round(-49 + (315 * (data / ((2**16) - 1))), 2)

    def get_relative_humidity(self, data:int) -> float:
        #   Relative humidity conversion formula
        #   RH = 100 * (raw_humidity_data / (2^16 - 1))
        return round(100 * (data/ ((2**16) - 1)), 2)

    def get_measurement(self) -> dict:

        try:
            sleep(0.05)
            self.bus.writeto(self.address, b'\x2c\x06')
            sleep(0.05)
            data = hexlify(self.bus.readfrom(self.address, 6))
            temp_data = int(data[0:4], 16)
            humi_data = int(data[6:10], 16)
            sleep(0.05)

            return {
                "temp_celsius": self.get_temperature_in_celsius(temp_data),
                "temp_fahrenheit": self.get_temperature_in_fahrenheit(temp_data),
                "humidity": self.get_relative_humidity(humi_data)
            }
        
        except Exception as e:
            print("Failed to read temperature and humidity value")
            print(e)


class SHT31(SHT3X):

    def __init__(self, bus_obj:I2C):
        self.sensor_name = 'SHT31'
        super().__init__(bus_obj, address=68) # 0x44


class SHT35(SHT3X):

    def __init__(self, bus_obj:I2C):
        self.sensor_name = 'SHT35'
        super().__init__(bus_obj, address=69) # 0x45
Die I2C- Initialisierung habe ich so vorgenommen:

Code: Alles auswählen

from machine import Pin, I2C

# Initialisierung I2C-Pins
i2c_sda = Pin(14)
i2c_scl = Pin(15)

# Initialisierung I2C
i2c = I2C(1,sda=i2c_sda,scl=i2c_scl,freq=400000)
Aber wie muss ich die Klasse SHT3X oder SHT35 aufrufen, damit der Temperaturwert in eine Variable geschrieben wird?
Benutzeravatar
Dennis89
User
Beiträge: 1516
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

du speicherst den gezeigten Code auf deinem Microkontroller ab, zum Beispiel unter sht3x.py.
In deinem Code importierst du dann die gewünschte Klasse:

Code: Alles auswählen

from sht3x import SHT35

…
i2c = …
sht35 = SHT35(i2c, 69)
print(sht35.get_measurement())
69 musst du gegebenenfalls gegen deine richtige Adresse ersetzen.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Michael Saan
User
Beiträge: 3
Registriert: Montag 6. Dezember 2021, 08:36

Vielen Dank, es hat geklappt. Ich kann die Werte für die Temperatur und die Luftfeuchtigkeit auslesen.
Antworten