Files

60 lines
2.1 KiB
C
Raw Permalink Normal View History

2026-09-11 10:19:50 +02:00
#include <stdio.h>
#include <string.h>
#include <bmp280.h>
2026-10-05 19:28:37 +02:00
#include <esp_log.h>
2026-09-11 10:19:50 +02:00
#include "ygg_bmp280.h"
2026-09-15 20:51:07 +02:00
#include "ygg_state.h"
2026-10-05 19:28:37 +02:00
#include "ygg_lock.h"
static const char *TAG = "ygg_bmp280";
2026-09-11 10:19:50 +02:00
void ygg_bmp280_init(bmp280_t *dev) {
2026-10-05 19:28:37 +02:00
// UWAGA: i2cdev_init() + ygg_lock_init() robi app_main() raz przed
// wszystkimi initami. Tutaj już nie tworzymy magistrali.
2026-09-11 10:19:50 +02:00
bmp280_params_t params;
bmp280_init_default_params(&params);
memset(dev, 0, sizeof(bmp280_t));
ESP_ERROR_CHECK(bmp280_init_desc(dev, BMP280_I2C_ADDRESS_0, 0, I2C_MASTER_SDA, I2C_MASTER_SCL));
2026-10-05 19:28:37 +02:00
// bmp280_init_desc() ustawia 1MHz - za szybko na pająka + dzieloną
// magistralę z OLED. Zjeżdżamy do 100kHz przed pierwszym użyciem
// (device jest dopinane do busa leniwie przy pierwszej transakcji).
dev->i2c_dev.cfg.master.clk_speed = YGG_I2C_FREQ_HZ;
2026-09-11 10:19:50 +02:00
ESP_ERROR_CHECK(bmp280_init(dev, &params));
bool bme280p = dev->id == BME280_CHIP_ID;
printf("BMP280: found %s\n", bme280p ? "BME280" : "BMP280");
}
2026-10-05 19:28:37 +02:00
esp_err_t ygg_bmp280_read_sensor(bmp280_t *dev) {
float pressure = 0, temperature = 0, humidity = 0;
2026-09-11 10:19:50 +02:00
bool bme280p = dev->id == BME280_CHIP_ID;
2026-10-05 19:28:37 +02:00
// Cały odczyt pod wspólnym mutexem I2C - OLED (esp_lcd) używa
// tego samego busa bez wiedzy o mutexach i2cdev.
// Bez tego flush LVGL potrafi wejść w środek odczytu -> timeout.
if (!ygg_i2c_lock_take(pdMS_TO_TICKS(1000))) {
ESP_LOGW(TAG, "I2C busy, skipping readout");
return ESP_ERR_TIMEOUT;
}
esp_err_t err = bmp280_read_float(dev, &temperature, &pressure, &humidity);
ygg_i2c_lock_give();
if (err != ESP_OK) {
ESP_LOGW(TAG, "Temperature/pressure reading failed: %s - keeping last good readout",
esp_err_to_name(err));
return err;
}
2026-09-11 10:19:50 +02:00
2026-10-05 19:28:37 +02:00
// Aktualizuj globalny stan TYLKO przy sukcesie.
2026-09-15 20:51:07 +02:00
CURR_READOUT.temperature = temperature;
CURR_READOUT.pressure = pressure;
CURR_READOUT.humidity = humidity;
2026-09-11 10:19:50 +02:00
printf("Pressure: %.2f Pa, Temperature: %.2f C", pressure, temperature);
if (bme280p)
printf(", Humidity: %.2f\n", humidity);
else
printf("\n");
2026-10-05 19:28:37 +02:00
return ESP_OK;
2026-09-11 10:19:50 +02:00
}