TMOS Unit

支持以下产品:

TMOS

MicroPython 应用示例

import os, sys, io
import M5
from M5 import *
from unit import TMOSUnit
from hardware import *


title0 = None
label0 = None
title1 = None
title2 = None
TMOSTest = None
label1 = None
label2 = None
label3 = None
i2c0 = None
tmos_0 = None


def tmos_0_presence_detect_event(arg):
    global title0, label0, title1, title2, TMOSTest, label1, label2, label3, i2c0, tmos_0
    label1.setText(str((str("Prescence Flag:") + str((tmos_0.get_presence_state())))))
    label0.setText(str((str("Prescence:") + str((tmos_0.get_presence_value())))))


def tmos_0_motion_detect_event(arg):
    global title0, label0, title1, title2, TMOSTest, label1, label2, label3, i2c0, tmos_0
    label3.setText(str((str("Motion Flag:") + str((tmos_0.get_motion_state())))))
    label2.setText(str((str("Motion:") + str((tmos_0.get_motion_value())))))


def tmos_0_presence_not_detected_event(arg):
    global title0, label0, title1, title2, TMOSTest, label1, label2, label3, i2c0, tmos_0
    label1.setText(str((str("Prescence Flag:") + str((tmos_0.get_presence_state())))))


def tmos_0_motion_not_detected_event(arg):
    global title0, label0, title1, title2, TMOSTest, label1, label2, label3, i2c0, tmos_0
    label3.setText(str((str("Motion Flag:") + str((tmos_0.get_motion_state())))))


def setup():
    global title0, label0, title1, title2, TMOSTest, label1, label2, label3, i2c0, tmos_0

    M5.begin()
    Widgets.fillScreen(0x222222)
    title0 = Widgets.Title("Title", 3, 0xFFFFFF, 0x0000FF, Widgets.FONTS.DejaVu18)
    label0 = Widgets.Label("Prescence:", 2, 65, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
    title1 = Widgets.Title("Title", 3, 0xFFFFFF, 0x0000FF, Widgets.FONTS.DejaVu18)
    title2 = Widgets.Title("Title", 3, 0xFFFFFF, 0x0000FF, Widgets.FONTS.DejaVu18)
    TMOSTest = Widgets.Title("Title", 3, 0xFFFFFF, 0x0000FF, Widgets.FONTS.DejaVu18)
    label1 = Widgets.Label(
        "Prescence Flag", 2, 98, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18
    )
    label2 = Widgets.Label("Motion:", 2, 130, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
    label3 = Widgets.Label("Motion Flag:", 2, 160, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)

    i2c0 = I2C(0, scl=Pin(1), sda=Pin(2), freq=100000)
    title0.setText("TMOS Test")
    tmos_0 = TMOSUnit(i2c0, 0x5A)
    tmos_0.set_callback(tmos_0_presence_detect_event, tmos_0.PRESENCE_DETECT)
    tmos_0.set_callback(tmos_0_motion_detect_event, tmos_0.MOTION_DETECT)
    tmos_0.set_callback(tmos_0_presence_not_detected_event, tmos_0.PRESENCE_NOT_DETECTED)
    tmos_0.set_callback(tmos_0_motion_not_detected_event, tmos_0.MOTION_NOT_DETECTED)
    label0.setText(str("Prescence:"))
    label1.setText(str("Prescence Flag:"))
    label2.setText(str("Motion:"))
    label3.setText(str("Motion Flag:"))
    print(tmos_0.get_gain_mode())


def loop():
    global title0, label0, title1, title2, TMOSTest, label1, label2, label3, i2c0, tmos_0
    M5.update()
    tmos_0.tick_callback()


if __name__ == "__main__":
    try:
        setup()
        while True:
            loop()
    except (Exception, KeyboardInterrupt) as e:
        try:
            from utility import print_error_msg

            print_error_msg(e)
        except ImportError:
            print("please update to latest firmware")

UiFlow2 应用示例

example.png

tmos_cores3_example.m5f2

class TMOSUnit

Constructors

class TMOSUnit(i2c0, address)

创建一个 TMOSUnit 对象。

参数:
  • i2c – I2C 对象

  • address – I2C 地址,默认为 0x5A

UIFLOW2:

init.png

Methods

TMOSUnit.get_data_ready() bool

获取 TMOSUnit(TAMBIENT、TOBJECT、TAMB_SHOCK、TPRESENCE、TMOTION)的数据更新状态。

返回:

TMOSUnit 的数据更新状态。

UIFLOW2:

get_data_ready.png

TMOSUnit.get_motion_state() bool

获取 TMOSUnit 检测到的运动状态

返回:

运动状态。

UIFLOW2:

get_motion_state.png

TMOSUnit.get_motion_value() int

获取运动值(单位:cm^-1)

返回:

TMOSUnit 的运动值。

UIFLOW2:

get_motion_value.png

TMOSUnit.get_presence_state() bool

获取 TMOSUnit 检测到的存在状态

返回:

存在状态。

UIFLOW2:

get_presence_state.png

TMOSUnit.get_presence_value() int

获取存在值(单位:cm^-1)

返回:

TMOSUnit 的 presence 值。

UIFLOW2:

get_presence_value.png

TMOSUnit.get_tamb_shock_state() bool

获取 TMOSUnit 检测到的环境温度冲击状态

返回:

环境温度冲击检测状态。

UIFLOW2:

get_tamb_shock_state.png

TMOSUnit.get_tambient_raw_value() int

获取环境温度,表示与传感器热耦合的环境温度。

返回:

TMOSUnit 的环境温度。

UIFLOW2:

get_tambient_raw_value.png

TMOSUnit.get_temperature_data() float

获取对象温度,表示视场内对象发出的红外辐射量。

返回:

TMOSUnit 的对象温度。

UIFLOW2:

get_temperature_data.png

TMOSUnit.set_callback(self, handler, trigger: Literal[0, 1, 2, 3, 4, 5])

为不同触发条件设置回调函数。

参数:
  • handler – 要设置的回调函数。

  • trigger – 用于设置处理函数的事件触发器: - ambient temperature:0 - motion:1 - presence:2 - ambient temperature not:3 - motion not:4 - presence not:5

UIFLOW2:

set_callback.png

TMOSUnit.tick_callback(self)

检查 TMOSUnit 的状态,并根据事件标志执行相应的回调函数。

该方法应定期调用,用于轮询传感器状态并处理检测到的任何事件。

它会检查以下标志位,并在标志位被设置时触发对应的回调函数:

  • ambient temperature (0):表示环境温度冲击事件。

  • motion (1):表示检测到运动事件。

  • presence (2):表示一次存在检测事件。

  • ambient temperature not (3):表示未发生环境温度冲击事件。

  • motion not (4):表示未发生运动检测事件。

  • presence not (5):表示未发生存在检测事件。

与这些事件关联的回调函数通过 set_callback() 方法进行设置。

UIFLOW2:

tick_callback.png

TMOSUnit.get_gain_mode() int

获取 TMOS 的增益模式配置。

返回:

增益模式

UIFLOW2:

get_gain_mode.png

TMOSUnit.get_tmos_sensitivity() int

获取 TMOS 的灵敏度配置。

返回:

TMOS 灵敏度

UIFLOW2:

get_tmos_sensitivity.png

TMOSUnit.get_motion_threshold() int

获取运动检测算法的运动阈值。

return:

TMOSUnit 的运动阈值。

UIFLOW2:

get_motion_threshold.png

TMOSUnit.get_motion_hysteresis() int

获取运动检测算法的滞后值。

return:

TMOSUnit 的运动滞后。

UIFLOW2:

get_motion_hysteresis.png

TMOSUnit.get_presence_threshold() int

获取用于存在检测算法的存在阈值。

返回:

TMOSUnit 的存在阈值。

UIFLOW2:

get_presence_threshold.png

TMOSUnit.get_presence_hysteresis() int

获取用于存在检测算法的滞回值。

return:

TMOSUnit 的存在检测迟滞。

UIFLOW2:

get_presence_hysteresis.png

TMOSUnit.get_tambient_shock_threshold() int

获取 Tambient 冲击检测算法的环境温度冲击阈值。

return:

TMOSUnit 的环境温度冲击阈值。

UIFLOW2:

get_tambient_shock_threshold.png

TMOSUnit.get_tambient_shock_hysteresis() int

获取环境温度冲击检测算法的迟滞值。

return:

TMOSUnit 的环境温度冲击滞后。

UIFLOW2:

get_tambient_shock_hysteresis.png

TMOSUnit.set_gain_mode(val) None

设置 TMOS 的增益模式(注意:DEFAULT 模式灵敏度高,但容易导致传感器过饱和;WIDE 模式检测距离短,但可避免传感器饱和)

参数:

val (int) – 增益模式 选项: - GAIN_WIDE_MODE:0 - GAIN_DEFAULT_MODE:7

UIFLOW2:

set_gain_mode.png

TMOSUnit.set_tmos_sensitivity(val) None

设置 TMOS 的灵敏度

参数:

val (int) – 灵敏度(0x00 ~ 0xFF)

UIFLOW2:

set_tmos_sensitivity.png

TMOSUnit.set_motion_threshold(val)

设置运动检测算法的运动阈值。

参数:

val (int) – 运动阈值 (0x0~0x7FFF)

返回:

设置成功了吗?

UIFLOW2:

set_motion_threshold.png

TMOSUnit.set_motion_hysteresis(val)

设置运动检测算法的滞后值。

参数:

val (int) – 运动滞回(0x0~0xFF)

UIFLOW2:

set_motion_hysteresis.png

TMOSUnit.set_presence_threshold(val) bool

设置存在检测算法的存在阈值。

参数:

val (int) – 存在检测阈值 (0x0~0x7FFF)

返回:

设置成功了吗?

UIFLOW2:

set_presence_threshold.png

TMOSUnit.set_presence_hysteresis(val)

为存在检测算法设置滞后值。

参数:

val (int) – 存在检测滞回(0x0~0xFF)

UIFLOW2:

set_presence_hysteresis.png

TMOSUnit.set_tambient_shock_threshold(val) bool

设置环境温度冲击检测算法的环境温度冲击阈值。

参数:

val (int) – 环境温度冲击阈值 (0x0~0x7FFF)

返回:

设置成功了吗?

UIFLOW2:

set_tambient_shock_threshold.png

TMOSUnit.set_tambient_shock_hysteresis(val)

设置环境温度冲击检测算法的滞回值。

参数:

val (int) – 环境温度冲击回滞(0x0~0xFF)

UIFLOW2:

set_tambient_shock_hysteresis.png

TMOSUnit.is_connected() None

检查 TMOSUnit 是否已连接到设备。

TMOSUnit.begin() None

初始化 TMOSUnit。

TMOSUnit.reset() None

重置 TMOSUnit(包括重新启动 OTP 内存内容、重置算法)。

TMOSUnit.reset_algo() None

重置算法(在修改存在检测算法选择中的阈值、滞回、绝对值、低通滤波器配置时,必须执行此函数)。

TMOSUnit.set_lpf_p_bandwidth(val) None

设置用于存在检测的低通滤波器配置。

参数:

val (int) – 低通滤波器的配置值。选项: - TMOSUnit.STHS34PF80_LPF_ODR_DIV_9:ODR/9,0 - TMOSUnit.STHS34PF80_LPF_ODR_DIV_20:ODR/20,1 - TMOSUnit.STHS34PF80_LPF_ODR_DIV_50:ODR/50,2 - TMOSUnit.STHS34PF80_LPF_ODR_DIV_100:ODR/100,3 - TMOSUnit.STHS34PF80_LPF_ODR_DIV_200:ODR/200,4 - TMOSUnit.STHS34PF80_LPF_ODR_DIV_400:ODR/400,5 - TMOSUnit.STHS34PF80_LPF_ODR_DIV_800:ODR/800,6

TMOSUnit.get_lpf_p_bandwidth() int

获取用于存在检测的低通滤波器配置。

返回:

低通滤波器带宽

TMOSUnit.set_lpf_a_t_bandwidth(val) None

设置用于环境温度冲击检测的低通滤波器配置。

参数:

val (int) – 低通滤波器的配置值。选项: - TMOSUnit.STHS34PF80_LPF_ODR_DIV_9:ODR/9,0 - TMOSUnit.STHS34PF80_LPF_ODR_DIV_20:ODR/20,1 - TMOSUnit.STHS34PF80_LPF_ODR_DIV_50:ODR/50,2 - TMOSUnit.STHS34PF80_LPF_ODR_DIV_100:ODR/100,3 - TMOSUnit.STHS34PF80_LPF_ODR_DIV_200:ODR/200,4 - TMOSUnit.STHS34PF80_LPF_ODR_DIV_400:ODR/400,5 - TMOSUnit.STHS34PF80_LPF_ODR_DIV_800:ODR/800,6

TMOSUnit.get_lpf_a_t_bandwidth() int

获取用于环境温度冲击检测的低通滤波器配置。

返回:

低通滤波器带宽

TMOSUnit.set_lpf_p_m_bandwidth(val) None

设置用于存在与运动检测的低通滤波器配置。

参数:

val (int) – 低通滤波器的配置值。选项: - TMOSUnit.STHS34PF80_LPF_ODR_DIV_9:ODR/9,0 - TMOSUnit.STHS34PF80_LPF_ODR_DIV_20:ODR/20,1 - TMOSUnit.STHS34PF80_LPF_ODR_DIV_50:ODR/50,2 - TMOSUnit.STHS34PF80_LPF_ODR_DIV_100:ODR/100,3 - TMOSUnit.STHS34PF80_LPF_ODR_DIV_200:ODR/200,4 - TMOSUnit.STHS34PF80_LPF_ODR_DIV_400:ODR/400,5 - TMOSUnit.STHS34PF80_LPF_ODR_DIV_800:ODR/800,6

TMOSUnit.get_lpf_p_m_bandwidth() int

获取存在检测和运动检测的低通滤波器配置。

返回:

低通滤波器带宽

TMOSUnit.set_lpf_m_bandwidth(val) None

设置用于运动检测的低通滤波器配置。

参数:

val (int) – 低通滤波器的配置值。选项: - TMOSUnit.STHS34PF80_LPF_ODR_DIV_9:ODR/9,0 - TMOSUnit.STHS34PF80_LPF_ODR_DIV_20:ODR/20,1 - TMOSUnit.STHS34PF80_LPF_ODR_DIV_50:ODR/50,2 - TMOSUnit.STHS34PF80_LPF_ODR_DIV_100:ODR/100,3 - TMOSUnit.STHS34PF80_LPF_ODR_DIV_200:ODR/200,4 - TMOSUnit.STHS34PF80_LPF_ODR_DIV_400:ODR/400,5 - TMOSUnit.STHS34PF80_LPF_ODR_DIV_800:ODR/800,6

TMOSUnit.get_lpf_m_bandwidth() int

获取用于运动检测的低通滤波器配置。

返回:

低通滤波器带宽

TMOSUnit.set_avg_tobj_num(val) None

设置用于对对象温度进行平均的采样次数。

参数:

val (int) – 用于配置要进行平均的采样数量。选项: - TMOSUnit.STHS34PF80_AVG_TMOS_2:RMS 噪声:90,0 - TMOSUnit.STHS34PF80_AVG_TMOS_8:RMS 噪声:50,1 - TMOSUnit.STHS34PF80_AVG_TMOS_32:RMS 噪声:25,2 - TMOSUnit.STHS34PF80_AVG_TMOS_128:RMS 噪声:20,3 - TMOSUnit.STHS34PF80_AVG_TMOS_256:RMS 噪声:15,4 - TMOSUnit.STHS34PF80_AVG_TMOS_512:RMS 噪声:12,5 - TMOSUnit.STHS34PF80_AVG_TMOS_1024:RMS 噪声:11,6 - TMOSUnit.STHS34PF80_AVG_TMOS_2048:RMS 噪声:10,7

TMOSUnit.get_avg_tobj_num() int

获取用于对环境温度进行平均的采样数。

返回:

物体温度的平均采样次数

TMOSUnit.set_avg_tamb_num(val) None

设置用于对环境温度进行平均的采样次数。

参数:

val (int) – 用于配置要进行平均的采样次数。选项: - TMOSUnit.STHS34PF80_AVG_T_8:0 - TMOSUnit.STHS34PF80_AVG_T_4:1 - TMOSUnit.STHS34PF80_AVG_T_2:2 - TMOSUnit.STHS34PF80_AVG_T_1:3

TMOSUnit.get_avg_tamb_num() int

获取环境温度样本的平均数量。

返回:

平均环境温度的采样次数。

TMOSUnit.set_tmos_odr(val) None

设置 TMOS 的输出数据速率

参数:

val (int) – TMOS 输出数据速率 选项: - TMOSUnit.STHS34PF80_TMOS_ODR_OFF:ODR 频率 (Hz):关机模式,0 - TMOSUnit.STHS34PF80_TMOS_ODR_AT_0Hz25:ODR 频率 (Hz):0.25,1 - TMOSUnit.STHS34PF80_TMOS_ODR_AT_0Hz50:ODR 频率 (Hz):0.5,2 - TMOSUnit.STHS34PF80_TMOS_ODR_AT_1Hz:ODR 频率 (Hz):1,3 - TMOSUnit.STHS34PF80_TMOS_ODR_AT_2Hz:ODR 频率 (Hz):2,4 - TMOSUnit.STHS34PF80_TMOS_ODR_AT_4Hz:ODR 频率 (Hz):4,5 - TMOSUnit.STHS34PF80_TMOS_ODR_AT_8Hz:ODR 频率 (Hz):8,6 - TMOSUnit.STHS34PF80_TMOS_ODR_AT_15Hz:ODR 频率 (Hz):15,7 - TMOSUnit.STHS34PF80_TMOS_ODR_AT_30Hz:ODR 频率 (Hz):30,8

TMOSUnit.get_tmos_odr() int

获取 TMOS 的输出数据速率

返回:

输出数据速率

TMOSUnit.set_block_data_update(val) None

启用/禁用物体温度和环境温度寄存器数据更新

参数:

val (bool) – 启用或禁用寄存器数据更新

TMOSUnit.get_block_data_update() bool

获取对象温度和环境温度存储数据更新启用状态

返回:

数据寄存器更新使能状态

TMOSUnit.set_tmos_one_shot(val) None

设置一次性数据采集的状态

参数:

val (bool) – 一次性采集状态

TMOSUnit.get_tmos_one_shot() bool

获取触发一次性采集的状态

返回:

获取触发一次性采集的状态

TMOSUnit.refresh_state() self

获取 TMOSUnit 的当前状态,包括人体存在检测、运动检测以及环境温度冲击检测。

返回:

具有更新状态标志的 TMOSUnit 实例。