main/task_bmp280.c

Sat, 15 Apr 2023 13:29:40 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Sat, 15 Apr 2023 13:29:40 +0200
changeset 29
551a53b31373
parent 2
3462a53e548f
permissions
-rw-r--r--

Final release and installed for production.

1
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1 /**
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2 * @file task_bmp280.c
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
3 * @brief The FreeRTOS task to query the BMP280 sensor.
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
4 */
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
5
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
6
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
7 #include "config.h"
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
8
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
9
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
10 static const char *TAG = "task_bmp280";
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
11
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
12 SemaphoreHandle_t xSemaphoreBMP280 = NULL; ///< Semaphore BMP280 task
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
13 EventGroupHandle_t xEventGroupBMP280; ///< Events BMP280 task
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
14 BMP280_State *bmp280_state; ///< Public state for other tasks
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
15
2
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
16 extern bmp280_params_t bmp280_params;
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
17 extern bmp280_t bmp280_dev;
1
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
18
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
19 const int TASK_BMP280_REQUEST_DONE = BIT0; ///< All requests are done.
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
20 const int TASK_BMP280_REQUEST_TB = BIT1; ///< Request Temperature and Barometer
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
21
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
22
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
23
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
24 void request_bmp280(void)
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
25 {
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
26 xEventGroupClearBits(xEventGroupBMP280, TASK_BMP280_REQUEST_DONE);
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
27 xEventGroupSetBits(xEventGroupBMP280, TASK_BMP280_REQUEST_TB);
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
28 }
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
29
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
30
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
31
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
32 bool ready_bmp280(void)
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
33 {
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
34 if (xEventGroupGetBits(xEventGroupBMP280) & TASK_BMP280_REQUEST_DONE)
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
35 return true;
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
36 return false;
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
37 }
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
38
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
39
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
40
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
41 /*
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
42 * Task to read BMP280 sensor on request.
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
43 */
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
44 void task_bmp280(void *pvParameter)
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
45 {
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
46 float pressure, temperature, humidity;
2
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
47 int error = 0;
1
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
48
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
49 ESP_LOGI(TAG, "Starting task BMP280 sda=%d scl=%d", CONFIG_I2C_MASTER_SDA, CONFIG_I2C_MASTER_SCL);
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
50 bmp280_state = malloc(sizeof(BMP280_State));
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
51
2
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
52 bmp280_state->valid = false;
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
53 bmp280_state->fake = (bmp280_dev.i2c_dev.addr == 0) ? true:false;
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
54 bmp280_state->address = bmp280_dev.i2c_dev.addr;
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
55 bmp280_state->error = BMP280_ERR_NONE;
1
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
56
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
57 /* event handler and event group for this task */
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
58 xEventGroupBMP280 = xEventGroupCreate();
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
59 EventBits_t uxBits;
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
60
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
61 /*
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
62 * Task loop forever.
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
63 */
2
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
64 ESP_LOGI(TAG, "Starting loop BMP280 sensor 0x%02x %d", bmp280_state->address, bmp280_state->fake);
1
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
65 while (1) {
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
66
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
67 uxBits = xEventGroupWaitBits(xEventGroupBMP280, TASK_BMP280_REQUEST_TB, pdFALSE, pdFALSE, portMAX_DELAY );
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
68
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
69 if (uxBits & TASK_BMP280_REQUEST_TB) {
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
70
2
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
71 if (! bmp280_state->fake) {
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
72 /* Real sensor is present */
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
73 error = bmp280_read_float(&bmp280_dev, &temperature, &pressure, &humidity);
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
74 if (xSemaphoreTake(xSemaphoreBMP280, 25) == pdTRUE) {
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
75 if (error == ESP_OK) {
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
76 bmp280_state->error = BMP280_ERR_NONE;
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
77 bmp280_state->valid = true;
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
78 bmp280_state->temperature = temperature;
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
79 bmp280_state->pressure = pressure;
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
80 bmp280_state->humidity = humidity;
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
81 } else {
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
82 bmp280_state->error = BMP280_ERR_READ;
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
83 bmp280_state->valid = false;
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
84 bmp280_state->temperature = 0;
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
85 bmp280_state->pressure = 0;
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
86 bmp280_state->humidity = 0;
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
87 }
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
88 xSemaphoreGive(xSemaphoreBMP280);
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
89 }
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
90 } else {
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
91 /* Use fake values */
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
92 if (xSemaphoreTake(xSemaphoreBMP280, 25) == pdTRUE) {
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
93 bmp280_state->error = BMP280_ERR_NONE;
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
94 bmp280_state->valid = true;
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
95 bmp280_state->temperature = 21.23;
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
96 bmp280_state->pressure = 101360;
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
97 bmp280_state->humidity = 0;
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
98 xSemaphoreGive(xSemaphoreBMP280);
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
99 }
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
100 }
1
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
101
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
102 xEventGroupClearBits(xEventGroupBMP280, TASK_BMP280_REQUEST_TB);
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
103 xEventGroupSetBits(xEventGroupBMP280, TASK_BMP280_REQUEST_DONE);
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
104 #if 1
2
3462a53e548f Finished the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents: 1
diff changeset
105 ESP_LOGI(TAG, " TB: %.3f C, %.1f hPa, error: %d", bmp280_state->temperature, bmp280_state->pressure / 100, bmp280_state->error);
1
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
106 #endif
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
107 }
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
108 }
1c9894662795 Added esp-idf-lib for a lot of sensors. Added the basic design for the BMP280 task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
109 }

mercurial