mirror of
https://gitee.com/qpy-solutions/dtu.git
synced 2025-05-20 19:48:23 +08:00
110 lines
3.5 KiB
Python
110 lines
3.5 KiB
Python
|
# Copyright (c) Quectel Wireless Solution, Co., Ltd.All Rights Reserved.
|
|||
|
#
|
|||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|||
|
# you may not use this file except in compliance with the License.
|
|||
|
# You may obtain a copy of the License at
|
|||
|
#
|
|||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|||
|
#
|
|||
|
# Unless required by applicable law or agreed to in writing, software
|
|||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|||
|
# See the License for the specific language governing permissions and
|
|||
|
# limitations under the License.from machine import I2C
|
|||
|
|
|||
|
#!/usr/bin/env python
|
|||
|
# -*- coding: utf-8 -*-
|
|||
|
|
|||
|
"""
|
|||
|
@file :temp_humidity_sensor.py
|
|||
|
@author :elian.wang@quectel.com
|
|||
|
@brief :Show tempurature and humidity sensor TH20 usage
|
|||
|
@version :0.1
|
|||
|
@date :2022-05-20 11:14:24
|
|||
|
@copyright :Copyright (c) 2022
|
|||
|
"""
|
|||
|
|
|||
|
import utime as time
|
|||
|
from machine import I2C
|
|||
|
|
|||
|
class TempHumiditySensor:
|
|||
|
"""Read tempurature and humidity sensor value,reset sensor
|
|||
|
"""
|
|||
|
def __init__(self):
|
|||
|
self.__i2c = I2C(I2C.I2C1, I2C.STANDARD_MODE)
|
|||
|
self.__data_cache = None
|
|||
|
# Initialization command
|
|||
|
self.__CALIBRATION_CMD = 0xE1
|
|||
|
# Trigger measurement
|
|||
|
self.__START_MEASURMENT_CMD = 0xAC
|
|||
|
# reset
|
|||
|
self.__RESET_CMD = 0xBA
|
|||
|
# slave address
|
|||
|
self.__i2c_addr = 0X38
|
|||
|
self.init()
|
|||
|
|
|||
|
def __write_data(self, data):
|
|||
|
self.__i2c.write(self.__i2c_addr,
|
|||
|
bytearray(0x00), 0,
|
|||
|
bytearray(data), len(data))
|
|||
|
|
|||
|
def __read_data(self, length):
|
|||
|
r_data = [0x00 for i in range(length)]
|
|||
|
r_data = bytearray(r_data)
|
|||
|
self.__i2c.read(self.__i2c_addr,
|
|||
|
bytearray(0x00), 0,
|
|||
|
r_data, length,
|
|||
|
0)
|
|||
|
return list(r_data)
|
|||
|
|
|||
|
def __get_datas(self, length):
|
|||
|
# Trigger data conversion,send 0xAC, 0x33, 0x00
|
|||
|
self.__write_data([self.__START_MEASURMENT_CMD, 0x33, 0x00])
|
|||
|
time.sleep_ms(200) # at last delay 75ms
|
|||
|
self.__data_cache = self.__read_data(length)
|
|||
|
|
|||
|
def __humidity_transformat(self):
|
|||
|
data = self.__data_cache[1:6]
|
|||
|
humidity = (data[0] << 12) | (
|
|||
|
data[1] << 4) | ((data[2] & 0xF0) >> 4)
|
|||
|
return round((humidity / (1 << 20)) * 100.0, 2)
|
|||
|
|
|||
|
def __temperature_transformat(self):
|
|||
|
data = self.__data_cache[1:6]
|
|||
|
temperature = ((data[2] & 0xf) << 16) | (
|
|||
|
data[3] << 8) | data[4]
|
|||
|
return round((temperature * 200.0 / (1 << 20)) - 50, 2)
|
|||
|
|
|||
|
def init(self):
|
|||
|
self.__write_data([self.__CALIBRATION_CMD, 0x08, 0x00])
|
|||
|
time.sleep_ms(300) # at last 300ms
|
|||
|
|
|||
|
def reset(self):
|
|||
|
self.__write_data([self.__RESET_CMD])
|
|||
|
time.sleep_ms(20) # at last 20ms
|
|||
|
|
|||
|
def read_temperature(self):
|
|||
|
self.__get_datas(6)
|
|||
|
# check bit7
|
|||
|
if (self.__data_cache[0] >> 7) != 0x0:
|
|||
|
pass
|
|||
|
return False
|
|||
|
temperature = self.__temperature_transformat()
|
|||
|
return temperature
|
|||
|
|
|||
|
def read_humidity(self):
|
|||
|
self.__get_datas(6)
|
|||
|
if (self.__data_cache[0] >> 7) != 0x0:
|
|||
|
pass
|
|||
|
return False
|
|||
|
humidity = self.__humidity_transformat()
|
|||
|
return humidity
|
|||
|
|
|||
|
def read(self):
|
|||
|
self.__get_datas(6)
|
|||
|
if (self.__data_cache[0] >> 7) != 0x0:
|
|||
|
pass
|
|||
|
return False
|
|||
|
return self.__temperature_transformat(), self.__humidity_transformat()
|
|||
|
|