ESP32 TMP75温度采集

一、简介

        TMP75芯片是一款数字温度传感器,由德州仪器生产,它具有高精度、低功耗和小尺寸等优点,广泛应用于电子设备、通信系统、汽车电子、医疗设备等领域的温度测量。

        .可选地址:8个(硬件配置)

        .接口:兼容I2C和SMBUS,

        .分辨率:9~12位,

        .精度:-40~125C°

        .工作电压:2.7~5.5V

 图1.0 芯片引脚框图

        TMP75温度寄存器为12位只读寄存器,所以一般要读取两个字节,低12位表示温度值,负数以补码的形式呈现。

 图1.1 12位温度值对照表

        TMP75芯片有8个地址可选,由硬件配置A1、A2、A3的引脚电平。

 图1.2 TMP75硬件可选地址对照表

二、代码

tmp75源文件

#include "tmp75.h"
#include "bsp_iic.h"
#include "esp_log.h"

static const char *TAG = "tmp75";

/**
* @brief  往TEM75写一个字节函数
* @param  
*	@arg   dev_addr:   器件地址
*	@arg   reg_addr:   寄存器地址
*	@arg   write_data: 写入的数据
* @retval 
*	@arg   ESP_OK:写入成功  ESP_FAIL:写入失败
**/
static esp_err_t TEM75_WriteByte(uint8_t dev_addr,uint8_t reg_addr,uint8_t write_data) 				 
{ 
#if I2C_HARDWARE
    return I2C_Master_WriteByte(dev_addr,reg_addr,write_data,200);
#else
	EspI2cWriteByte(dev_addr,reg_addr,write_data);
	return ESP_OK;
#endif
}

/**
* @brief  读取TEM75一个字节函数
* @param  
*	@arg   dev_addr:   器件地址
*	@arg   reg_addr:   寄存器地址
*	@arg   read_data:  读取的数据
* @retval 
*	@arg   ESP_OK:读取成功  ESP_FAIL:读取失败
**/
static esp_err_t TMP75_ReadByte(uint8_t dev_addr,uint8_t reg_addr,uint8_t *read_data)
{
#if I2C_HARDWARE
	return I2C_Master_ReadByte(dev_addr,reg_addr,read_data,1000);	
#else
	EspI2cReadByte(dev_addr,reg_addr,read_data);
	return ESP_OK;
#endif
}

/**
* @brief  读取TEM75两个字节函数
* @param  
*	@arg   dev_addr:   器件地址
*	@arg   reg_addr:   寄存器地址
*	@arg   *read_data: 读取的数据
*	@arg   read_len:   读取的长度
* @retval 
*	@arg   ESP_OK:读取成功  ESP_FAIL:读取失败
**/
static esp_err_t TMP75_ReadBytes(uint8_t dev_addr,uint8_t reg_addr,uint8_t *read_data)
{
#if I2C_HARDWARE
	return I2C_Master_ReadBytes(dev_addr,reg_addr,read_data,2,1000);
#else
	EspI2cReadBytes(dev_addr,reg_addr,read_data,2); 
	return ESP_OK;
#endif
} 

/**
* @brief  获取TEM75温度函数
* @param  
*	@arg   dev_addr:   器件地址
* @retval 
*	@arg   获取的温度值
**/
float TMP75_GetTemprature(uint8_t dev_addr)
{
	uint8_t  read_data[2] = {0};
	uint16_t reg_value = 0;
	float 	 temp_value = 0.0;

	if(TMP75_ReadBytes(dev_addr,TEMPERATURE_REGISTER,&read_data) == ESP_OK)
	{
		reg_value = (uint16_t)((read_data[0] << 8) | read_data[1]) >> 4 ;
	
		if(reg_value & 0x800)   						
		{
			reg_value = (~reg_value + 1) & 0xfff;    
			temp_value = reg_value * 0.0625 * -1;
		}
		else
		{
			temp_value = reg_value * 0.0625;
		}
	}
	else
	{
		ESP_LOGI(TAG,"read tmp75 data fail\n");
	}
	return temp_value;
}

tmp75头文件

#ifndef _TMP75_H_
#define _TMP75_H_	

#include "stdio.h"

#define  TMP75_SENSOR_ADDR			0X48  
#define  TEMPERATURE_REGISTER       0X00
#define  CONFIGURATION_REGISTER     0X01

float TMP75_GetTemprature(uint8_t dev_addr);

#endif /* TMP75_H_ */
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值