跳至主要內容

温湿度计 SHT30

大约 2 分钟

简介

本章介绍使用Air001开发板驱动SHT30。

提示

SHT30是一款使用I²C通信接口的温湿度传感器。

硬件准备

  • ☁️ Air001开发板入门,将Air001DAPLink调试器使用排针排母连接。

  • SHT30模块与Air001开发板,按如下表格进行相连:

SHT30Air001
GNDGND
VCC3.3V
SCLPF_1
SDAPF_0

提示

I²C的SCLSDA需要有上拉电阻,请确认外接的SHT30模块上有相应处理。

软件部分

代码如下:

#include <Wire.h>
//SHT30 I²C通信从机地址为0x44
#define Addr_SHT30 0x44
void setup() {
  //设定SCL和SDA引脚
  Wire.setSDA(PF_0);
  Wire.setSCL(PF_1);
  //初始化I²C
  Wire.begin();
  //设定波特率为9600
  Serial.begin(9600);
  //延时
  delay(300);
}

void loop() {
  //定义数组以存储获取的6个数据
  unsigned char data[6];
  //开始传输,设置I²C从机地址
  Wire.beginTransmission(Addr_SHT30);
  //发送测量命令0x2C06,由于一次只能发一个8位数据,因此分开发两次
  Wire.write(0x2C);
  Wire.write(0x06);
  //I²C停止
  Wire.endTransmission();
  //延时(等待测量数据)
  delay(500);
  //请求获取6字节的数据,传入对应的从机地址
  Wire.requestFrom(Addr_SHT30, 6);
  //判断是否成功读取到6个字节
  if (Wire.available() == 6) {
    //成功读取,则将数据存入data数组
    for (int i = 0; i <= 5; i++) {
      data[i] = Wire.read();
    }
  } else {
    //读取失败则打印"error!"
    Serial.println("error!");
    return;
  }
  //计算得到的数据将其转化为直观的温度和湿度,公式参考下方说明
  int cTemp = ((((data[0] * 256) + data[1]) * 175) / 65535) - 45;
  int humidity = ((((data[3] * 256) + data[4]) * 100) / 65535);
  //在串口里输出得到的数据
  Serial.printf("湿度:%d%%RH\n",humidity);
  Serial.printf("温度:%d℃",cTemp);
  //延时
  delay(500);
}

温湿度计算公式可以参考官方文档open in new window

计算公式
计算公式

输出结果

在串口监视器中将波特率调至9600,可观察到当前温湿度,如下图:

串口打印
串口打印