使用 ESP32 内置温度传感器读取温度值
引言
在物联网(IoT)设备中,环境温度监测是一个常见的需求。ESP32 开发板集成了一个内部温度传感器,可以方便地用于温度监测应用。了解如何使用 ESP-IDF 框架中的temperature_sensor
驱动程序来读取 ESP32 的内部温度传感器数据。
示例代码
我们将使用 ESP-IDF 提供的示例代码来演示如何读取 ESP32 的内部温度传感器数据。以下是完整的示例代码:
1 |
|
代码解析
1. 包含头文件
1 |
|
driver/temperature_sensor.h
:包含温度传感器驱动程序的 API 声明。
esp_log.h
:包含日志记录功能。
freertos/FreeRTOS.h
和 freertos/task.h
:包含 FreeRTOS 任务管理功能。
2. 定义日志标签
1 |
|
定义了一个日志标签,用于标识日志信息的来源。
3. 初始化温度传感器
1 |
|
temperature_sensor_config_t temp_sensor_config = TEMPERATURE_SENSOR_CONFIG_DEFAULT(10, 50);
:创建一个默认的温度传感器配置结构体,并设置预期的温度范围为 10 到 50 摄氏度。
temperature_sensor_install(&temp_sensor_config, &temp_sensor);
:根据配置初始化温度传感器,并获取传感器句柄。
4. 启用温度传感器
1 |
|
temperature_sensor_enable(temp_sensor);
:启用已初始化的温度传感器。
5. 读取温度值
1 |
|
在一个无限循环中,使用temperature_sensor_get_celsius
函数读取当前温度值,并通过ESP_LOGI
打印出来。
vTaskDelay(pdMS_TO_TICKS(1000));
:设置任务延迟 1 秒,以便每秒读取一次温度。
温度传感器概述
简介
ESP32 内置传感器,用于测量芯片内部的温度。该温度传感器模组包含一个 8 位 Sigma-Delta 模拟-数字转换器(ADC)和一个数字-模拟转换器(DAC),可以补偿测量结果,减少温度测量的误差。
预定义测量范围及误差
预定义测量范围 (°C) | 测量误差 (°C) |
---|---|
50 ~ 125 | < 3 |
20 ~ 100 | < 2 |
-10 ~ 80 | < 1 |
-30 ~ 50 | < 2 |
-40 ~ 20 | < 3 |
功能概述
- 资源分配:
通过temperature_sensor_config_t
结构体设置温度范围。
使用temperature_sensor_install
函数安装温度传感器,并获取传感器句柄。
- 启用及禁用温度传感器:
使用temperature_sensor_enable
启用温度传感器。
使用temperature_sensor_disable
禁用温度传感器。
- 获取测量的温度值:
使用temperature_sensor_get_celsius
获取实时温度值。
- 电源管理:
温度传感器不使用 APB 时钟,无论是否激活电源管理,温度传感器仍可以继续工作。
- 线程安全:
温度传感器驱动程序通常只在一个任务中调用,如果要在不同任务中使用,需要设置额外的锁进行保护。
注意事项
温度传感器测量的是芯片内部的温度,而不是环境温度。
安装温度传感器失败时,可能会出现错误信息the boundary you gave cannot meet the range of internal temperature sensor
,这通常是由于配置的温度范围超出了预定义的测量范围。
总结
通过上述代码,我们可以轻松地在 ESP32 上实现对内部温度传感器的读取。这个示例展示了如何使用 ESP-IDF 提供的温度传感器驱动程序进行基本的操作,包括初始化、启用和读取温度值。你可以根据实际需求,进一步扩展这个示例,比如将温度数据发送到云端或触发特定的动作。
希望这篇博客笔记对你有所帮助!如果你有任何问题或建议,欢迎在评论区留言。