24- ESP32S3 内部温度传感器
ESP32S3 的内部温度传感器是一个模拟电路,它可以测量芯片的内部温度。这个传感器的输出是一个模拟电压,这个电压与芯片的温度成正比。我们可以通过读取这个模拟电压来获取芯片的温度。温度传感器的输出值需要使用转换公式转换成实际的温度值 (°C)。
ESP32S3 内部温度传感器
ESP32S3 内置了一个温度传感器。这个传感器可以用来测量芯片的内部温度,对于一些需要监控系统温度的应用来说非常有用。
1. 温度传感器概述
ESP32S3 的内部温度传感器是一个模拟电路,它可以测量芯片的内部温度。这个传感器的输出是一个模拟电压,这个电压与芯片的温度成正比。我们可以通过读取这个模拟电压来获取芯片的温度。
温度传感器的输出值需要使用转换公式转换成实际的温度值 (°C)。转换公式如下:
T
(
°
C
)
=
0.4386
∗
V
A
L
U
E
–
27.88
∗
o
f
f
s
e
t
–
20.52
T(°C) = 0.4386 * VALUE –27.88 * offset –20.52
T(°C)=0.4386∗VALUE–27.88∗offset–20.52
其中 VALUE 即温度传感器的输出值,offset 由温度偏移决定。
由于硬件限制,温度传感器存在预定义的测量范围及其对应误差,详见下表:
预定义测量范围 (°C) | 测量误差 (°C) |
---|---|
-40 ~ 20 | < 3 |
-30 ~ 50 | < 2 |
-10 ~ 80 | < 1 |
20 ~ 100 | < 2 |
50 ~ 125 | < 3 |
2. 读取温度值
1️⃣评估测量范围(设置测试温度的最大与最小值)
esp_err_t temperature_sensor_install(const temperature_sensor_config_t *tsens_config, temperature_sensor_handle_t *ret_tsens);
功能: 配置测试温度的范围。
形参描述:
-
tsens_config
: 指向temperature_sensor_config_t
结构体的指针,用于设置温度范围。 -
ret_tsens
: 返回温度传感器句柄的指针。
使用示例
#include "driver/gpio.h"
void example_fun(void)
{
esp_err_t rev_flag;
temperature_sensor_config_t temp_sensor;
// 设置测试温度范围
temp_sensor.range_min = SENSOR_RANGE_MIN; // 测试温度的最小值
temp_sensor.range_max = SENSOR_RANGE_MAX; // 测试温度的最大值
temperature_sensor_handle_t temp_handle = NULL; // 温度传感器句柄初始化
// 安装温度传感器配置并检查返回值
rev_flag = temperature_sensor_install(&temp_sensor, &temp_handle);
ESP_ERROR_CHECK(rev_flag);
}
以下是整理后的格式,包括修正了描述中的错误(将temperature_sensor_install
更正为temperature_sensor_enable
):
2️⃣使能温度传感器
esp_err_t temperature_sensor_enable(temperature_sensor_handle_t tsens);
功能: 使能温度传感器。
形参描述:
tsens
: 由temperature_sensor_install()
函数创建的温度传感器句柄。
返回值描述:
ESP_OK
: 返回0,表示使能成功。ESP_ERR_INVALID_STATE
: 如果温度传感器已经处于使能状态。
#include "driver/gpio.h"
void example_fun(void)
{
// 试图使能温度传感器
esp_err_t enable_status = temperature_sensor_enable(temp_handle);
if (enable_status != ESP_OK) {
// 处理错误情况
printf("Temperature sensor enable failed: %d\n", enable_status);
}
}
根据您提供的信息,我整理了关于temperature_sensor_get_celsius
函数的详细说明和使用示例,以更清晰的格式展示如下:
3️⃣获取传输的传感器数据
esp_err_t temperature_sensor_get_celsius(temperature_sensor_handle_t tsens, float *out_celsius);
功能: 获取传输的传感器数据。
形参描述
形参 | 描述 |
---|---|
tsens | 由 temperature_sensor_install() 创建的传感器句柄 |
out_celsius | 用于存储温度读数(摄氏度)的指针 |
使用示例
#include "driver/temperature_sensor.h" // 确保包含正确的头文件
void example_function(void)
{
float temperature; // 用于存储读取到的温度值
// 省略在此处之已调用temperature_sensor_install()并成功获取句柄
// 获取温度传感器的当前温度读数
esp_err_t result = temperature_sensor_get_celsius(temp_handle, &temperature);
if (result == ESP_OK) {
printf("Current temperature: %.2f Celsius\n", temperature);
} else {
printf("Failed to get temperature: %d\n", result);
}
}
看起来这里存在一些混淆,您提供的函数原型和描述实际上与“失能温度传感器”操作不符。根据您的意图,应该是描述如何禁用或失能温度传感器的功能。因此,我将基于您的需求重新整理这部分内容,假设存在一个用于失能温度传感器的函数,并按照正确的格式进行整理。
4️⃣失能温度传感器
esp_err_t temperature_sensor_disable(temperature_sensor_handle_t tsens);
功能: 失能温度传感器。
形参描述
形参 | 描述 |
---|---|
tsens | 由 temperature_sensor_install() 创建的温度传感器句柄 |
使用示例
#include "driver/temperature_sensor.h" // 确保包含正确的头文件
void example_function(void)
{
temperature_sensor_handle_t sensor_handle = NULL; // 温度传感器句柄
// 假设在此处之前已调用temperature_sensor_install()并成功获取句柄
// 失能温度传感器
esp_err_t result = temperature_sensor_disable(temp_handle);
if (result == ESP_OK) {
printf("Temperature sensor disabled successfully.\n");
} else {
printf("Failed to disable temperature sensor: %d\n", result);
}
}
3. 程序设计
获取芯片温度并打到串口上
#include <stdio.h>
#include "driver/gpio.h"
#include "driver/temperature_sensor.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#define SENSOR_RANGE_MIN 20 //要测试温度的最小值
#define SENSOR_RANGE_MAX 50 //要测试温度的最大值
void app_main(void){
float temperature; // 用于存储读取到的温度值
esp_err_t rev_flag;
temperature_sensor_config_t temp_sensor;
// 设置测试温度范围
temp_sensor.range_min = SENSOR_RANGE_MIN; // 测试温度的最小值
temp_sensor.range_max = SENSOR_RANGE_MAX; // 测试温度的最大值
temperature_sensor_handle_t temp_handle = NULL; // 温度传感器句柄初始化
// 安装温度传感器配置并检查返回值
rev_flag = temperature_sensor_install(&temp_sensor, &temp_handle);
ESP_ERROR_CHECK(rev_flag);
// 使能温度传感器
ESP_ERROR_CHECK(temperature_sensor_enable(temp_handle));
// 获取温度传感器的当前温度读数
ESP_ERROR_CHECK(temperature_sensor_get_celsius(temp_handle, &temperature));
while(1){
// 获取温度传感器的当前温度读数
ESP_ERROR_CHECK(temperature_sensor_get_celsius(temp_handle, &temperature));
printf("温度值: %f\n",temperature);
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
4. 结论
ESP32S3 的内部温度传感器是一个有用的功能,它可以帮助我们监控芯片的温度。虽然它不能替代外部的温度传感器,但是在许多应用中,它都可以提供足够的温度信息。
参考资料
ESP32-IDF编程指南
正点原子DNESP32S3 开发板教程-IDF 版
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)