807|0

39

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【Beetle ESP32 C6迷你开发板】+基于arduino读取温湿度传感器SHTC3数据 [复制链接]

 

SHTC3简单说明

        SHTC3是一个检测温度和湿度的传感器,可以检测-40℃~125℃的温度范围和0%~100%的湿度范围,典型精度为±2 %RH和±0.2°C。

        SHTC3的工作电压范围为:1.62V~3.6V。

        SHTC3使用的通讯方式是I2C,通讯速率可以达到400KHz。

        SHTC3只有4个引脚,电源和地、2个I2C通讯引脚。

        SHTC3的I2C设备地址为0x70。

 

 

下面就是SHTC3的驱动程序。要注意SHTC3的寄存器是16位的2个字节。


#ifndef __DRV_SHTC3_H
#define __DRV_SHTC3_H


/*=========================================================================
    I2C ADDRESS/BITS
    -----------------------------------------------------------------------*/
    #define SHTC3_ADDRESS               (0x70)    
    
    #define SHTC3_CRC_POLYNOMIAL        0x131 // P(x) = x^8 + x^5 + x^4 + 1 = 100110001
/*=========================================================================*/

/*=========================================================================
    REGISTERS
    -----------------------------------------------------------------------*/
    //ID16BIT:B15 to 12 & 10 to 6: unspecified info.bits 11 & 5 to 0: SHTC3 identifier
    #define SHTC3_REG_ID                    (0xEFC8)    //xxxx 1xxx xx00 0111
    #define SHTC3_REG_SLEEP                 (0xB098)    //
    #define SHTC3_REG_WAKEUP                (0x3517)    //
    #define SHTC3_REG_RESET                 (0x805D)    //

//Mode1
    #define SHTC3_REG_CENM_TEMP_RH          (0x7CA2)    //��ͨģʽ����ʱ�䳤��>10ms
    #define SHTC3_REG_CENM_RH_TEMP          (0x5C24)    //
    #define SHTC3_REG_CELPM_TEMP_RH         (0x6458)    //�͹���ģʽ����ʱ���: <1ms
    #define SHTC3_REG_CELPM_RH_TEMP         (0x44DE)    //

//Mode2
    #define SHTC3_REG_CDNM_TEMP_RH          (0x7866)    //
    #define SHTC3_REG_CDNM_RH_TEMP          (0x58E0)    //
    #define SHTC3_REG_CDLPM_TEMP_RH         (0x609C)    //
    #define SHTC3_REG_CDLPM_RH_TEMP         (0x401A)    //
    
//==============================================================================

class SHTC3
{
  public:
      SHTC3(void);
    int Init(void) ;
    byte GetMode1_TempRH(int *temp, int *humi);

    byte write(unsigned int memory_address, unsigned char *data, int size);
    byte read (unsigned int memory_address, unsigned char *data, int size); 

  private:
    uint16_t shtc3_id;
};

#endif


下面是操作SHTC3的寄存器接口。要注意SHTC3的寄存器是16位的2个字节。

#include <Arduino.h>
#include <Wire.h>
#include "shtc3.h"

byte SHTC3::write(unsigned int memory_address, unsigned char *data, int size)
{
    byte rc;

    Wire.beginTransmission(SHTC3_ADDRESS);
    Wire.write((memory_address>>8) & 0xFF);
    Wire.write(memory_address & 0xFF);

    if((data != NULL) && (size != 0))
        Wire.write(data, size);

    rc = Wire.endTransmission();
    return (rc);
}

byte SHTC3::read(unsigned int memory_address, unsigned char *data, int size)
{
    byte rc;
    unsigned int cnt;

    Wire.beginTransmission(SHTC3_ADDRESS);
    Wire.write((memory_address>>8) & 0xFF);
    Wire.write(memory_address & 0xFF);
    rc = Wire.endTransmission(false);
    if (rc != 0) {
        return (rc);
    }

    Wire.requestFrom(SHTC3_ADDRESS, size, true);

    if((data != NULL) && (size != 0))
    {
        cnt = 0;
        while(Wire.available()) {
            data[cnt] = Wire.read();
            cnt++;
        }
    }
    return (0);
}

将驱动程序添加到Arduino的库文件夹下。下面是测试读取代码。

#include <Wire.h>
#include <RPR-0521RS.h>
#include <shtc3.h>

RPR0521RS rpr0521rs;
SHTC3     d_shtc3;

#define myLED 15 //设置引脚15为LED引脚

void setup() {
  byte rc;
  pinMode(myLED, OUTPUT);
  digitalWrite(myLED, HIGH);
  Serial.begin(115200);
  Serial.println("******************************** senser test *******************************************");
  
  Wire.begin();
  rc = rpr0521rs.init();
  Serial.print(F("RPR-0521RS Init = "));
  Serial.println(rc);

  rc = d_shtc3.Init();
  Serial.print(F("SHTC3 Init = "));
  Serial.println(rc);
}
void loop() {
  byte rc;
  byte near_far;
  unsigned short ps_val;
  float als_val;
  int temp;
  int rh;

  digitalWrite(myLED, HIGH);
  delay(100);
  
  rc = rpr0521rs.get_psalsval(&ps_val, &als_val);
  if (rc == 0) {
    Serial.print(F("RPR-0521RS (Proximity)     = "));
    Serial.print(ps_val);
    near_far = rpr0521rs.check_near_far(ps_val);
    if (near_far == RPR0521RS_NEAR_VAL) {
      Serial.print(F(" Near,"));
    } else {
      Serial.print(F(" Far,"));
    }
    if (als_val != RPR0521RS_ERROR) {
      Serial.print(F("\t (Ambient Light) = "));
      Serial.print(als_val);
      Serial.println(F("[lx]."));
      
    }
  }
  delay(100);
  rc = d_shtc3.GetMode1_TempRH(&temp, &rh);
  if (rc == 0) {
    Serial.print(F("SHTC3 Temp = "));
    Serial.print(temp);
    Serial.print("^C,");
    Serial.print(F(" \t RH = "));
    Serial.print(rh);
    Serial.println("%");
    Serial.println();
  }
  
  digitalWrite(myLED, LOW);
  delay(800);

}

通过串口输出信息,可以看到温湿度读取成功。

 

 

 

资料:

SHTC3.PDF (741.85 KB, 下载次数: 0, 售价: 1 分芯积分)
20240513175232192.zip (2.09 KB, 下载次数: 1, 售价: 1 分芯积分)
点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
IPTV数字电视和网络电视的区别与联系

IPTV是以家用电视机为主要显示设备,集互联网、多媒体、通信等多种技术于一体,通过IP协议向家庭用户提供多种交互式媒体服务的业 ...

IC设计领域介绍及工程师未来出路规划

一、 IC 设计领域简介 (一)模拟与混号讯号电路设计 IC 电路可分为为模拟 IC 与数字 IC 两大类,以及两者兼具的混合讯号等三种 ...

当代最有竞争力的模拟技术和产品大看台

当代最有竞争力的模拟技术和产品大看台:前置放大器 前置放大器一般位于信号调理电路的最高端,它主要用于放大从传感器过来的 ...

ubuntu下修改内核发生“ncurses libraries“错误(解决方法)

BSEC@bsec-server:~/kernel/Kernel$ make menuconfig HOSTCC scripts/basic/fixdep HOSTCC scripts/basic/docproc HOSTCC script ...

学习笔记分享】【MSP430学习笔记】IAR开发环境中的数据、函数定位方法

IAR集成开发环境下,变量和函数的定位方法。 71081 qq:906411450 triton.zhang 本帖最后由 Triton.zhang 于 2011-9-2 ...

【MSP430F5529测评】2. UART串口通信

本帖最后由 wuguangtao 于 2020-10-27 22:17 编辑 # MSP430F5529LP UART 串口通信测试 由于energia很容易上手和测试, 这 ...

华为电磁兼容性结构设计规范 V2.0

本规范规定了电磁兼容性结构设计(屏蔽和搭接等)的主要原理 、设计原则和详细设计方法。 如果要深入理解电磁兼容的理论 ...

【安信可UWB室内定位模组NodeMCU-BU01】02.AT指令测距

1、NodeMCU-BU01开发板跳帽设置 NodeMCU-BU01开发板板载了一颗STM32 MCU作为主控制芯片,集成了AT调试指令功能,方便在线实时 ...

理论知识指导

各位朋友,前段时间用TAS5630B这颗集成内部MOS的D类运放芯片做了个D类功放,前前后后用了十几片,没有一块板子活过10分钟,既 ...

【得捷电子Follow me第1期】任务1 熟悉thonny软件与micropython的基本语法

本帖最后由 爱吃鱼的加菲猫 于 2023-5-29 22:00 编辑 第一步,开箱及排针焊接 先来两张焊接完成照片,我用了彩色排针区分 ...

关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表