mirror of
https://github.com/espressif/esp-idf.git
synced 2025-12-07 17:08:49 +00:00
temperature_sensor: Add temperature monitor interrupt example
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
# The following lines of boilerplate have to be in your project's CMakeLists
|
||||
# in this exact order for cmake to work correctly
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
|
||||
project(temp_sensor)
|
||||
@@ -0,0 +1,56 @@
|
||||
| Supported Targets | ESP32-C2 | ESP32-C3 | ESP32-C6 | ESP32-H2 | ESP32-S2 | ESP32-S3 |
|
||||
| ----------------- | -------- | -------- | -------- | -------- | -------- | -------- |
|
||||
|
||||
# Temperature Sensor Example
|
||||
|
||||
The ESP32-S2/C3/S3/C2 has a built-in temperature sensor. The temperature sensor module contains an 8-bit Sigma-Delta ADC and a temperature offset DAC.
|
||||
|
||||
The conversion relationship is the first two columns of the table below. Among them, `offset = 0`(default) is the main measurement option, and other values are extended measurement options.
|
||||
|
||||
| DAC level | offset | measure range(℃) | measure error(℃) |
|
||||
| :-------: | :----: | :--------------: | :--------------: |
|
||||
| 0 | -2 | 50 ~ 125 | < 3 |
|
||||
| 1 | -1 | 20 ~ 100 | < 2 |
|
||||
| 2 | 0 | -10 ~ 80 | < 1 |
|
||||
| 3 | 1 | -30 ~ 50 | < 2 |
|
||||
| 4 | 2 | -40 ~ 20 | < 3 |
|
||||
|
||||
## How to use example
|
||||
|
||||
Before project configuration and build, be sure to set the correct chip target using `idf.py set-target <chip_name>`.
|
||||
|
||||
### Hardware Required
|
||||
|
||||
* A development board with ESP32-S2/C3/S3/C2 SoC (e.g., ESP32-S2-Saola-1, ESP32-S2-DevKitM-1, ESP32-C3-DevKitM-1, ESP32-S3-WROOM-1, etc.)
|
||||
* A USB cable for power supply and programming
|
||||
|
||||
### Build and Flash
|
||||
|
||||
Build the project and flash it to the board, then run monitor tool to view serial output:
|
||||
|
||||
Run `idf.py -p PORT flash monitor` to build, flash and monitor the project.
|
||||
|
||||
(To exit the serial monitor, type ``Ctrl-]``.)
|
||||
|
||||
See the [Getting Started Guide](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/index.html) for full steps to configure and use ESP-IDF to build projects.
|
||||
|
||||
## Example Output
|
||||
|
||||
```
|
||||
I (0) cpu_start: Starting scheduler on APP CPU.
|
||||
I (303) example: Install temperature sensor, expected temp ranger range: 10~50 ℃
|
||||
I (303) temperature_sensor: Range [-10°C ~ 80°C], error < 1°C
|
||||
I (313) example: Enable temperature sensor
|
||||
I (323) example: Read temperature
|
||||
I (323) example: Temperature value 26.06 ℃
|
||||
I (1323) example: Temperature value 26.06 ℃
|
||||
I (2323) example: Temperature value 26.06 ℃
|
||||
I (3323) example: Temperature value 26.06 ℃
|
||||
I (4323) example: Temperature value 26.06 ℃
|
||||
I (5323) example: Temperature value 26.49 ℃
|
||||
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
For any technical queries, please open an [issue](https://github.com/espressif/esp-idf/issues) on GitHub. We will get back to you soon.
|
||||
@@ -0,0 +1,2 @@
|
||||
idf_component_register(SRCS "temp_sensor_main.c"
|
||||
INCLUDE_DIRS ".")
|
||||
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#include "esp_log.h"
|
||||
#include "driver/temperature_sensor.h"
|
||||
|
||||
static const char *TAG = "example";
|
||||
|
||||
void app_main(void)
|
||||
{
|
||||
ESP_LOGI(TAG, "Install temperature sensor, expected temp ranger range: 10~50 ℃");
|
||||
temperature_sensor_handle_t temp_sensor = NULL;
|
||||
temperature_sensor_config_t temp_sensor_config = TEMPERATURE_SENSOR_CONFIG_DEFAULT(10, 50);
|
||||
ESP_ERROR_CHECK(temperature_sensor_install(&temp_sensor_config, &temp_sensor));
|
||||
|
||||
ESP_LOGI(TAG, "Enable temperature sensor");
|
||||
ESP_ERROR_CHECK(temperature_sensor_enable(temp_sensor));
|
||||
|
||||
ESP_LOGI(TAG, "Read temperature");
|
||||
int cnt = 20;
|
||||
float tsens_value;
|
||||
while (cnt--) {
|
||||
ESP_ERROR_CHECK(temperature_sensor_get_celsius(temp_sensor, &tsens_value));
|
||||
ESP_LOGI(TAG, "Temperature value %.02f ℃", tsens_value);
|
||||
vTaskDelay(pdMS_TO_TICKS(1000));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
# SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
|
||||
# SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
import pytest
|
||||
from pytest_embedded.dut import Dut
|
||||
|
||||
|
||||
@pytest.mark.esp32s2
|
||||
@pytest.mark.esp32c3
|
||||
@pytest.mark.esp32s3
|
||||
@pytest.mark.esp32c2
|
||||
@pytest.mark.esp32c6
|
||||
@pytest.mark.esp32h2
|
||||
@pytest.mark.generic
|
||||
def test_temp_sensor_example(dut: Dut) -> None:
|
||||
dut.expect_exact('Install temperature sensor')
|
||||
dut.expect_exact('Enable temperature sensor')
|
||||
dut.expect_exact('Read temperature')
|
||||
temp_value = dut.expect(r'Temperature value (\d+\.\d+) .*', timeout=5)
|
||||
# Because the example test only run in the normal temperature environment. So this assert range is meaningful
|
||||
assert 0 < float(temp_value.group(1).decode('utf8')) < 50
|
||||
temp_value = dut.expect(r'Temperature value (\d+\.\d+) .*', timeout=5)
|
||||
assert 0 < float(temp_value.group(1).decode('utf8')) < 50
|
||||
Reference in New Issue
Block a user