Tutorial ESP32 – Memprogram Sensor BMP280 dengan ESP32

ARSAFAMILY.COM – Hay guyss, kali ini kita akan bereksperiman lagi dengan ESP32, yaitu dengan menggunakan sensor BMP280, yaitu sensor yang dapat mengukur suhu, tekanan atmosfer, dan ketinggian.

Kita akan membuat 2 program, yaitu program basic dari BMP280 dan program modifikasi dengan penambahan buzzer.

Untuk membuat 2 program di atas, yang anda butuhkan hanya 3 yaitu ESP32, Sensor BMP280, dan passive buzzer

ESP32 30 Pin
Sensor BMP280
Passive Buzzer

Sebelum melakukan percobaan ini, ada 1 ritual yang wajib dilakukan, yaitu menginstall BMP280 Library by Adafruit.

Cara install BMP280 Library by Adafruit : Buka Library Manager -> ketik BMP280 -> klik Install, pastikan yang diinstal adalah Adafruit  BMP280 Library seperti gambar di bawah ini

PROGRAM PERTAMA – BASIC BMP280

Rangkailah ESP32 dengan BMP280 mengikuti gambar di bawah ini

Keterangan :

BMP280 VCC -> ESP32 3.3V

BMP280 GND -> ESP32 GND

BMP280 SCL -> ESP32 D22

BMP280 SDA -> ESP32 D21

#Pin CSB dan SBO BMP280 tidak dipakai, hanya menggunakan 4 pin saja

Kita akan menggunakan contoh program yang disedikan oleh library BMP280 yang telah diinstall sebelumnya. Buka menu File > Examples > Adafruit BMP280 Library > bmp280testkodenya akan seperti di bawah ini

/***************************************************************************
  This is a library for the BMP280 humidity, temperature & pressure sensor

  Designed specifically to work with the Adafruit BMP280 Breakout
  ----> http://www.adafruit.com/products/2651

  These sensors use I2C or SPI to communicate, 2 or 4 pins are required
  to interface.

  Adafruit invests time and resources providing this open source code,
  please support Adafruit andopen-source hardware by purchasing products
  from Adafruit!

  Written by Limor Fried & Kevin Townsend for Adafruit Industries.
  BSD license, all text above must be included in any redistribution
 ***************************************************************************/
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BMP280.h>

#define BMP_SCK  (13)
#define BMP_MISO (12)
#define BMP_MOSI (11)
#define BMP_CS   (10)

Adafruit_BMP280 bmp; // I2C
//Adafruit_BMP280 bmp(BMP_CS); // hardware SPI
//Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO,  BMP_SCK);

void setup() {
  Serial.begin(9600);
  while ( !Serial ) delay(100);   // wait for native usb
  Serial.println(F("BMP280 test"));
  unsigned status;
  //status = bmp.begin(BMP280_ADDRESS_ALT, BMP280_CHIPID);
  status = bmp.begin();
  if (!status) {
    Serial.println(F("Could not find a valid BMP280 sensor, check wiring or "
                      "try a different address!"));
    Serial.print("SensorID was: 0x"); Serial.println(bmp.sensorID(),16);
    Serial.print("        ID of 0xFF probably means a bad address, a BMP 180 or BMP 085\n");
    Serial.print("   ID of 0x56-0x58 represents a BMP 280,\n");
    Serial.print("        ID of 0x60 represents a BME 280.\n");
    Serial.print("        ID of 0x61 represents a BME 680.\n");
    while (1) delay(10);
  }
  /* Default settings from datasheet. */
  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     /* Operating Mode. */
                  Adafruit_BMP280::SAMPLING_X2,     /* Temp. oversampling */
                  Adafruit_BMP280::SAMPLING_X16,    /* Pressure oversampling */
                  Adafruit_BMP280::FILTER_X16,      /* Filtering. */
                  Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
}

void loop() {
    Serial.print(F("Temperature = "));
    Serial.print(bmp.readTemperature());
    Serial.println(" *C");

    Serial.print(F("Pressure = "));
    Serial.print(bmp.readPressure());
    Serial.println(" Pa");
    Serial.print(F("Approx altitude = "));
    Serial.print(bmp.readAltitude(1013.25)); /* Adjusted to local forecast! */
    Serial.println(" m");

    Serial.println();
    delay(2000);
}

Upload kode di atas ke ESP32,  buka serial monitor maka hasilnya akan seperti gambar di bawah ini.

Saya pastikan gagal seperti gambar di atas 🤣🤣🤣, ya gak apa-apa lah, belajar dari kesalahan

Hasil pada serial monitor tersebut dikarenakan SensorId BMP280 salah

SensorID untuk jenis BMP280 adalah 0x76

Ubah kode status = bmp.begin(); menjadi status = bmp.begin(0x76);

Upload ulang kode yang sudah dirubah menjadi status = bmp.begin(0x76);

Maka hasil outputnya akan menjadi seperti gambar di bawah

ESP32 akan menampilkan data suhu, tekanan udara/atmosfir, dan ketinggian yang didapatkan dari sensor BMP280

PROGRAM KEDUA – MENGAKTIFKAN ALARM DENGAN MEMANFAATKAN DATA SUHU DARI SENSOR BMP280

Pada percobaan kali ini, kita akan memodifikasi program di atas dengan sedikit penambahan aksi dan hanya menggunakan data suhunya saja. Intinya alarm akan berbunyi jika suhu berada di atas 35 derajat.

Rangkailah ESP32 dengan BMP280 dan Passive Buzzer seperti gambar di bawah

Untuk wire BMP280 masih sama seperti project sebelumnya, dan untuk Passive Buzzer, hubungkan pin i/o ke ESP32 D2

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BMP280.h>

#define BMP_SCK  (13)
#define BMP_MISO (12)
#define BMP_MOSI (11)
#define BMP_CS   (10)

const int buz = 2;
Adafruit_BMP280 bmp;

void setup() {
  Serial.begin(9600);
  pinMode(buz, OUTPUT);
  while ( !Serial ) delay(100);
  Serial.println(F("BMP280 test"));
  unsigned status;
  status = bmp.begin(0x76);
  if (!status)
  {
    Serial.println(F("Could not find a valid BMP280 sensor, check wiring or "
                      "try a different address!"));
    Serial.print("SensorID was: 0x");
    Serial.println(bmp.sensorID(),16);
    Serial.print("ID of 0xFF probably means a bad address, a BMP 180 or BMP 085\n");
    Serial.print("ID of 0x56-0x58 represents a BMP 280,\n");
    Serial.print("ID of 0x60 represents a BME 280.\n");
    Serial.print("ID of 0x61 represents a BME 680.\n");
    while (1) delay(10);
  }

  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     /* Operating Mode. */
                  Adafruit_BMP280::SAMPLING_X2,     /* Temp. oversampling */
                  Adafruit_BMP280::SAMPLING_X16,    /* Pressure oversampling */
                  Adafruit_BMP280::FILTER_X16,      /* Filtering. */
                  Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
}


void loop() {
    Serial.print(F("Temperature = "));
    Serial.print(bmp.readTemperature());
    Serial.println(" *C");

    if(bmp.readTemperature() > 35)
    {
      alarmOn();
    }

    Serial.println();
    delay(100);
}

void alarmOn() 
{
  for(int x = 0; x<4; x++)
  {
    tone(buz, 784);
    delay(150);
  }
  noTone(buz);
  delay(200);
}

Upload kode di atas ke ESP32, jika berhasil hasilnya akan seperti video di bawah ini

Sound Up untuk mendengarkan buzzernya

Dari video di atas dapat dijelaskan, yang ditampilkan di serial monitor adalah suhu yang ditangkap oleh BMP280, jika suhu melebihi 35 derajat, maka akan mengaktifkan passive buzzer dan akan berhenti berbunyi jika suhu yang ditangkap sensor BMP280 sudah di bawah 35 derajat.

Contoh program ini bisa dikembangkan dengan aktuator yang lain, misalnya untuk mendeteksi panas berlebih, maka bisa untuk menghidupkan kipas sehingga bisa terjadi sistem kontrol otomatis.

Sekian tutor kali ini, semoga bermanfaat, see u …