diff -r f8b0268c8d0a -r 1c9894662795 main/iotbalkon.c --- a/main/iotbalkon.c Sun Mar 26 22:22:45 2023 +0200 +++ b/main/iotbalkon.c Mon Mar 27 22:13:21 2023 +0200 @@ -1,16 +1,76 @@ - +/** + * @file iotbalkon.c + * @brief iotbalkon project. + */ -#include -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" -#include "driver/gpio.h" -#include "esp_log.h" - - +#include "config.h" static const char *TAG = "iotbalkon"; + +static TaskHandle_t xTaskBMP280 = NULL; + +extern BMP280_State *bmp280_state; ///< I2C state +extern SemaphoreHandle_t xSemaphoreBMP280; ///< I2C lock semaphore +extern bmp280_params_t bmp280_params; +extern bmp280_t bmp280_dev; + + void app_main(void) { - ESP_LOGI(TAG, "Starting"); +#ifdef CONFIG_CODE_PRODUCTION + ESP_LOGI(TAG, "Starting production"); +#endif +#ifdef CONFIG_CODE_TESTING + ESP_LOGI(TAG, "Starting testing"); +#endif + + ESP_ERROR_CHECK(i2cdev_init()); + + bmp280_init_default_params(&bmp280_params); + memset(&bmp280_dev, 0, sizeof(bmp280_t)); + + i2c_dev_t dev = { 0 }; + dev.cfg.sda_io_num = CONFIG_I2C_MASTER_SDA; + dev.cfg.scl_io_num = CONFIG_I2C_MASTER_SCL; + dev.cfg.master.clk_speed = 1000000; + + dev.addr = 0x39; + if (i2c_dev_probe(&dev, I2C_DEV_WRITE) == 0) { + ESP_LOGI(TAG, "Found ADPS-9930"); + } + dev.addr = 0x40; + if (i2c_dev_probe(&dev, I2C_DEV_WRITE) == 0) { + ESP_LOGI(TAG, "Found INA219 Battery"); + } + dev.addr = 0x41; + if (i2c_dev_probe(&dev, I2C_DEV_WRITE) == 0) { + ESP_LOGI(TAG, "Found INA219 Solar"); + } + dev.addr = 0x76; + if (i2c_dev_probe(&dev, I2C_DEV_WRITE) == 0) { + ESP_ERROR_CHECK(bmp280_init_desc(&bmp280_dev, BMP280_I2C_ADDRESS_0, 0, CONFIG_I2C_MASTER_SDA, CONFIG_I2C_MASTER_SCL)); + ESP_ERROR_CHECK(bmp280_init(&bmp280_dev, &bmp280_params)); + ESP_LOGI(TAG, "Found BMP280 @ 0x76 id: 0x%02x", bmp280_dev.id); + } + dev.addr = 0x77; + if (i2c_dev_probe(&dev, I2C_DEV_WRITE) == 0) { + ESP_LOGI(TAG, "Found BMP280 @ 0x77"); + } + + /* + * Create FreeRTOS tasks + */ + xSemaphoreBMP280 = xSemaphoreCreateMutex(); + + xTaskCreate(&task_bmp280, "task_bmp280", 2560, NULL, 8, &xTaskBMP280); + + /* + * Main application loop. + */ + while (1) { + request_bmp280(); + vTaskDelay(2000 / portTICK_PERIOD_MS); + } + // Not reached. }