tsens_cmd.c 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. /*
  2. * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #include <stdio.h>
  7. #include <string.h>
  8. #include "esp_log.h"
  9. #include "esp_console.h"
  10. #include "linenoise/linenoise.h"
  11. #include "argtable3/argtable3.h"
  12. #include "driver/temperature_sensor.h"
  13. #include "freertos/FreeRTOS.h"
  14. #include "freertos/task.h"
  15. const static char* TAG = "TSENS";
  16. static temperature_sensor_handle_t s_temp_sensor = NULL;
  17. static int tsens_init(int argc, char **argv)
  18. {
  19. ESP_LOGI(TAG, "Install temperature sensor, expected temp ranger range: 10~50 ℃");
  20. temperature_sensor_config_t temp_sensor_config = TEMPERATURE_SENSOR_CONFIG_DEFAULT(10, 50);
  21. ESP_ERROR_CHECK(temperature_sensor_install(&temp_sensor_config, &s_temp_sensor));
  22. ESP_LOGI(TAG, "Enable temperature sensor");
  23. ESP_ERROR_CHECK(temperature_sensor_enable(s_temp_sensor));
  24. return 0;
  25. }
  26. static void register_tsens_init(void)
  27. {
  28. const esp_console_cmd_t cmd = {
  29. .command = "tsens_init",
  30. .help = "Initialize temperature sensor",
  31. .hint = NULL,
  32. .func = &tsens_init,
  33. .argtable = NULL
  34. };
  35. ESP_ERROR_CHECK(esp_console_cmd_register(&cmd));
  36. }
  37. typedef struct {
  38. struct arg_int *count;
  39. struct arg_int *interval_ms;
  40. struct arg_end *end;
  41. } tsens_read_args_t;
  42. static tsens_read_args_t tsens_args;
  43. typedef struct {
  44. int count;
  45. int interval_ms;
  46. } tsens_read_param_t;
  47. static void tsens_read_task(void *arg)
  48. {
  49. tsens_read_param_t *param = (tsens_read_param_t*) arg;
  50. int count = param->count;
  51. int interval_ms = param->interval_ms;
  52. free(arg);
  53. float tsens_value;
  54. while (count-- > 0) {
  55. vTaskDelay(pdMS_TO_TICKS(interval_ms));
  56. ESP_ERROR_CHECK(temperature_sensor_get_celsius(s_temp_sensor, &tsens_value));
  57. ESP_LOGI(TAG, "Temperature value %.02f ℃", tsens_value);
  58. }
  59. vTaskDelete(NULL);
  60. }
  61. static int do_tsens_read(int argc, char **argv)
  62. {
  63. int nerrors = arg_parse(argc, argv, (void **) &tsens_args);
  64. if (nerrors != 0) {
  65. arg_print_errors(stderr, tsens_args.end, argv[0]);
  66. return 1;
  67. }
  68. tsens_read_param_t* params = (tsens_read_param_t*)malloc(sizeof(tsens_read_param_t));
  69. params->count = 1;
  70. params->interval_ms = 100;
  71. if (tsens_args.count->count > 0) {
  72. params->count = tsens_args.count->ival[0];
  73. }
  74. if (tsens_args.interval_ms->count > 0) {
  75. params->interval_ms = tsens_args.interval_ms->ival[0];
  76. }
  77. xTaskCreate(tsens_read_task, "tsens_read_task", 4096, (void*)params, 1, NULL);
  78. return 0;
  79. }
  80. static void register_tsens_read(void)
  81. {
  82. tsens_args.count = arg_int0("c", "count", "<count>", "read count");
  83. tsens_args.interval_ms = arg_int0("i", "interval", "<interval>", "read interval in ms");
  84. tsens_args.end = arg_end(2);
  85. const esp_console_cmd_t cmd = {
  86. .command = "tsens_read",
  87. .help = "Temperature sensor read",
  88. .hint = NULL,
  89. .func = &do_tsens_read,
  90. .argtable = &tsens_args
  91. };
  92. ESP_ERROR_CHECK(esp_console_cmd_register(&cmd));
  93. }
  94. void register_tsens_cmd(void)
  95. {
  96. register_tsens_init();
  97. register_tsens_read();
  98. }