diff --git a/components/driver/include/driver/temperature_sensor.h b/components/driver/include/driver/temperature_sensor.h index 8e2bd083fc..ce8af2ea83 100644 --- a/components/driver/include/driver/temperature_sensor.h +++ b/components/driver/include/driver/temperature_sensor.h @@ -61,24 +61,24 @@ esp_err_t temperature_sensor_install(const temperature_sensor_config_t *tsens_co esp_err_t temperature_sensor_uninstall(temperature_sensor_handle_t tsens); /** - * @brief Start temperature measurement. + * @brief Enable the temperature sensor * * @param tsens The handle created by `temperature_sensor_install()`. * @return * - ESP_OK Success - * - ESP_ERR_INVALID_STATE if temperature sensor is started already. + * - ESP_ERR_INVALID_STATE if temperature sensor is enabled already. */ -esp_err_t temperature_sensor_start(temperature_sensor_handle_t tsens); +esp_err_t temperature_sensor_enable(temperature_sensor_handle_t tsens); /** - * @brief Stop temperature sensor measure. + * @brief Disable temperature sensor * * @param tsens The handle created by `temperature_sensor_install()`. * @return * - ESP_OK Success - * - ESP_ERR_INVALID_STATE if temperature sensor is stopped already. + * - ESP_ERR_INVALID_STATE if temperature sensor is not enabled yet. */ -esp_err_t temperature_sensor_stop(temperature_sensor_handle_t tsens); +esp_err_t temperature_sensor_disable(temperature_sensor_handle_t tsens); /** * @brief Read temperature sensor data that is converted to degrees Celsius. @@ -88,8 +88,9 @@ esp_err_t temperature_sensor_stop(temperature_sensor_handle_t tsens); * @param out_celsius The measure output value. * @return * - ESP_OK Success - * - ESP_ERR_INVALID_ARG ARG is NULL. - * - ESP_ERR_INVALID_STATE The ambient temperature is out of range. + * - ESP_ERR_INVALID_ARG invalid arguments + * - ESP_ERR_INVALID_STATE Temperature sensor is not enabled yet. + * - ESP_FAIL Parse the sensor data into ambient temperature failed (e.g. out of the range). */ esp_err_t temperature_sensor_get_celsius(temperature_sensor_handle_t tsens, float *out_celsius); diff --git a/components/driver/temperature_sensor.c b/components/driver/temperature_sensor.c index 04522aab65..4452dae906 100644 --- a/components/driver/temperature_sensor.c +++ b/components/driver/temperature_sensor.c @@ -1,19 +1,18 @@ /* - * SPDX-FileCopyrightText: 2016-2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ +#include +#include +#include #include "sdkconfig.h" #if CONFIG_TEMP_SENSOR_ENABLE_DEBUG_LOG // The local log level must be defined before including esp_log.h // Set the maximum log level for this source file #define LOG_LOCAL_LEVEL ESP_LOG_DEBUG #endif - -#include -#include -#include #include "esp_log.h" #include "sys/lock.h" #include "soc/rtc.h" @@ -25,7 +24,6 @@ #include "driver/temperature_sensor.h" #include "esp_efuse_rtc_calib.h" #include "esp_private/periph_ctrl.h" -#include "hal/temperature_sensor_types.h" #include "hal/temperature_sensor_ll.h" static const char *TAG = "temperature_sensor"; @@ -35,10 +33,9 @@ extern portMUX_TYPE rtc_spinlock; //TODO: Will be placed in the appropriate posi #define TEMPERATURE_SENSOR_EXIT_CRITICAL() portEXIT_CRITICAL(&rtc_spinlock) typedef enum { - TSENS_HW_STATE_UNCONFIGURED, - TSENS_HW_STATE_CONFIGURED, - TSENS_HW_STATE_STARTED, -} temp_sensor_state_t; + TEMP_SENSOR_FSM_INIT, + TEMP_SENSOR_FSM_ENABLE, +} temp_sensor_fsm_t; static float s_deltaT = NAN; // unused number @@ -46,7 +43,7 @@ typedef struct temperature_sensor_obj_t temperature_sensor_obj_t; struct temperature_sensor_obj_t { const temp_sensor_ll_attribute_t *tsens_attribute; - temp_sensor_state_t tsens_hw_state; + temp_sensor_fsm_t fsm; temperature_sensor_clk_src_t clk_src; }; @@ -89,9 +86,9 @@ esp_err_t temperature_sensor_install(const temperature_sensor_config_t *tsens_co esp_err_t ret = ESP_OK; ESP_RETURN_ON_FALSE((tsens_config && ret_tsens), ESP_ERR_INVALID_ARG, TAG, "Invalid argument"); ESP_RETURN_ON_FALSE((s_tsens_attribute_copy == NULL), ESP_ERR_INVALID_STATE, TAG, "Already installed"); - temperature_sensor_handle_t tsens; + temperature_sensor_handle_t tsens = NULL; tsens = (temperature_sensor_obj_t *) heap_caps_calloc(1, sizeof(temperature_sensor_obj_t), MALLOC_CAP_DEFAULT); - ESP_GOTO_ON_FALSE(tsens != NULL, ESP_ERR_NO_MEM, err, TAG, "install fail..."); + ESP_GOTO_ON_FALSE(tsens != NULL, ESP_ERR_NO_MEM, err, TAG, "no mem for temp sensor"); tsens->clk_src = tsens_config->clk_src; periph_module_enable(PERIPH_TEMPSENSOR_MODULE); @@ -103,10 +100,13 @@ esp_err_t temperature_sensor_install(const temperature_sensor_config_t *tsens_co tsens->tsens_attribute->range_min, tsens->tsens_attribute->range_max, tsens->tsens_attribute->error_max); + TEMPERATURE_SENSOR_ENTER_CRITICAL(); temperature_sensor_ll_set_range(tsens->tsens_attribute->reg_val); + temperature_sensor_ll_enable(false); // disable the sensor by default TEMPERATURE_SENSOR_EXIT_CRITICAL(); - tsens->tsens_hw_state = TSENS_HW_STATE_CONFIGURED; + + tsens->fsm = TEMP_SENSOR_FSM_INIT; *ret_tsens = tsens; return ESP_OK; err: @@ -116,52 +116,50 @@ err: esp_err_t temperature_sensor_uninstall(temperature_sensor_handle_t tsens) { - ESP_RETURN_ON_FALSE((tsens != NULL), ESP_ERR_INVALID_ARG, TAG, "Has already been uninstalled"); - ESP_RETURN_ON_FALSE(tsens->tsens_hw_state != TSENS_HW_STATE_STARTED, ESP_ERR_INVALID_STATE, TAG, "Has not been stopped"); + ESP_RETURN_ON_FALSE((tsens != NULL), ESP_ERR_INVALID_ARG, TAG, "invalid argument"); + ESP_RETURN_ON_FALSE(tsens->fsm == TEMP_SENSOR_FSM_INIT, ESP_ERR_INVALID_STATE, TAG, "tsens not in init state"); + if (s_tsens_attribute_copy) { free(s_tsens_attribute_copy); } s_tsens_attribute_copy = NULL; - tsens->tsens_hw_state = TSENS_HW_STATE_UNCONFIGURED; - heap_caps_free(tsens); - tsens = NULL; + + periph_module_disable(PERIPH_TEMPSENSOR_MODULE); + free(tsens); return ESP_OK; } -esp_err_t temperature_sensor_start(temperature_sensor_handle_t tsens) +esp_err_t temperature_sensor_enable(temperature_sensor_handle_t tsens) { - ESP_RETURN_ON_FALSE((tsens != NULL), ESP_ERR_INVALID_ARG, TAG, "Has not been installed"); - ESP_RETURN_ON_FALSE(tsens->tsens_hw_state == TSENS_HW_STATE_CONFIGURED, ESP_ERR_INVALID_STATE, TAG, "Is already running or has not been configured"); + ESP_RETURN_ON_FALSE((tsens != NULL), ESP_ERR_INVALID_ARG, TAG, "invalid argument"); + ESP_RETURN_ON_FALSE(tsens->fsm == TEMP_SENSOR_FSM_INIT, ESP_ERR_INVALID_STATE, TAG, "tsens not in init state"); + #if SOC_TEMPERATURE_SENSOR_SUPPORT_FAST_RC if (tsens->clk_src == TEMPERATURE_SENSOR_CLK_SRC_RC_FAST) { periph_rtc_dig_clk8m_enable(); } #endif + temperature_sensor_ll_clk_enable(true); temperature_sensor_ll_clk_sel(tsens->clk_src); temperature_sensor_ll_enable(true); - tsens->tsens_hw_state = TSENS_HW_STATE_STARTED; + tsens->fsm = TEMP_SENSOR_FSM_ENABLE; return ESP_OK; } -esp_err_t temperature_sensor_stop(temperature_sensor_handle_t tsens) +esp_err_t temperature_sensor_disable(temperature_sensor_handle_t tsens) { - ESP_RETURN_ON_FALSE(tsens->tsens_hw_state == TSENS_HW_STATE_STARTED, ESP_ERR_INVALID_STATE, TAG, "Has not been started"); + ESP_RETURN_ON_FALSE(tsens, ESP_ERR_INVALID_ARG, TAG, "invalid argument"); + ESP_RETURN_ON_FALSE(tsens->fsm == TEMP_SENSOR_FSM_ENABLE, ESP_ERR_INVALID_STATE, TAG, "tsens not enabled yet"); + temperature_sensor_ll_enable(false); #if SOC_TEMPERATURE_SENSOR_SUPPORT_FAST_RC if (tsens->clk_src == TEMPERATURE_SENSOR_CLK_SRC_RC_FAST) { periph_rtc_dig_clk8m_disable(); } #endif - periph_module_disable(PERIPH_TEMPSENSOR_MODULE); - tsens->tsens_hw_state = TSENS_HW_STATE_CONFIGURED; - return ESP_OK; -} -static esp_err_t temp_sensor_read_raw(uint32_t *tsens_out) -{ - ESP_RETURN_ON_FALSE(tsens_out != NULL, ESP_ERR_INVALID_ARG, TAG, "No tsens_out specified"); - *tsens_out = temperature_sensor_ll_get_raw_value(); + tsens->fsm = TEMP_SENSOR_FSM_INIT; return ESP_OK; } @@ -187,14 +185,15 @@ esp_err_t temperature_sensor_get_celsius(temperature_sensor_handle_t tsens, floa { ESP_RETURN_ON_FALSE((tsens != NULL), ESP_ERR_INVALID_ARG, TAG, "Has not been installed"); ESP_RETURN_ON_FALSE(out_celsius != NULL, ESP_ERR_INVALID_ARG, TAG, "Celsius points to nothing"); - ESP_RETURN_ON_FALSE(tsens->tsens_hw_state == TSENS_HW_STATE_STARTED, ESP_ERR_INVALID_ARG, TAG, "Has not been started"); - uint32_t tsens_out = 0; - temp_sensor_read_raw(&tsens_out); + ESP_RETURN_ON_FALSE(tsens->fsm == TEMP_SENSOR_FSM_ENABLE, ESP_ERR_INVALID_STATE, TAG, "tsens not enabled yet"); + + uint32_t tsens_out = temperature_sensor_ll_get_raw_value(); ESP_LOGV(TAG, "tsens_out %d", tsens_out); + *out_celsius = parse_temp_sensor_raw_value(tsens_out, tsens->tsens_attribute->offset); if (*out_celsius < tsens->tsens_attribute->range_min || *out_celsius > tsens->tsens_attribute->range_max) { - ESP_LOGW(TAG, "Temperature range exceeded!"); - return ESP_ERR_INVALID_STATE; + ESP_LOGW(TAG, "value out of range, probably invalid"); + return ESP_FAIL; } return ESP_OK; } diff --git a/components/driver/test_apps/temperature_sensor/main/test_app_main.c b/components/driver/test_apps/temperature_sensor/main/test_app_main.c index 183a88ae3c..b5419c065f 100644 --- a/components/driver/test_apps/temperature_sensor/main/test_app_main.c +++ b/components/driver/test_apps/temperature_sensor/main/test_app_main.c @@ -36,5 +36,17 @@ void tearDown(void) void app_main(void) { +// _____ ____ +// |_ _|__ _ __ ___ _ __ / ___| ___ _ __ ___ ___ _ __ +// | |/ _ \ '_ ` _ \| '_ \ \___ \ / _ \ '_ \/ __|/ _ \| '__| +// | | __/ | | | | | |_) | ___) | __/ | | \__ \ (_) | | +// |_|\___|_| |_| |_| .__/ |____/ \___|_| |_|___/\___/|_| +// |_| + printf(" _____ ____\r\n"); + printf("|_ _|__ _ __ ___ _ __ / ___| ___ _ __ ___ ___ _ __\r\n"); + printf(" | |/ _ \\ '_ ` _ \\| '_ \\ \\___ \\ / _ \\ '_ \\/ __|/ _ \\| '__|\r\n"); + printf(" | | __/ | | | | | |_) | ___) | __/ | | \\__ \\ (_) | |\r\n"); + printf(" |_|\\___|_| |_| |_| .__/ |____/ \\___|_| |_|___/\\___/|_|\r\n"); + printf(" |_|\r\n"); unity_run_menu(); } diff --git a/components/driver/test_apps/temperature_sensor/main/test_temperature_sensor.c b/components/driver/test_apps/temperature_sensor/main/test_temperature_sensor.c index 0269e28fc9..191cc5f236 100644 --- a/components/driver/test_apps/temperature_sensor/main/test_temperature_sensor.c +++ b/components/driver/test_apps/temperature_sensor/main/test_temperature_sensor.c @@ -16,21 +16,25 @@ TEST_CASE("Temperature_sensor_driver_workflow_test", "[temperature_sensor]") temperature_sensor_config_t temp_sensor = TEMPERAUTRE_SENSOR_CONFIG_DEFAULT(10, 50); temperature_sensor_handle_t temp_handle = NULL; TEST_ESP_OK(temperature_sensor_install(&temp_sensor, &temp_handle)); - TEST_ESP_OK(temperature_sensor_start(temp_handle)); + // read sensor before enable it should fail + TEST_ESP_ERR(ESP_ERR_INVALID_STATE, temperature_sensor_get_celsius(temp_handle, &tsens_out)); + TEST_ESP_OK(temperature_sensor_enable(temp_handle)); printf("Temperature sensor started\n"); TEST_ESP_OK(temperature_sensor_get_celsius(temp_handle, &tsens_out)); printf("Temperature out celsius %f°C\n", tsens_out); - TEST_ESP_OK(temperature_sensor_stop(temp_handle)); + // uninstall driver before disable it should fail + TEST_ESP_ERR(ESP_ERR_INVALID_STATE, temperature_sensor_uninstall(temp_handle)); + TEST_ESP_OK(temperature_sensor_disable(temp_handle)); TEST_ESP_OK(temperature_sensor_uninstall(temp_handle)); // Reconfig the temperature sensor. temp_sensor.range_min = -20; temp_sensor.range_max = 45; TEST_ESP_OK(temperature_sensor_install(&temp_sensor, &temp_handle)); - TEST_ESP_OK(temperature_sensor_start(temp_handle)); + TEST_ESP_OK(temperature_sensor_enable(temp_handle)); printf("Temperature sensor started again\n"); TEST_ESP_OK(temperature_sensor_get_celsius(temp_handle, &tsens_out)); printf("Temperature out celsius %f°C\n", tsens_out); - TEST_ESP_OK(temperature_sensor_stop(temp_handle)); + TEST_ESP_OK(temperature_sensor_disable(temp_handle)); TEST_ESP_OK(temperature_sensor_uninstall(temp_handle)); } @@ -50,9 +54,9 @@ TEST_CASE("Double start error cause test", "[temperature_sensor]") temperature_sensor_config_t temp_sensor = TEMPERAUTRE_SENSOR_CONFIG_DEFAULT(10, 50); temperature_sensor_handle_t temp_handle = NULL; TEST_ESP_OK(temperature_sensor_install(&temp_sensor, &temp_handle)); - TEST_ESP_OK(temperature_sensor_start(temp_handle)); - TEST_ESP_ERR(ESP_ERR_INVALID_STATE, temperature_sensor_start(temp_handle)); - TEST_ESP_OK(temperature_sensor_stop(temp_handle)); + TEST_ESP_OK(temperature_sensor_enable(temp_handle)); + TEST_ESP_ERR(ESP_ERR_INVALID_STATE, temperature_sensor_enable(temp_handle)); + TEST_ESP_OK(temperature_sensor_disable(temp_handle)); TEST_ESP_OK(temperature_sensor_uninstall(temp_handle)); } @@ -63,15 +67,15 @@ TEST_CASE("Double Start-Stop test", "[temperature_sensor]") temperature_sensor_config_t temp_sensor = TEMPERAUTRE_SENSOR_CONFIG_DEFAULT(10, 50); temperature_sensor_handle_t temp_handle = NULL; TEST_ESP_OK(temperature_sensor_install(&temp_sensor, &temp_handle)); - TEST_ESP_OK(temperature_sensor_start(temp_handle)); + TEST_ESP_OK(temperature_sensor_enable(temp_handle)); printf("Temperature sensor started\n"); TEST_ESP_OK(temperature_sensor_get_celsius(temp_handle, &tsens_out)); printf("Temperature out celsius %f°C\n", tsens_out); - TEST_ESP_OK(temperature_sensor_stop(temp_handle)); - TEST_ESP_OK(temperature_sensor_start(temp_handle)); + TEST_ESP_OK(temperature_sensor_disable(temp_handle)); + TEST_ESP_OK(temperature_sensor_enable(temp_handle)); printf("Temperature sensor started again\n"); TEST_ESP_OK(temperature_sensor_get_celsius(temp_handle, &tsens_out)); printf("Temperature out celsius %f°C\n", tsens_out); - TEST_ESP_OK(temperature_sensor_stop(temp_handle)); + TEST_ESP_OK(temperature_sensor_disable(temp_handle)); TEST_ESP_OK(temperature_sensor_uninstall(temp_handle)); } diff --git a/docs/en/api-reference/peripherals/temp_sensor.rst b/docs/en/api-reference/peripherals/temp_sensor.rst index d91e0d94ae..9fbf66e8c5 100644 --- a/docs/en/api-reference/peripherals/temp_sensor.rst +++ b/docs/en/api-reference/peripherals/temp_sensor.rst @@ -30,13 +30,9 @@ Functional Overview ------------------- - `Resource Allocation <#resource-allocation>`__ - covers which parameters should be set up to get a temperature sensor handle and how to recycle the resources when temperature sensor finishes working. - -- `Start and Stop Temperature <#start-and-stop-temperature>`__ - covers how to start or stop the temperature sensor. - +- `Enable and Disable Temperature Sensor <#enable-and-disable-temperature-sensor>`__ - covers how to enable and disable the temperature sensor. - `Get Temperature Value <#get-temperature-value>`__ - covers how to get the real-time temperature value. - - `Power Management <#power-management>`__ - covers how temperature sensor is affected when changing power mode (i.e. light sleep). - - `Thread Safety <#thread-safety>`__ - covers how to make the driver to be thread safe. Resource Allocation @@ -48,7 +44,6 @@ In order to install a built-in temperature sensor instance, the first thing is t :cpp:type:`temperature_sensor_config_t`: - :cpp:member:`range_min`. The minimum value of testing range you have evaluated. - - :cpp:member:`range_max`. The maximum value of testing range you have evaluated. After the ranges are set, the structure could be passed to :cpp:func:`temperature_sensor_install`, which will instantiate the temperature sensor instance and return a handle. @@ -61,7 +56,6 @@ Creating a Temperature Sensor Handle ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Step1: Evaluate the testing range. In this example, the range is 20 °C ~ 50 °C. - * Step2: Configure the range and obtain a handle .. code:: c @@ -73,28 +67,27 @@ Creating a Temperature Sensor Handle }; ESP_ERROR_CHECK(temperature_sensor_install(&temp_sensor, &temp_handle)); -Start and Stop Temperature -^^^^^^^^^^^^^^^^^^^^^^^^^^ +Enable and Disable Temperature Sensor +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -1. Start the temperature sensor by calling :cpp:func:`temperature_sensor_start`. The temperature sensor will now measure the temperature. - -2. To stop the temperature sensor, please call :cpp:func:`temperature_sensor_stop`. +1. Enable the temperature sensor by calling :cpp:func:`temperature_sensor_enable`. The internal temperature sensor circuit will start to work. The driver state will transit from init to enable. +2. To Disable the temperature sensor, please call :cpp:func:`temperature_sensor_disable`. Get Temperature Value ^^^^^^^^^^^^^^^^^^^^^ -After the temperature sensor has been installed, you can get the temperature value by following the steps below. - -1. To get the current temperature, please call :cpp:func:`temperature_sensor_get_celsius`. +After the temperature sensor is enabled by :cpp:func:`temperature_sensor_enable`, user can get the current temperature by calling :cpp:func:`temperature_sensor_get_celsius`. .. code:: c - ESP_ERROR_CHECK(temperature_sensor_start(temp_handle)); - printf("Temperature sensor started\n"); + // Enable temperature sensor + ESP_ERROR_CHECK(temperature_sensor_enable(temp_handle)); + // Get converted sensor data float tsens_out; ESP_ERROR_CHECK(temperature_sensor_get_celsius(temp_handle, &tsens_out)); printf("Temperature in %f °C\n", tsens_out); - ESP_ERROR_CHECK(temperature_sensor_stop(temp_handle)); + // Disable the temperature sensor if it's not needed and save the power + ESP_ERROR_CHECK(temperature_sensor_disable(temp_handle)); Power Management ^^^^^^^^^^^^^^^^ @@ -114,12 +107,12 @@ Unexpected Behaviors 2. When installing the temperature sensor, the driver gives a 'the boundary you gave cannot meet the range of internal temperature sensor' error feedback. It is because the built-in temperature sensor has testing limit. The error due to setting :cpp:type:`temperature_sensor_config_t`: (1) Totally out of range, like 200 °C ~ 300 °C. - (2) Cross the boundary of each predefined measurement. like 40 °C ~ 110 °C. + (2) Cross the boundary of each predefined measurement. like 40 °C ~ 110 °C. Application Example ------------------- -Temperature sensor reading example: :example:`peripherals/temp_sensor`. +* Temperature sensor reading example: :example:`peripherals/temp_sensor`. API Reference ---------------------------------- diff --git a/examples/peripherals/temp_sensor/README.md b/examples/peripherals/temp_sensor/README.md index 45f9d25c1e..13ae8a2546 100644 --- a/examples/peripherals/temp_sensor/README.md +++ b/examples/peripherals/temp_sensor/README.md @@ -3,9 +3,9 @@ # Temperature Sensor Example -The ESP32-S2/C3/S3 has a built-in temperature sensor. The temperature sensor module contains an 8-bit Sigma-Delta ADC and a temperature offset DAC. +The ESP32-S2/C3/S3 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. +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(℃) | | :-------: | :----: | :--------------: | :--------------: | @@ -37,18 +37,17 @@ See the [Getting Started Guide](https://docs.espressif.com/projects/esp-idf/en/l ## Example Output ``` -I (276) example: Initializing Temperature sensor -I (276) temperature_sensor: temperature range [-10°C ~ 80°C], error < 1°C -I (286) example: Temperature sensor started -I (1286) example: Temperature out celsius 21.64 -I (2286) example: Temperature out celsius 21.64 -I (3286) example: Temperature out celsius 21.64 -I (4286) example: Temperature out celsius 22.08 -I (5286) example: Temperature out celsius 22.08 -I (6286) example: Temperature out celsius 22.08 -I (7286) example: Temperature out celsius 22.08 -I (8286) example: Temperature out celsius 22.08 -I (9286) example: Temperature out celsius 22.08 +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 ℃ ``` diff --git a/examples/peripherals/temp_sensor/main/temp_sensor_main.c b/examples/peripherals/temp_sensor/main/temp_sensor_main.c index 3439634773..7ac7f6e4f5 100644 --- a/examples/peripherals/temp_sensor/main/temp_sensor_main.c +++ b/examples/peripherals/temp_sensor/main/temp_sensor_main.c @@ -4,34 +4,29 @@ * SPDX-License-Identifier: Apache-2.0 */ -#include "esp_log.h" -#include "esp_check.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" +#include "esp_log.h" #include "driver/temperature_sensor.h" static const char *TAG = "example"; -void tempsensor_example(void) -{ - // Initialize touch pad peripheral, it will start a timer to run a filter - ESP_LOGI(TAG, "Initializing Temperature sensor"); - float tsens_out; - temperature_sensor_config_t temp_sensor = TEMPERAUTRE_SENSOR_CONFIG_DEFAULT(10, 50); - temperature_sensor_handle_t temp_handle = NULL; - ESP_ERROR_CHECK(temperature_sensor_install(&temp_sensor, &temp_handle)); - ESP_ERROR_CHECK(temperature_sensor_start(temp_handle)); - ESP_LOGI(TAG, "Temperature sensor started"); - int cnt = 20; //read value for 20 times - while (cnt) { - vTaskDelay(1000 / portTICK_PERIOD_MS); - ESP_ERROR_CHECK(temperature_sensor_get_celsius(temp_handle, &tsens_out)); - ESP_LOGI(TAG, "Temperature out celsius %.02f", tsens_out); - cnt--; - } -} - void app_main(void) { - tempsensor_example(); + 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 = TEMPERAUTRE_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)); + } } diff --git a/examples/peripherals/temp_sensor/pytest_temp_sensor_example.py b/examples/peripherals/temp_sensor/pytest_temp_sensor_example.py index 63e22af035..60774eeb27 100644 --- a/examples/peripherals/temp_sensor/pytest_temp_sensor_example.py +++ b/examples/peripherals/temp_sensor/pytest_temp_sensor_example.py @@ -10,8 +10,11 @@ from pytest_embedded.dut import Dut @pytest.mark.esp32s3 @pytest.mark.generic def test_temp_sensor_example(dut: Dut) -> None: - dut.expect_exact('Initializing Temperature sensor') - dut.expect_exact('Temperature sensor started') - temp_value = dut.expect(r'Temperature out celsius (\d+\.\d+)', timeout=30) + 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)) < 45 + 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