ESP32 Challenge #4: BMP 280 Sensor
Selamat datang di challenge ke-4! Pada challenge ini kita akan bermain dengan external sensor.
Pada challenge sebelumnya, kita telah bereksperimen menggunakan internal/built-in sensor ESP32. Nah, pada challenge kali ini kita akan mengenal lebih tentang external sensor.
Terdapat berbagai macam jenis sensor untuk penggunaan ESP32 dengan fungsi yang berbeda-beda, antara lain sensor BME 280 berfungsi untuk mengukur tekanan, temperatur dan kelembapan, sensor BMP 180 berfungsi untuk mengukur tekanan dan temperatur, sensor DHT11/DHT22 berfungsi untuk mengukur temperatur dan kelembapan, sensor MPU 6050 berfungsi untuk mengukur percepatan gravitasi dan kecepatan gerak (akselerometer dan giroskop).
Pada challenge kali ini, aku akan menggunakan sensor BMP 280. FYI, sensor BMP 280 berbeda dengan sensor BME 280 ya, guys! Jangan sampai tertukar hehe. Apa sih perbedaannya? Nah, ikutin terus sampai akhir, ya!
—
DAFTAR KOMPONEN DAN PERANGKAT
Komponen dan perangkat yang perlu disiapkan:
- ESP32 Development Board (1 buah)
- Breadboard (2 buah breadboard 400 titik) — bisa menyesuaikan, ya!
- Sensor BMP 280 (1 buah) — kalau bisa yang sudah disolderkan dan jenis sensornya bisa menyesuaikan, kok!
- Kabel male to male (4 buah)
- Micro USB Cable (1 buah)
- Laptop/komputer yang terdapat Aplikasi Arduino IDE (sudah terinstall package board ESP32).
—
DIAGRAM SKEMA
Silahkan rangkai komponen dan perangkat yang telah kalian siapkan sebelumnya seperti diagram skema berikut:
Pada skema tersebut, GPIO 22 (D22) terhubung dengan SCL sensor BMP 280, GPIO 21 (D21) terhubung dengan SDA sensor BMP 280, 3V3 terhubung dengan VCC sensor BMP 280, dan GND ESP32 terhubung dengan GND sensor BMP 280. Simple banget, ya? Pastikan kabelnya terhubung dengan baik ya, guys! Jangan sampai salah pasang karena saat di compile nanti akan error. Ohya, Micro USB Cable digunakan untuk menghubungkan ESP32 Development Board dengan komputer/laptop kalian, ya!
—
Sebelum masuk ke kode program, silahkan install library Adafruit Unified Sensor dan Adafruit BMP280 Library dengan cara pilih Sketch > Include Library > Manage Libraries.
Silahkan ketik Adafruit Unified Sensor dan install library tersebut.
Selanjutnya, search BMP 280 dan install library Adafruit BMP280 Library.
—
KODE PROGRAM
Kode program yang digunakan sebagai berikut:
/*********
Complete project details at https://randomnerdtutorials.com
*********/#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>#define SEALEVELPRESSURE_HPA (1013.25)Adafruit_BMP280 bmp;unsigned long delayTime;void setup() {
Serial.begin(9600);
Serial.println(F(“BMP280 test”));bool status; // default settings
// (you can also pass in a Wire library object like &Wire2)
status = bmp.begin(0x76);
if (!status) {
Serial.println(“Could not find a valid BMP280 sensor, check wiring!”);
while (1);
}Serial.println(“ — Default Test — “);
delayTime = 1000;Serial.println();
}void loop() {
printValues();
delay(delayTime);
}void printValues() {
Serial.print(“Temperature = “);
Serial.print(bmp.readTemperature());
Serial.println(“ *C”);
// Convert temperature to Fahrenheit
Serial.print(“Temperature (Fahrenheit) = “);
Serial.print(1.8 * bmp.readTemperature() + 32);
Serial.println(“ *F”);
Serial.print(“Pressure = “);
Serial.print(bmp.readPressure() / 100.0F);
Serial.println(“ hPa”);Serial.print(“Approx. Altitude = “);
Serial.print(bmp.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(“ m”);Serial.println();
}
Silahkan copy paste saja, ya!
Eh tapi maksud programnya apa, sih? Oke, aku coba bahas satu per satu, ya!
Keterangan program:
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
Pada awal kode program, kita akan menginclude beberapa library yang digunakan. Library wire untuk menggunakan I2C, library Adafruit_Sensor and Adafruit_BMP280 sebagai interface dengan sensor BMP280.
#define SEALEVELPRESSURE_HPA (1013.25)
Selanjutnya, kita membuat variabel dengan nama SEALEVELPRESSURE_HPA. Nah, variabel ini digunakan untuk memperkirakan ketinggian suatu tekanan dengan membandingkannya dengan tekanan permukaan laut.
Adafruit_BMP280 bmp;
Kita bisa membuat objek Adafruit_BMP280 dengan nama bmp.
unsigned long delayTime;
Dilakukan inisialisasi delayTime dengan tipe unsigned long.
void setup() {
Serial.begin(9600);
Serial.println(F(“BMP280 test”));
Pada setup, kita akan menghubungkan dengan serial monitor sehingga perlu diaktifkan menggunakan Serial.begin dan kecepatannya sebesar 9600 baud. Dengan instruksi Serial.println mencetak “BMP280 test”.
bool status;
Dilakukan inisialisasi status dengan tipe bool.
// default settings
// (you can also pass in a Wire library object like &Wire2)
status = bmp.begin(0x76);
if (!status) {
Serial.println(“Could not find a valid BMP280 sensor, check wiring!”);
while (1);
}Serial.println(“ — Default Test — “);
delayTime = 1000;Serial.println();
}
Selanjutnya, kita inisialiasi sensor dengan address 0x76 yang diassign ke variabel status. Jika tidak terbaca, maka akan muncul error message “Could not find a valid BMP280 sensor, check wiring!”. Selanjutnya akan mencentak “ — Default Test — “ dengan instruksi Serial.println dan set delayTime 1 detik.
void loop() {
printValues();
delay(delayTime);
}
Pada loop, akan memanggil prosedur printValues dan mengeset delay selama delayTime.
void printValues() {
Serial.print(“Temperature = “);
Serial.print(bmp.readTemperature());
Serial.println(“ *C”);
// Convert temperature to Fahrenheit
Serial.print(“Temperature (Fahrenheit) = “);
Serial.print(1.8 * bmp.readTemperature() + 32);
Serial.println(“ *F”);
Serial.print(“Pressure = “);
Serial.print(bmp.readPressure() / 100.0F);
Serial.println(“ hPa”); Serial.print(“Approx. Altitude = “);
Serial.print(bmp.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(“ m”);Serial.println();
}
printValues berisi perintah untuk mencetak temperatur (dalam Celcius dan Fahrenheit), tekanan dan altitude ke layar serial monitor.
- readTemperature() berfungsi untuk membaca temperatur dari sensor.
- readPressure() berfungsi untuk membaca tekanan dari sensor dalam satuan Pascal.
- readAltitude() berfungsi untuk menghitung ketinggian (dalam satuan meter) dari tekanan atmosfer yang ditentukan (dalam satuan hPa), dan tekanan permukaan laut (dalam satuan hPa).
—
EKSPERIMEN DAN DEMO
Setelah semua siap, langsung aja klik verify dan upload pada aplikasi Arduino IDE.
Lalu klik Tools > Serial Monitor untuk melihat hasil pada layar serial monitor. Jangan lupa untuk me-set kecepatan pada serial monitor 9600 baud seperti Gambar 5.
Apabila sudah benar, akan tercetak ke layar temperatur, tekanan, dan altitude seperti Gambar 6.
—
DOKUMENTASI
—
HASIL EKSPERIMEN
Pada percobaan pertama, ketika aku melakukan compile, aku mendapatkan error message “Could not find a valid sensor, check wiring!”, ternyata karena aku salah menggunakan library sensor. Awalnya aku menggunakan library BME 280 Sensor, di mana library tersebut tidak sesuai dengan sensor yang aku miliki yaitu sensor BMP 280. Oleh karena itu, aku harus menginstall Adafruit BMP280 Library.
Setelah menginstall library yang benar, akhirnya program dapat berjalan dengan baik dan mencetak temperatur, tekanan, dan altitude ke layar serial monitor.
—
ANALISIS
- Sensor BMP 280 memiliki perbedaan fungsi dengan sensor BME 280. Sensor BMP 280 hanya membaca temperatur dan tekanan yang ada pada lingkungan sekitar, sedangkan sensor BME 280 membaca temperatur, tekanan, dan kelembapan. Sebenarnya, sensor BMP 280 bisa disebut sebagai sensor BME 280 dengan harga yang lebih terjangkau dan fungsi yang sedikit lebih berbeda.
- Penggunaan library harus sesuai dengan sensor yang kita miliki. Penggunaan library yang salah akan menyebabkan munculnya error message. Sebaiknya, mencari tahu terlebih dahulu apakah sensor yang digunakan sudah benar, karena terkadang masih tertukar antara sensor BMP 280 dan BME 280.
Selamat kalian telah menyelesaikan challenge ke-4! Sampai bertemu di challenge selanjutnya!
Ohya, apabila kalian memiliki sensor jenis lain, kalian bisa mencari referensi pemakaiannya disini. Please don’t hesitate to leave a comment if you have any questions! Thank you :D