简介
本模块采用SHT31-DIS-F芯片,这个芯片是SHT2x系列温湿度传感器的新一代继承者,相比上一代芯片精度更高,在SHT3x系列中属于标准版,同时这款芯片上面还有一层保护膜。
芯片测量数据经过出厂校正、线性化和温度补偿,具有温湿度报警输出、软硬件复位功能。传感器的湿度测量范围是0-100%RH,温度测量范围是-40-125℃。I2C接口,可选I2C
地址,工作电压范围宽(2.15V至5.5 V)。
保护膜是IP67的PTFE膜,可防止传感器开孔接触灰尘,因此允许传感器在恶劣环境条件下使用,如密切接触灰尘可能对传感器的精准性具有影响的地方。由于最小封装和膜的高
水气渗透性,相对湿度和温度信号的响应时间与没加膜的传感器所实现的相同。虽然,保护膜可完美防止灰尘的进入,但在一般情况下它不能防止挥发性化学物质的污染。
温湿度偏差参考:
技术规格
- 工作电压:3.3~5.5V
- 工作电流:<1.5mA
- 湿度测量精度:±2%RH
- 湿度测量范围:0-100%RH
- 温度测量精度:±0.2℃
- 温度测量范围:-40 to 125℃
- 通信接口:Gravity-I2C 4Pin
- 外形尺寸:32mmx22mm
- 安装孔尺寸:3mm
- 安装孔间距:15mm
- 工作温度:-40 to 125℃
引脚说明
标号 | 名称 | 功能描述 |
---|---|---|
1 | SDA | 数据线 |
2 | SCL | 时钟线 |
3 | GND | 电源负极 |
4 | VCC | 电源正极 |
3 | INT | 报警中断 |
4 | RST | 复位 |
使用教程
**注意:**使用前请注意I2C地址切换开关的位置,程序默认初始化地址为0x45,如果两者地址不同会造成芯片初始化失败。 |
准备
- 硬件
- 1 x Arduino UNO控制板
- 1 x Gravity:SHT31 数字温湿度传感器
- 若干 杜邦线
- 软件
- Arduino IDE, 点击下载Arduino IDE
- SHT3x库文件和示例程序。
关于如何安装库文件,点击链接
- 主要API接口函数列表
/**
* @brief 获取测量到的温度(单位:摄氏度)
* @return 返回float类型的温度数据
*/
float getTemperatureC();
/**
* @brief 获取测量到的温度(单位:华氏度)
* @return 返回float类型的温度数据
*/
float getTemperatureF();
/**
* @brief 获取测量到的湿度(单位:%RH)
* @return 返回float类型的湿度数据
*/
float getHumidityRH();
接线图
样例代码1 - 单次测量温湿度模式
单次测量模式:控制板发送一次采集命令,传感器就去采集一次数据。
此模式可以根据需要去读取数据,功耗较低。
/*!
* @brief Construct the function
* @param pWire I2C bus pointer object and construction device, can both pass or not pass parameters, Wire in default.
* @param address Chip I2C address, two optional addresse.
*/
/*!
* @file singleMeasurement.ino
* @brief Read ambient temperature (C/F) and relative humidity (%RH) in single-read mode.
* @n Experimental phenomenon: the chip defaults in this mode, we need to send instructions to enable the chip collect data,
* which means the repeatability of the read needs to be set (the difference between the data measured by the chip under the same measurement conditions)
* then read the temperature and humidity data and print the data in the serial port.
* @n Single measure mode: read data as needed, power consumption is relatively low, the chip idle state only costs 0.5mA.
* @copyright Copyright (c) 2010 DFRobot Co.Ltd (https://www.dfrobot.com)
* @licence The MIT License (MIT)
* @author [fengli](li.feng@dfrobot.com)
* @version V1.0
* @date 2019-08-21
* @get from https://www.dfrobot.com
* @url https://github.com/DFRobot/DFRobot_SHT3x
*/
#include <DFRobot_SHT3x.h>
/*!
* @brief Construct the function
* @param pWire I2C bus pointer object and construction device, both can pass or not pass parameters,
* Wire in default.
* @param address Chip I2C address, two optional addresses 0x44 and 0x45(0x45 in default).
* @param RST RST Chip reset pin, 4 in default.
* @n I2C address is determined by the pin addr on the chip.
* @n When the ADR is connected to VDD, the chip I2C address is 0x45.
* @n When the ADR is connected to GND, the chip I2C address is 0x44.
*/
//DFRobot_SHT3x sht3x(&Wire,/*address=*/0x45,/*RST=*/4);
DFRobot_SHT3x sht3x;
void setup() {
Serial.begin(9600);
//Initialize the chip
while (sht3x.begin() != 0) {
Serial.println("Failed to Initialize the chip, please confirm the wire connection");
delay(1000);
}
/**
* readSerialNumber Read the serial number of the chip.
* @return Return 32-digit serial number.
*/
Serial.print("Chip serial number");
Serial.println(sht3x.readSerialNumber());
/**
* softReset Send command resets via I2C, enter the chip's default mode single-measure mode,
* turn off the heater, and clear the alert of the ALERT pin.
* @return Read the register status to determine whether the command was executed successfully,
* and return true indicates success.
*/
if(!sht3x.softReset()){
Serial.println("Failed to Initialize the chip....");
}
/**
* heaterEnable(): Turn on the heater inside the chip to enable the sensor get correct humidity value in wet environments.
* @return Read the status of the register to determine whether the command was executed successfully,
* and return true indicates success.
* @note Heaters should be used in wet environments, and other cases of use will result in incorrect readings
*/
//if(!sht3x.heaterEnable()){
// Serial.println("Failed to turn on the heater....");
//}
Serial.println("------------------Read adta in single measurement mode-----------------------");
}
void loop() {
Serial.print("Ambient Temperature(°C/F):");
/**
* getTemperatureC Get the meansured temperature(℃).
* @return Return float temperature data.
*/
Serial.print(sht3x.getTemperatureC());
Serial.print(" C/");
/**
* getTemperatureF:Get the meansured temperature(℉).
* @return Return float temperature data.
*/
Serial.print(sht3x.getTemperatureF());
Serial.print(" F ");
Serial.print("Relative Humidity(%RH):");
/**
* getHumidityRH: Get the meansured humidity (%RH)
* @return Return float humidity data
*/
Serial.print(sht3x.getHumidityRH());
Serial.println(" %RH");
/**
* @brief Get temperature and humidity data in single measurement mode.
* @param repeatability Set repeatability to read temperature and humidity data with the type eRepeatability_t.
* @note Optional parameters:
eRepeatability_High /**In high repeatability mode, the humidity repeatability is 0.10%RH, the temperature repeatability is 0.06°C
eRepeatability_Medium,/**In medium repeatability mode, the humidity repeatability is 0.15%RH, the temperature repeatability is 0.12°C.
eRepeatability_Low, /**In low repeatability mode, the humidity repeatability is0.25%RH, the temperature repeatability is 0.24°C
* @return Return a structure containing celsius temperature (°C), Fahrenheit temperature (°F), relative humidity(%RH), status code.
* @n Return O indicates right data return.
DFRobot_SHT3x::sRHAndTemp_t data = sht3x.readTemperatureAndHumidity(sht3x.eRepeatability_High);
if(data.ERR == 0){
Serial.print("Ambient Temperature(°C/F):");
Serial.print(data.TemperatureC);
Serial.print(" C/");
Serial.print(data.TemperatureF);
Serial.print(" F ");
Serial.print("Relative Humidity(%RH):");
Serial.print(data.Humidity);
Serial.println(" %RH");
}
*/
delay(1000);
}
结果
串口打印出获取到的温湿度数据
样例代码2 - 周期测量温湿度模式
周期测量模式:传感器按照设定采集频率自动去采集数据。
/*!
* @file periodicDataReading.ino
* @brief Read ambient temperature (C/F) and relative humidity (%RH) in cycle read mode.
* @n Experimental phenomenon: Before we start, please set the read frequency and repeatability of the read
* (the difference between the data measured by the chip under the same measurement conditions),
* and enter the periodic read mode, and then read the temperature and humidity data.
* @n The temperature and humidity data will be printed at the serial port, after 10 seconds of operation.
* @n It will exit the cycle mode and enter 2 measurement mode: Single measurement mode and Cycle measurement mode.
* @n Single measurement mode: reflect the difference between the two modes of reading data.
* @n Cycle measurement mode: the chip periodically monitors temperature and humidity, only in this mode the ALERT pin will work.
* @copyright Copyright (c) 2010 DFRobot Co.Ltd (https://www.dfrobot.com)
* @licence The MIT License (MIT)
* @author [fengli](li.feng@dfrobot.com)
* @version V1.0
* @date 2019-08-20
* @get from https://www.dfrobot.com
* @url https://github.com/DFRobot/DFRobot_SHT3x
*/
#include <DFRobot_SHT3x.h>
/*!
* @brief Construct the function
* @param pWire I2C bus pointer object and construction device, can both pass or not pass parameters, Wire in default.
* @param address Chip I2C address, two optional addresses 0x44 and 0x45(0x45 in default).
* @param RST Chip reset pin, 4 in default.
* @n The I2C address is determined by the pin addr on the chip.
* @n When the ADR is connected to VDD, the chip I2C address is 0x45.
* @n When the ADR is connected to GND, the chip I2C address is 0x44.
*/
//DFRobot_SHT3x sht3x(&Wire,/*address=*/0x45,/*RST=*/4);
DFRobot_SHT3x sht3x;
void setup() {
Serial.begin(9600);
//Initialize the chip to detect if it can communicate properly.
while (sht3x.begin() != 0) {
Serial.println("Failed to initialize the chip, please confirm the chip connection");
delay(1000);
}
/**
* readSerialNumber Read the serial number of the chip
* @return Return 32-digit serial number
*/
Serial.print("chip serial number: ");
Serial.println(sht3x.readSerialNumber());
/**
* softReset Send command resets via I2C, enter the chip's default mode single-measure mode,
* turn off the heater, and clear the alert of the ALERT pin.
* @return Read the status register to determine whether the command was executed successfully,
* and return true indicates success.
*/
if(!sht3x.softReset()){
Serial.println("Failed to reset the chip");
}
/**
* pinReset Reset through the chip's reset pin, enter the chip's default mode single-measure mode,
* turn off the heater, and clear the alert of the ALERT pin.
* @return The status register has a data bit that detects whether the chip has been reset,
* and return true indicates success.
* @note When using this API, the reset pin of the chip nRESET should be connected to RST (default to pin4) of arduino.
*/
//if(!sht3x.pinReset()){
//Serial.println("Failed to reset the chip");
//}
/**
* heaterEnable() Turn on the heater inside the chip so that the sensor can have accurate humidity data even in humid environment.
* @return Read the status register to determine whether the command was executed successfully, and return true indicates success.
* @NOTE Heaters should be used in wet environment, and other cases of use will result in incorrect readings.
*/
//if(!sht3x.heaterEnable()){
// Serial.println("Failed to turn on the heater");
//}
/**
* startPeriodicMode Enter cycle measurement mode and set repeatability and read frequency.
* @param measureFreq Read the eMeasureFrequency_t data frequency.
* @note Selectable parameters:
eMeasureFreq_Hz5, /**the chip collects data in every 2s
eMeasureFreq_1Hz, /**the chip collects data in every 1s
eMeasureFreq_2Hz, /**the chip collects data in every 0.5s
eMeasureFreq_4Hz, /**the chip collects data in every 0.25s
eMeasureFreq_10Hz /**the chip collects data in every 0.1s
* @param repeatability Read the repeatability of temperature and humidity data, the default parameter is eRepeatability_High.
* @note Optional parameters:
eRepeatability_High /**In high repeatability mode, the humidity repeatability is 0.10%RH, the temperature repeatability is 0.06°C
eRepeatability_Medium,/**In medium repeatability mode, the humidity repeatability is 0.15%RH, the temperature repeatability is 0.12°C.
eRepeatability_Low, /**In low repeatability mode, the humidity repeatability is0.25%RH, the temperature repeatability is 0.24°C
* @return Read the status of the register to determine whether the command was executed successfully, and return true indicates success
*/
if(!sht3x.startPeriodicMode(sht3x.eMeasureFreq_1Hz)){
Serial.println("Failed to enter the periodic mode");
}
Serial.println("------------------Read data in cycle measurement mode-----------------------");
}
void loop() {
Serial.print("Ambient temperature(°C/F):");
/**
* getTemperatureC Get the measured temperature (in degrees Celsius).
* @return Return the float temperature data.
*/
Serial.print(sht3x.getTemperatureC());
Serial.print(" C/");
/**
* getTemperatureF Get the measured temperature (in degrees Fahrenheit).
* @return Return the float temperature data.
*/
Serial.print(sht3x.getTemperatureF());
Serial.print(" F ");
Serial.print("Relative humidity(%RH):");
/**
* getHumidityRH Get measured humidity(%RH)
* @return Return the float humidity data
*/
Serial.print(sht3x.getHumidityRH());
Serial.println(" %RH");
//Please adjust the frequency of reading according to the frequency of the chip collection data.
//The frequency to read data must be greater than the frequency to collect the data, otherwise the returned data will go wrong.
delay(100);
if(millis() > 10000 && millis() < 10200){
/**
* stopPeriodicMode() Exit from the cycle read data
* @return Read the status of the register to determine whether the command was executed successfully,
* and return true indicates success.
*/
sht3x.stopPeriodicMode();
Serial.println("Exited from the cycle measurement mode, enter the single measurement mode");
}
/**
* readTemperatureAndHumidity Get temperature and humidity data in cycle measurement mode and use structures to receive data
* @return Return a structure containing celsius temperature (°C), Fahrenheit temperature (°F), relative humidity (%RH), status code.
* @n A status of 0 indicates that the right return data.
DFRobot_SHT3x::sRHAndTemp_t data = sht3x.readTemperatureAndHumidity();
if(data.ERR == 0){
Serial.print("ambient temperature(°C/F):");
Serial.print(data.TemperatureC);
Serial.print("C/");
Serial.print(data.TemperatureF);
Serial.print("F");
Serial.print("relative humidity(%RH):");
Serial.print(data.Humidity);
Serial.println("%RH");
}
*/
}
结果
串口前10S打印周期测量模式下获取的温湿度数据,10S后退出周期测量模式,进入单次测量模式,打印单次测量模式下获取的温湿度数据。
样例代码3 - 温湿度报警
设定温湿度阈值,超出了自定义的阈值时,INT引脚就会产生报警信号。
本样例需要将传感器的INT引脚连接到主控板相应的中断引脚。请参照样例中的中断关系表连接引脚。
**注意:**只能在周期测量模式下报警引脚才能正常工作
/*!
* @file alert.ino
* @brief Temperature and humidity over-threshold alarm.
* @n Experimental phenomenon: The user can customize the temperature and humidity thresholds,
* and the ALERT pin generates an alarm signal once the values exceed the user-defined threshold.
* @n NOTE: The ALERT pin on the sensor should be connected to the interrupt pin on the main panel when using this function.
* @copyright Copyright (c) 2010 DFRobot Co.Ltd (https://www.dfrobot.com)
* @licence The MIT License (MIT)
* @author [fengli](li.feng@dfrobot.com)
* @version V1.0
* @date 2019-08-26
* @get from https://www.dfrobot.com
* @url https://github.com/DFRobot/DFRobot_SHT3x
*/
#include <DFRobot_SHT3x.h>
/*!
* @brief Construct the function
* @param pWire I2C bus pointer object and construction device, can both pass or not pass parameters, Wire in default.
* @param address Chip I2C address, two optional addresses 0x44 and 0x45(0x45 in default).
* @param RST Chip reset pin, 4 in default.
* @n I2C address is determined by the pin addr on the chip.
* @n When the ADR is connected to VDD, the chip I2C address is 0x45.
* @n When the ADR is connected to GND, the chip I2C address is 0x44.
*/
//DFRobot_SHT3x sht3x(&Wire,/*address=*/0x45,/*RST=*/4);
DFRobot_SHT3x sht3x;
//The non-alarm status of the alert pin is low;
volatile int alertState = 0;
void alert(){
alertState = 1 - alertState;
}
void setup() {
Serial.begin(9600);
#ifdef ARDUINO_ARCH_MPYTHON
/* The Correspondence Table of ESP32 Interrupt Pins And Terminal Numbers
* -----------------------------------------------------------------------------------------------------
* | | DigitalPin | P0-P20 can be used as an external interrupt |
* | esp32 |--------------------------------------------------------------------------------------|
* | | Interrupt No | DigitalPinToInterrupt (Pn) can be used to query the interrupt number |
* |---------------------------------------------------------------------------------------------------|
*/
attachInterrupt(digitalPinToInterrupt(P16)/*Query the interrupt number of the P16 pin*/,alert,CHANGE);
//Open esp32's P16 pin for external interrupt, bilateral edge trigger, ALERT connected to P16
#else
/* The Correspondence Table of AVR Series Arduino Interrupt Pins And Terminal Numbers
* ---------------------------------------------------------------------------------------
* | | DigitalPin | 2 | 3 | |
* | Uno, Nano, Mini, other 328-based |--------------------------------------------|
* | | Interrupt No | 0 | 1 | |
* |-------------------------------------------------------------------------------------|
* | | Pin | 2 | 3 | 21 | 20 | 19 | 18 |
* | Mega2560 |--------------------------------------------|
* | | Interrupt No | 0 | 1 | 2 | 3 | 4 | 5 |
* |-------------------------------------------------------------------------------------|
* | | Pin | 3 | 2 | 0 | 1 | 7 | |
* | Leonardo, other 32u4-based |--------------------------------------------|
* | | Interrupt No | 0 | 1 | 2 | 3 | 4 | |
* |--------------------------------------------------------------------------------------
*/
/* The Correspondence Table of micro:bit Interrupt Pins And Terminal Numbers
* ---------------------------------------------------------------------------------------------------------------------------------------------
* | micro:bit | DigitalPin |P0-P20 can be used as an external interrupt |
* | (When using as an external interrupt, |---------------------------------------------------------------------------------------------|
* |no need to set it to input mode with pinMode)|Interrupt No|Interrupt number is a pin digital value, such as P0 interrupt number 0, P1 is 1 |
* |-------------------------------------------------------------------------------------------------------------------------------------------|
*/
attachInterrupt(/*Interrupt No*/0,alert,CHANGE);//Open the external interrupt 0, connect ALERT to the digital pin of the main control:
//UNO(2), Mega2560(2), Leonardo(3), microbit(P0).
#endif
//Initialize the chip to detect if it can communicate properly
while (sht3x.begin() != 0) {
Serial.println("The initialization of the chip is failed, please confirm whether the chip connection is correct");
delay(1000);
}
/**
* readSerialNumber Read the serial number of the chip
* @return Return 32-digit serial number
*/
Serial.print("The chip serial number");
Serial.println(sht3x.readSerialNumber());
/**
* softReset Send command resets via iiC, enter the chip's default mode single-measure mode, turn off the heater,
* and clear the alert of the ALERT pin.
* @return Read the status register to determine whether the command was executed successfully, and returning true indicates success.
*/
if(!sht3x.softReset()){
Serial.println("Failed to reset the chip");
}
/**
* @brief All flags (Bit 15, 11, 10, 4) in the status register can be cleared (set to zero).
* @n ALERT can work properly only when the bit:15 is set to 0, otherwise it will remain high.
*/
sht3x.clearStatusRegister();
/**
* startPeriodicMode Enter cycle measurement mode and set repeatability, read frequency, and only in this mode ALERT can work.
* @param measureFreq Read the data frequency, data type eMeasureFrequency_t
* @note Selectable parameters:
eMeasureFreq_Hz5, /**the chip collects data in every 2s
eMeasureFreq_1Hz, /**the chip collects data in every 1s
eMeasureFreq_2Hz, /**the chip collects data in every 0.5s
eMeasureFreq_4Hz, /**the chip collects data in every 0.25s
eMeasureFreq_10Hz /**the chip collects data in every 0.1s
* @param repeatability Read the repeatability of temperature and humidity data, the default parameter is eRepeatability_High.
* @note Optional parameters:
eRepeatability_High /**In high repeatability mode, the humidity repeatability is 0.10%RH, the temperature repeatability is 0.06°C
eRepeatability_Medium,/**In medium repeatability mode, the humidity repeatability is 0.15%RH, the temperature repeatability is 0.12°C.
eRepeatability_Low, /**In low repeatability mode, the humidity repeatability is0.25%RH, the temperature repeatability is 0.24°C
* @return Read the status of the register to determine whether the command was executed successfully, and return true indicates success.
*/
if(!sht3x.startPeriodicMode(sht3x.eMeasureFreq_10Hz)){
Serial.println("Failed to enter the periodic mode");
}
/**
* setTemperatureLimitC Set the threshold temperature and alarm clear temperature(°C)
* setTemperatureLimitF Set the threshold temperature and alarm clear temperature(°F)
* @param highset High temperature alarm point, when the temperature is greater than this value, the ALERT pin generates an alarm signal.
* @param highClear High temperature alarm clear point, alarming when the temp higher than the highset, otherwise the alarm signal will be cleared.
* @param lowset Low temperature alarm point, when the temperature is lower than this value, the ALERT pin generates an alarm signal.
* @param lowclear Low temperature alarm clear point, alarming when the temp lower than the highset, otherwise the alarm signal will be cleared.
* @note The filled value should be an integer (range: -40 to 125 degrees Celsius), -40 to 257 (Fahrenheit)highset>highClear>lowclear>lowset)
*/
//sht3x.setTemperatureLimitF(/*highset=*/35,/*highClear=*/34,/*lowSet=*/18,/*lowClear=*/20)
if(sht3x.setTemperatureLimitC(/*highset=*/35,/*highClear=*/34,/*lowSet=*/18,/*lowClear=*/20) != 0){
Serial.println("Failed to set the temperature limit");
}
/**
* setHumidityLimitRH Set the relative humidity threshold temperature and the alarm clear humidity(%RH)
* @param highset High humidity alarm point, when the humidity is greater than this value, the ALERT pin generates an alarm signal.
* @param highClear High humidity alarm clear point, alarming when the humidity higher than the highset, otherwise the alarm signal will be cleared.
* @param lowset Low humidity alarm point, when the humidity is lower than this value, the ALERT pin generates an alarm signal.
* @param lowclear Low humidity alarm clear point, alarming when the humidity lower than the highset, otherwise the alarm signal will be cleared.
* @note The filled value should be an integer (range: 0 - 100 %RH,highset>highClear>lowclear>lowset)
*/
if(sht3x.setHumidityLimitRH(/*highset=*/70,/*highClear=*/68,/*lowSet=*/19,/*lowClear=*/20) != 0){
Serial.println("Failed to set the humidity limit");
}
//Serial.println(F("string") Save stings to flash to save the dynamic ram when compiling.
Serial.println(F("----------------------Alarm Detection-------------------------------"));
Serial.println(F("Alarms raised when temp and humidity are out of the threshold range. Please connect ALERT to the main control board interrupt pin"));
Serial.println(F("-Different main contorl UNO(2), Mega2560(2), Leonardo(3), microbit(P0), mPython(P16)----"));
Serial.println(F("----------------------the humidity limit(%RH)-----------------------------------"));
/**
* @brief Measure relative humidity threshold temperature and alarm clear humidity
* @return Return true indicates successful data acquisition
*/
if(sht3x.measureHumidityLimitRH()){
Serial.print("high set:");
//getHumidityHighSetRH() Get the high humidity alarm point
Serial.print(sht3x.getHumidityHighSetRH());
Serial.print(" low clear:");
//getHumidityHighClearRH() Get the high humidity alarm clear point
Serial.println(sht3x.getHumidityLowClearRH());
Serial.print("high clear:");
//getHumidityLowClearRH() Get the low humidity alarm clear point
Serial.print(sht3x.getHumidityHighClearRH());
Serial.print(" low set:");
//getHumidityLowSetRH() Get the low humidity alarm point
Serial.println(sht3x.getHumidityLowSetRH());
} else {
Serial.println("Failed to get the humidity limit");
}
/**
* measureTemperatureLimitC Measure the threshold temperature and alarm clear temperature(°C)
* measureTemperatureLimitF Measure the threshold temperature and alarm clear temperature(°F)
* @return Return true indicates successful data acquisition
*/
Serial.println("----------------------temperature limit(°C)---------------------------------");
//Serial.println(F("----------------------temperature limit(°F)---------------------------------"));
if(sht3x.measureTemperatureLimitC()){
Serial.print("high set:");
//getTemperatureHighSetC() Get high temperature alarm points(°C)
//getTemperatureHighSetF() Get high temperature alarm points(°F)
Serial.print(sht3x.getTemperatureHighSetC());
Serial.print(" low clear:");
//getTemperatureHighClearC() Get high temperature alarm clear points(°C)
//getTemperatureHighClearF() Get high temperature alarm clear points(°F))
Serial.println(sht3x.getTemperatureLowClearC());
Serial.print("high clear:");
//getTemperatureLowClearC() Get low temperature alarm clear points(°C)
//getTemperatureLowClearF() Get low temperature alarm clear points(°F)
Serial.print(sht3x.getTemperatureHighClearC());
Serial.print(" low set:");
//getTemperatureLowSetC() Get low temperature alarm points(°C)
//getTemperatureLowSetF() Get low temperature alarm points(°F)
Serial.println(sht3x.getTemperatureLowSetC());
Serial.println("------------------------------------------------------------------");
} else {
Serial.println("Failed to get temperature limit");
}
/**
* readAlertState Read the status of the ALERT pin.
* @return High returns 1, low returns 0.
*/
//To initialize the state of ALERT
if(sht3x.readAlertState() == 1){
alertState = 1;
} else {
alertState = 0;
}
}
void loop() {
Serial.print("environment temperature(°C/F):");
/**
* getTemperatureC Get the measured temperature (in degrees Celsius)
* @return Return temperature data of the type float
*/
Serial.print(sht3x.getTemperatureC());
Serial.print(" C/");
/**
* getTemperatureF Get the measured temperature (in degrees Celsius)
* @return Return temperature data of the type float
*/
Serial.print(sht3x.getTemperatureF());
Serial.print(" F ");
Serial.print("relative humidity(%RH):");
/**
* getHumidityRH Get measured humidity (in %RH)
* @return Return humidity data of the type float
*/
Serial.print(sht3x.getHumidityRH());
Serial.println(" %RH");
//The read data frequency should greater than the frequency to collect data, otherwise the return data will make errors.
if(alertState == 1){
/**
* @brief Determine if the temperature and humidity are out of the threshold range
* @return Return the status code, representing as follows
* @n 01 Indicates that the humidity exceeds the lower threshold range
* @n 10 Indicates that the temperature exceeds the lower threshold range
* @n 11 Indicates that both the humidity and the temperature exceed the lower threshold range
* @n 02 Indicates that the humidity exceeds the upper threshold range
* @n 20 Indicates that the temperature exceeds the upper threshold range
* @n 22 Indicates that both the humidity and the temperature exceed the upper threshold range
* @n 12 Indicates that the temperature exceeds the lower threshold range,
//and the humidity exceeds the upper threshold range
* @n 21 Indicates that the temperature exceeds the upper threshold range,
//and the humidity exceeds the lower threshold range
* @n 0 Back to normal, but the alarm is not cleared.
*/
uint8_t state = sht3x.environmentState();
//Serial.println(F("string") Save stings to flash to save the dynamic ram when compiling.
if(state == 1) Serial.println(F("The humidity exceeds the lower threshold range!"));
else if(state == 10) Serial.println(F("The temperature exceeds the lower threshold range!"));
else if(state == 11) Serial.println(F("The humidity and the temperature exceed the lower threshold range!"));
else if(state == 2) Serial.println(F("The humidity exceeds the upper threshold range!"));
else if(state == 20) Serial.println(F("The temperature exceeds the upper threshold range!"));
else if(state == 22) Serial.println(F("The humidity and the temperature exceed the upper threshold range!"));
else if(state == 12) Serial.println(F("The temperature exceeds the lower threshold range,the humidity exceeds the upper threshold range!"));
else if(state == 21) Serial.println(F("The temperature exceeds the upper threshold range, and the humidity exceeds the lower threshold range!"));
else Serial.println(F("T&H back to normal, but the alarm is not cleared!"));
} else {
Serial.println(F("T&H in normal range, alarm cleared"));
}
delay(1000);
}
结果
Mind+ 上传模式编程(图形化)
1、下载及安装软件。下载地址:https://mindplus.cc 详细教程:安装教程
2、切换到“上传模式”。 详细教程:Mind+基础wiki教程-上传模式编程流程
3、“扩展”中选择“主控板”中的“Arduino Uno”。用户库中搜索SHT31-F加载扩展库。 详细教程:Mind+基础wiki教程-加载扩展库流程
4、进行编程,程序如下图:
5、菜单“连接设备”,“上传到设备”
6、程序上传完毕后,打开串口即可看到数据输出。详细教程:Mind+基础wiki教程-串口打印
Mind+ Python模式编程(行空板)
Mind+Python模式为完整Python编程,因此需要能运行完整Python的主控板,此处以行空板为例说明
连接图
操作步骤
1、下载及安装官网最新软件。下载地址:https://www.mindplus.cc 详细教程:Mind+基础wiki教程-软件下载安装
2、切换到“Python模式”。“扩展”中选择“pinpong库”中的“pinpong初始化”和“SHT31-F数字温湿度传感器”。切换模式和加载库的详细操作链接
3、进行编程
4、连接行空板,程序点击运行后,可在终端查看数据。行空板官方文档-行空板快速上手教程 (unihiker.com)
代码编程
以pinpong库为例,行空板官方文档-行空板快速上手教程 (unihiker.com)
# -*- coding: utf-8 -*-
import time
from pinpong.board import Board
from pinpong.libs.dfrobot_sht31 import SHT31
Board("").begin()#初始化,选择板型和端口号,不输入端口号则进行自动识别
sht31 = SHT31(0x45)
while True:
print("-------------------")
print("Temperature: {} C".format(sht31.temp_c()))
print("Temperature: {} F".format(sht31.temp_f()))
print("humidity: {} %RH".format(sht31.humidity()))
time.sleep(1)
常见问题
还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。