Adafruit’s BMP280 Barometric Sensor Testing

Project #4: Experiment with External Sensor System

Leony Angela
6 min readFeb 20, 2021

Halo semua! Setelah kemarin sudah membahas dan mencoba-coba sensor internal si ESP32nya, aku ingin membahas tentang sensor lagi. Eits, tapi tenang.. kali ini aku akan bereksperimen menggunakan sensor external yang gak kalah keren!

Sebelumnya, kenalin lagi aku Leony dari Sistem dan Teknologi Informasi ITB. Tulisan ini aku buat untuk sharing pengalaman aku dalam mengerjakan project-project untuk matkul II260 — Embedded Systems ya..

Sebelumnya aku tidak menjelaskan secara singkat apasih sensor itu. Jadi, Sensor adalah sebuah sistem/benda yang bisa memahami kondisi yang terjadi di lingkungannya untuk membantu kita memperoleh informasi.

Nah, di dalam Sistem Embedded, ternyata ada juga sensor untuk mendeteksi kondisi lingkungannya. Untuk jenisnya sendiri sangat beragam. Pada project ini, sensor yang digunakan mampu mendeteksi temperatur, tekanan, ataupun kelembaban. Jadi, kami diberikan 5 options dan memilih setidaknya 1 sensor untuk di eksplorasi. Tapi kalo temen-temen punya 5"nya gapapa kalo mau eksplorasi semuanya 😅 Sensor yang disarankan adalah BMP180, BMP280, BME280, DHT11/DHT22, dan MPU-6050.

Aku menggunakan BMP280 Barometric Sensor. Seperti yang terlihat, sensor yang aku gunakan sedikit berbeda dari module yang ada di randomnerdtutorials, yaitu BMP180. Jadi BMP280 adalah versi upgrade nya dari BMP180. Mungkin kalo temen-temen mau tau lebih lanjut bedanya, bisa googling ya!

Langsung aja yuk!

Komponen yang dibutuhkan untuk mengerjakan Project #4:

  • Arduino IDE
  • ESP32 Development Board
  • Jumper Wires
  • BMP280 Barometric Sensor
  • Breadboard (Optional)

Preparation

Sedikit berbeda, biasanya kita bisa langsung rangkai dan compile program yang kita buat di Arduino IDE. Tapi, disini kita akan menginstalasi Library untuk sensor kita nih!

  1. Library di Arduino IDE dapat ditemukan dengan membuka Sketch > Include Library > Manage Libraries.

2. Cari “BMP280” dan lakukan instalasi terhadap Library yang sesuai.

3. Restart Ardino IDE desktopnya

Skema Rangkaian

Kode Program

1. BMP280 Source Code

Kodenya bisa diakses di Examples > Adafruit BMP280 Library > BMP280 test. Pastikan sudah install Library BMP280nya dahulu.

/* This is a library for the BMP280 humidity, temperature & pressure sensorDesigned 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*/
#KODE PROGRAM#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); //set up serial monitor
Serial.println(F("BMP280 test"));
if (!bmp.begin(0x76)) { //alamat sensor yang dideteksi ESP32 : 0x76
Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
while (1);
}
/* 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(1010.25));
Serial.println(" m");
Serial.println();
delay(2000);
}
  • #include <Wire.h>,<SPI.h>, dan <Adafruit_BMP280.h> → mengimport Library-Library yang dibutuhkan
  • if (!bmp.begin(0x76) → alamat I2C dari sensor yang dideteksi ESP32 adalah 0x76
  • bmp.readTemperature() → metode yang digunakan untuk mengetahui temperatur yang dibaca oleh sensor
  • bmp.readPressure() → metode yang digunakan untuk mengetahui tekanan atmosfer yang dibaca oleh sensor
  • bmp.readAltitude()→ metode yang digunakan untuk mengetahui ketinggian dpl yang dibaca oleh sensor

2. I2C Scanner Code to find the I2C address of the sensor

#include <Wire.h> //include Wire.h library

void setup(){
Wire.begin(); // Wire communication begin
Serial.begin(9600); // Serial monitor baud rate is set in 9600
while (!Serial); // Waiting for Serial Monitor
Serial.println("\nI2C address Scanner CircuitSchools.com");
}

void loop()
{
byte error, address; //variable for error and I2C address
int devicecount;

Serial.println("Scanning...");

devicecount = 0;
for (address = 1; address < 127; address++ ){
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();

if (error == 0){
Serial.print("I2C device found at address 0x");
if (address < 16)
Serial.print("0");
Serial.print(address, HEX);
Serial.println(" !");
devicecount++;
}
else if (error == 4)
{
Serial.print("Unknown error at address 0x");
if (address < 16)
Serial.print("0");
Serial.println(address, HEX);
}
}
if (devicecount == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");

delay(5000); // wait 5 seconds for the next I2C scan
}

Eksperimen dan Demo

Hasil pembacaan sensor :

Kondisi sesungguhnya :

1. Altitude

altitude berdasarkan Google Earth disekitar lokasi aku

2. Atmospheric Pressure → Mengkonversikan 1 milibar (mb) = 100 Pa

tekanan atmosfer berdasarkan data https://www.accuweather.com/id/id/tangerang-selatan/3430611/current-weather/3430611

3. Temperature

Disini, temperatur nya sedikit berbeda karena kondisi sensor berada didalam ruangan dan juga terpengaruh faktor lainnya ketika mendeteksi suhu.

Kesimpulan

Dalam mengerjakan module ini, awalnya aku bingung karena external sensor yang digunakan berbeda dengan yang ada di module sehingga harus melakukan beberapa modifikasi. Pada saat memodifikasi mandiri, ada beberapa kendala yang aku alami, seperti :

  • Output pada Serial Monitor Kosong. Kalimat “Could not find a valid bmp 280 sensor, check wiring.” tidak muncul seperti error-error yang ditemukan orang pada umumnya.
  • Terlihat beberapa simbol-simbol acak pada Serial Monitor.

Ketika itu terjadi, aku akhirnya mengecek apakah ada masalah dengan Serial Monitornya, dengan melakukan testing Touch Sensor. Ternyata tidak ada kendala pada Serial Monitornya. Akhirnya aku bertanya kepada salah satu teman mengenai ini dan ternyata aku kurang teliti membaca spesifikasinya, bahwa BMP280 barometric sensor menggunakan I2C communication protocol. Meskipun sudah menghubungkan ESP32 dengan SDA dan SCL, ternyata masih tidak berhasil.

Kemudian aku disarankan untuk menyelesaikan permasalahan yang aku alami, aku perlu mencari alamat I2C dari sensor menggunakan kode program I2C scanner, dan didapat 0x76.

Kemudian, aku memasukan 0x76 ke bmp.begin() agar alamat sensor bisa dideteksi dan berhasil mencetak informasi yang didapat di Serial Monitor.

Leony Angela

18219032

Referensi yang digunakan dalam mengerjakan Project #4

https://randomnerdtutorials.com/esp32-with-bmp180-barometric-sensor/

https://www.circuitschools.com/interfacing-bmp280-with-esp-32-on-i2c-with-errors-and-solutions/

http://www.esp32learning.com/code/esp32-and-bmp280-sensor-example.php

--

--