Menggunakan Sensor BME280 Pada ESP32

BME280 adalah sensor temperature, humidity, dan barometric pressure dengan resolusi tinggi.

Temperature range dari -40°C sampain dengan 85 °C dengan akurasi ±1.0 °C , humidity range dari 0-100% dengan akurasi ±3%, dan pressure range dari 300-1100 hectopascal pressure unit
(hPa) dengan akurasi ±1.0 hPa.

BME280 supports Serial Peripheral Interface (SPI) dan I2C communication interfaces. Dapat dioperasikan dalam 3 modes:

  • Sleep mode
  • Normal mode
  • Forced mode

Pada sleep mode, pengukuran dimatikan dan konsumsi power rendah hingga 0.1 μA. Sensor ini cocok untuk digunakan pada device yang diopersikan menggunakan baterai.

BME280

Diagram

Code

Pertama kita tambahkan setting pada platformio.ini.

CONFIG_I2CDEV_TIMEOUT dibutuhkan oleh sensor library.

[env:az-delivery-devkit-v4]
platform = espressif32
board = az-delivery-devkit-v4
framework = espidf

monitor_speed = 115200

lib_extra_dirs = ../../esp-idf-lib/components

build_flags =
-DCONFIG_I2CDEV_TIMEOUT=100000

Pada main.c gunakan code berikut:

//bagian import library
#include <stdio.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <bmp280.h>
#include <string.h>
#define SDA_GPIO 21
#define SCL_GPIO 22
static bmp280_t temp_sensor;

//bagian init hardware
static void init_hw(void)
{
    i2cdev_init();
    memset(&temp_sensor, 0, sizeof(bmp280_t));
    temp_sensor.i2c_dev.timeout_ticks = 0xffff / portTICK_PERIOD_MS;
    bmp280_params_t params;
    bmp280_init_default_params(&params);
    bmp280_init_desc(&temp_sensor, BMP280_I2C_ADDRESS_0, 0,
    SDA_GPIO, SCL_GPIO);
    bmp280_init(&temp_sensor, &params);
}

//bagian main app
void app_main()
{
    init_hw();
    float pressure, temperature, humidity;
    while (1)
    {
        vTaskDelay(500 / portTICK_PERIOD_MS);
        if (bmp280_read_float(&temp_sensor, &temperature, &pressure, &humidity) == ESP_OK)
        {
            printf("%.2f Pa, %.2f C, %.2f %%\n", pressure,
            temperature, humidity);
        }
    }
}

Penjelasan Code

Bagian Import Library

Header file untuk BME280 adalah bmp280.h. Device type adalah bmp280_t. SDA dan Serial Clock (SCL) I2C bus lines dihubungkan ke GPIO21 dan GPIO22.

Bagian Init Hardware

Pada fungsi hardware initialization, pertama inisialisasi I2C bus dengan i2cdev_init.

Pada fungsi hardware initialization, pertama inisialisasi I2C bus menggunakan perintah i2cdev_init.

Kemudian, inisialisasi sensor dengan fungsi bmp280_init_desc function dengan parameter I2C parameters dari modul BME280 module dengan pasing address dan I2C pins.

Pada fungsi bmp280_init, gunakan default parameters, yaitu normal power mode operation dan 4 Hz sampling rate (one reading dalam 250 ms).

Perhatian ada dua option I2C addressing untuk BME280, yaitu SDO pin dari BME280 dihubungkan ke GND atau ke VCC. Pada contoh code dihubungkan ke GND.

Bagian Main App

Pada fungsi app_main, kita baca values dari BME280 module dengan perintah bmp280_read_float, dan print ke serial monitor setiap 500 ms.

Sampai disini kita sudah selesai membahas contoh penggunaan sensor, mulai modul berikutknya kita akan membahas penggunaan aktuator.

Sharing is caring:

Leave a Comment