用户工具

站点工具


micropython:mpy-lib:sensor:stts751温度传感器

STTS751 温度传感器

ST 公司的数字温度传感器,通过2线SMBus 2.0兼容总线进行通信。进行温度测量时,可实现用户可配置的分辨率(9位至12位)。在9位分辨率下,最小步长为0.5°C,在12位分辨率下,最小步长为0.0625°C。在默认分辨率(10位,0.25°C/LSB)下,转换时间标称值为21毫秒。漏极开路EVENT输出用于指示报警条件,在该条件下,测得的温度已超过用户设置的上限或低于下限。当EVENT引脚被置为有效后,主机可以使用SMBus警报响应地址 (ARA) 协议进行响应,STTS751将通过发送其从机地址来响应该协议。

使用方法

from machine import I2C
import STTS751
 
i2c = I2C(1)
stt = STTS751.STTS751(i2c)
stt.temperature()

在irq中的使用方法

from machine import I2C
from pyb import Timer
import STTS751
 
i2c = I2C(1)
stt = STTS751.STTS751(i2c)
 
def tim_irq(t):
    print(stt.temperature_irq())
 
tim = Timer(1, freq = 1)
tim.callback(tim_irq)

驱动源码

STTS751.py
# STTS751 temperature seneor micropython drive
# ver: 1.0
# License: MIT
# Author: shaoziyang (shaoziyang@micropython.org.cn)
# v1.0 2019.7
 
STTS751_RESOLUTION = (8, 0, 4, 12, 10, 11, 9, 12)
STTS751_REG_STATUS = const(1)
STTS751_REG_CONFIG = const(3)
STTS751_REG_CONRAT = const(4)
STTS751_REG_TEMPVH = const(0)
STTS751_REG_TEMPVL = const(2)
STTS751_REG_TEMPHH = const(5)
STTS751_REG_TEMPHL = const(6)
STTS751_REG_TEMPLH = const(7)
STTS751_REG_TEMPLL = const(8)
STTS751_REG_ONESHOT = const(15)
STTS751_REG_THERM = const(32)
STTS751_REG_THERMHYS = const(33)
 
class STTS751():
    def __init__(self, i2c):
        self.i2c = i2c
        self.addr = 0x4A
        self.tb = bytearray(1)
        self.rb = bytearray(1)
        self.oneshot = False
        self.oneshot_mode(False)
 
    def int16(self, d):
        return d if d < 0x8000 else d - 0x10000
 
    def setreg(self, reg, dat):
        self.tb[0] = dat
        self.i2c.writeto_mem(self.addr, reg, self.tb)
 
    def getreg(self, reg):
        self.i2c.readfrom_mem_into(self.addr, reg, self.rb)
        return self.rb[0]
 
    def get2reg(self, reg):
        return self.getreg(reg) + self.getreg(reg+1) * 256
 
    def resolution(self, res = None):
        self.getreg(STTS751_REG_CONFIG)
        if res is None:
            return STTS751_RESOLUTION[(self.rb[0] & 0x0C)//4 + 4]
        else:
            if res > 12 or res < 9: return
            self.rb[0] = (self.rb[0] & 0xF3) | STTS751_RESOLUTION[res-9]
            self.setreg(STTS751_REG_CONFIG, self.rb[0])
 
    def oneshot_mode(self, oneshot=None):
        if oneshot is None:
            return self.oneshot
        else:
            self.getreg(STTS751_REG_CONFIG)
            self.oneshot = oneshot
            if oneshot: self.rb[0] |= 0x40
            else: self.rb[0] &= 0xBF
            self.setreg(STTS751_REG_CONFIG, self.rb[0])
 
    def ONE_SHOT(self):
        if self.oneshot:
            self.setreg(STTS751_REG_ONESHOT, 1)
            while 1:
                if self.getreg(STTS751_REG_STATUS) < 0x80:
                    return
 
    def temperature(self):
        try:
            self.ONE_SHOT()
            return self.int16((self.getreg(STTS751_REG_TEMPVH)<<8) + self.getreg(STTS751_REG_TEMPVL))/256
        except MemoryError:
            return self.temperature_irq()
 
    def temperature_irq(self):
        self.ONE_SHOT()
        self.getreg(STTS751_REG_TEMPVH)
        return self.rb[0] if self.rb[0] < 128 else self.rb[0] - 256


purge    随机主题   
micropython/mpy-lib/sensor/stts751温度传感器.txt · 最后更改: 2021/02/28 23:12 (外部编辑) · 查看次数: 13761