Project #4 Advanced Sensor: ESP32 Eksternal Sensor

Hughie Raymonelika
5 min readFeb 23, 2022

--

Holaa! Kembali lagi bersama saya di project ESP 32! Masih ingat kan minggu lalu kita mempelajari tentang sensor yang terdapat pada ESP 32? Yap, betul sekali. Pada ESP 32 sudah terdapat sensor bawaan yaitu touch sensor, hall effect sensor, dan temperature sensor. Buat kalian yang baru pertama kali membaca tulisan ini atau pengen tau project-project sebelumnya boleh banget buat liat-liat project minggu lalu disini.

Setelah mengenal internal sensor yang ada pada ESP 32, muncul pertanyaan di benak saya “Apakah ESP 32 hanya terbatas pada internal sensor?” lalu “Bagaimana jika ingin menambahkan fitur/sensor lain dalam ESP 32 ini?”

Gambar 1: BMP-280. Sumber: images.google.com

Nah dari ide pikiran itulah yang membuat saya semakin penasaran untuk terus bereksplorasi. Pada kesempatan ini saya akan mencoba menghubungkan ESP 32 dengan sensor eksternal yaitu BMP-280 (Barometric Pressure Sensor). Sesuai dengan namanya, BMP-280 ini dapat melakukan beberapa pengukuran seperti mengukur tekanan, temperatur, dan approx altitude (ketinggian). Ps: iya ga salah kokk. Memang secanggih itu alat kecil dengan harga satu dollar ini (awalnya aku juga kaget). Oke tanpa berlama-lama lagi mari kita mulai projectnya! Let’s go!

— Alat dan Bahan

  1. ESP 32 DOIT DEVKIT V1.
  2. GY-BMP-280 (soldered).
  3. Kabel Micro USB 2.0.
  4. Kabel Jumper Male to Male.
  5. Breadboard 830 Point.
  6. Arduino IDE (saya pribadi menggunakan versi 2.0.0-rc3).

— Pendahuluan

Sebelum kita memulai project ini ada beberapa requirement yang harus dipenuhi yaitu melakukan instalasi library yang bernama Adafruit BME280. Fungsi dari library ini yaitu sebagai jembatan sensor kita untuk berkomunikasi dengan ESP 32. Petunjuk instalasinya sebagai berikut:

  1. Buka library (Sketch > Include Library > Manage Libraries) atau dengan shortcut Ctrl+Shift+I. Lalu ketikkan Adafruit BME280.
(Sketch > Include Library > Manage Libraries…)

2. Akan muncul tampilan seperti ini lalu klik Install.

Klik Install dan tunggu proses instalasinya

3. Jika muncul prompt seperti ini klik saja Install All.

Klik Install All

4. Jika pada output muncul seperti ini maka proses instalasi sudah berhasil.

Proses Instalasi Berhasil

— Main Project

Setelah selesai menginstall library BMP-280, saatnya kita eksekusi. Di project ini kita akan melakukan beberapa pengukuran yaitu tekanan, temperatur, dan approx altitude (ketinggian). Rangkaian yang akan kita buat kali ini kurang lebih sebagai berikut.

Ilustrasi Rangkaian

Untuk menghubungkan antarpinout kabel pada BMP-280 dan ESP 32 disesuaikan dengan port berikut.

Pinout Kabel BMP 280 dan ESP 32

— Kode Program

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#define BMP_SCK 13
#define BMP_MISO 12
#define BMP_MOSI 11
#define BMP_CS 10
Adafruit_BMP280 bme; // I2C
//Adafruit_BMP280 bme(BMP_CS); // hardware SPI
//Adafruit_BMP280 bme(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);
void setup() {
Serial.begin(115200);
Serial.println(F("BMP280 test"));
if (!bme.begin(0x76)) {
Serial.println("Could not find a valid BMP280 sensor, check wiring!");
while (1);}
}
void loop() {
Serial.print("Temperature = ");
Serial.print(bme.readTemperature());
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(bme.readPressure());
Serial.println(" Pa");
Serial.print("Approx altitude = ");
Serial.print(bme.readAltitude(1013.25));
Serial.println(" m");
Serial.println();
delay(1000);
}

— Detail Kode Program

Mari kita bedah kode programnya satu-per satu!

  1. Include Library
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#define BMP_SCK 13
#define BMP_MISO 12
#define BMP_MOSI 11
#define BMP_CS 10
Adafruit_BMP280 bme; // I2C
//Adafruit_BMP280 bme(BMP_CS); // hardware SPI
//Adafruit_BMP280 bme(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);

Pertama-tama kita panggil terlebih dahulu library yang akan digunakan. Library wire untuk menggunakan I2C dan library Adafruit_Sensor dan Adafruit_BME280 berfungsi sebagai interface dengan sensor BMP-280. Kemudian kita definisikan (ini by default aja yaa).

2. Setup Port

void setup() {
Serial.begin(115200);
Serial.println(F("BMP280 test"));

Di dalam void setup terdapat Serial.begin yang bertujuan untuk menentukan kecepatan pengiriman dan penerimaan data melalui port serial. Dalam kasus ini saya menuliskan “Serial.begin(115200)”, dengan demikian kecepatan yang kita gunakan adalah 115200bit per detik. Kemudian Serial.println berfungsi untuk mengirimkan data ke port serial.

if (!bme.begin(0x76)) {
Serial.println("Could not find a valid BMP280 sensor, check wiring!");
while (1);}
}

Setelah itu saya melakukan inisiasi fungsi bme.begin(0x76) yang bertujuan untuk mengambil alamat I2C modul sebagai nilai parameter. Fungsi ini menginisialisasi alamat interface I2C untuk melakukan soft-reset (kalibrasi) yang bertujuan agar memastikan chip telah terpasang dengan benar.

3. Looping Module

void loop() {
Serial.print("Temperature = ");
Serial.print(bme.readTemperature());
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(bme.readPressure());
Serial.println(" hPa");
Serial.print("Approx altitude = ");
Serial.print(bme.readAltitude(1013.25));
Serial.println(" m");
Serial.println();
delay(1000);
}

Pada looping module, ada beberapa fungsi yang saya panggil di antaranya:

  1. bme.readTemperature: membaca suhu dalam satuan Celcius.
  2. bme.readPressure: membaca tekanan dalam satuan hPa.
  3. bme.readAltitude: membaca ketinggian dari permukaan laut dalam satuan meter.

Pada pembacaan altitude terdapat nilai yang saya assign yaitu 1013.25. Nilai tersebut adalah variabel SEALEVELPRESSURE_HPA. Variabel ini adalah nilai tekanan pada permukaan laut dengan satuan hektopascal (setara dengan milibar). Variabel ini digunakan untuk memperkirakan ketinggian terhadap tekanan yang diberikan lalu membandingkannya dengan tekanan pada permukaan laut.

— Demo Program

Berikut terlampir video demo program dan screenshot tampilan dari Serial Monitor dengan 115200 baud.

Video 1: Demo Project External Sensor
Tampilan yang muncul pada Serial Monitor

— Analisis Masalah

Pada project external sensor kali ini saya sempat mengalami beberapa kendala seperti tidak terbacanya sensor dan sempat beberapa kali pop-up error. Namun setelah mencoba mencari di beberapa artikel dan referensi lain saya mendapati bahwa error tersebut terjadi karena pemasangan kabel pinout yang keliru. Tidak berhenti sampai disitu saja, saya juga mengalami kendala setelah kode program dicompile ternyata Serial monitor tidak menunjukkan hasil yang saya inginkan. Setelah melakukan hard-reset via RTS akhirnya masalah tersebut berhasil diatasi.

Awalnya saya merasa ragu karena sensor BMP-280 yang saya miliki ini tergolong cukup murah dibandingkan dengan sensor BME-280 yang selisih harganya mencapai 10 kali lipat. Akan tetapi setelah saya mencoba dan melakukan hands-on, impresi saya terhadap alat ini sangat baik karena sensor dapat mendeteksi perubahan, tidak seperti internal sensor kemarin yang nilainya konstan. Meskipun demikian, saya juga merasa bahwa pembacaan yang dilakukan oleh sensor ini tidak begitu akurat (yah ada harga ada barang hehehe).

— Penutup

Overall saya cukup puas dengan project external sensor kali ini dan dapat menghilangkan rasa penasaran tentang sensor temperature yang minggu lalu “gagal”. Saya berharap di project-project yang akan datang saya dapat mencoba menggabungkan beberapa sensor sehingga tercipta fungsionalitas yang memiliki nilai guna. Terima kasih sudah membaca dan sampai berjumpa di project selanjutnya yaa! See you!

--

--

No responses yet