[Embedded System, Project 4] ESP32 Sensor: External Sensor

Graciella Valeska Liander
6 min readFeb 21, 2021

--

Haloo! Kembali lagi di rangkaian [Embedded System] yang ke 4! Sebelumnya, kita sudah mencoba menggunakan ESP32 untuk berinteraksi dengan lingkungan sekitar menggunakan sensor internal. Di project kali ini, kita akan berinteraksi lagi dengan lingkungan sekitar tetapi dengan bantuan alat tambahan yang selanjutnya disebut sensor eksternal! Yeayy!

External sensor sendiri terdiri dari beberapa jenis yang fungsinya juga beda-beda. Berikut contoh-contoh komponen yang bisa digunakan berdampingan dengan ESP32.

Sensor-sensor yang dapat digunakan bersama ESP32

Nah sebelum mulai, kita kenalan dulu nih sama external sensor yang akan aku pake, yaitu BME 280. Aku beli di harga Rp47.500,- di salah satu e-commerce. Ketika aku beli, komponen BME nya terpisah antara kakinya dan sensornya. Sebelumnya, sudah diperingatkan sih oleh guruku apabila ingin membeli sensor, jangan lupa request ke penjualnya untuk disolder terlebih dahulu. Namun, sayang sekali karena aku lupa mengabari si penjual alhasil sensornya harus kusolder sendiri.

BME280 sebelum disolder

Pengalaman ini sebenarnya cukup berkesan karena ini pertama kalinya aku melihat sebuah benda di solder. Akan tetapi, aku ga berani solder sendiri jadi minta bantuan orang lain. Setelah di solder, bentuk BMEnya akan seperti ini

BME280 setelah disolder

BME 280 ini sensor yg cukup oke sih karena selain bisa ngukur suhu dan tekanan, sensor ini bisa mengukur kelembapan. Jadi, buat kamu yg pengen nyoba beragam sensor tapi ga pengen banyak alat, BME 280 bisa jadi pilihan yang paling tepat buat kamu!

— Introduction

Mirip seperti project sebelumnya, kita akan mengenali lingkungan sekitar kita menggunakan BME280 yang diintegrasikan ke ESP32. Ada beberapa hal yang akan kita uji, yaitu Tekanan, Suhu, dan Kelembapan. Pada project kali ini, kita akan beristirahat dari LED dan memperhatikan serial monitor saja.

— Tools

Karena ini sifatnya project, jadi ada beberapa komponen yang perlu disiapkan yaa!

  1. Seperti biasa, tools wajib adalah 1 buah ESP32, usahakan sudah sepaket dengan breadboardnya ya!
  2. Kabel USB (bisa pakai charger smartphone biasa).
  3. Kabel Jumper Male to Male. Jumlahnya dapat menyesuaikan, tapi di percobaan kali ini aku menggunakan 4 buah kabel jumper.
  4. BME280
  5. Laptop/ Komputer yang memiliki Arduino IDE. Jangan lupa install dan setting Ardunio IDE-mu sama seperti pada postingan sebelumnya yaa! [Embedded System, Project 1] Getting Started with ESP 32: LED Blink

— Steps

Pre-project

Di project kali ini kita akan menambahkan sebuah library yang bernama Adafruit BME280. Library ini fungsinya untuk membantu kita berkomunikasi dengan BME280. Berikut langkah installasinya. Pertama tama, pergi ke Manage Libraries dulu atau shortcut Ctrl+Shift+I

Sketch > Include Library > Manage Libraries

Selanjutnya, search adafruit BME280.

Setelah itu, klik Install dan akan keluar box seperti ini. Untuk menginstal Adafruit BME280, ternyata kita perlu bantuan library Adafruit Unified Sensor. Jadi, langsung klik Install all saja supaya tidak perlu mencarai Adafruit Unified Sensor lagi.

Setelah itu selesai~ Kita bisa langsung ke projectnya saja!

Project

— Illustration

Ilustrasi rangkaian

Gambar diatas merupakan ilustrasi rangkaian yang digunakan. Kabel-kabel yang terhubung sesuai dengan tabel berikut:

Pinout pada BME280

— Program details

Selain rangkaian, kita tentu perlu programnya juga, tadaa~

// Memanggil library yang diperlukan
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
// Mendeklarasi SEALEVELPRESSURE_HPA
#define SEALEVELPRESSURE_HPA (1013.25)
// Membuat variabel bme bertipe Adafruit_BME280
Adafruit_BME280 bme; // I2C
// Mendeklarasi sebuah variabel delayTime
unsigned long delayTime;
// Fungsi setup awal
void setup() {
Serial.begin(9600);
Serial.println(F("BME280 test"));
// Mendeklarasi sebuah boolean status
bool status;
status = bme.begin(0x76); // Apabila status tidak ditemukan, maka akan mengeluarkan alert
if (!status) {
Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1);
}
Serial.println("-- Default Test --");
delayTime = 1000;
Serial.println();
}
// Fungsi looping
void loop() {
printValues();
delay(delayTime);
}
// Fungsi tambahan
void printValues() {
Serial.print("Temperature = ");
Serial.print(bme.readTemperature());
Serial.println(" *C");

// Mengubah suhu dalam satuan Fahrenheit
Serial.print("Temperature = ");
Serial.print(1.8 * bme.readTemperature() + 32);
Serial.println(" *F");

Serial.print("Pressure = ");
Serial.print(bme.readPressure() / 100.0F);
Serial.println(" hPa");
Serial.print("Approx. Altitude = ");
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(" m");

Serial.print("Humidity = ");
Serial.print(bme.readHumidity());
Serial.println(" %");
Serial.println();
}

Pertama, kita perlu memanggil library adafruit terlebih dahulu dengan line kode berikut

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

Selanjutnya, ada beberapa fungsi bawaan Adafruit yang dapat langsung digunakan, untuk lebih lengkapnya ada di link berikut. Tapi, di blog kali ini kita akan membahas yang perlu digunakan saja ya

  1. readTemperature: membaca temperature/ suhu dalam satuan Celcius.
  2. readPressure: membaca tekanan dalam satuan hPa
  3. readAltitute: membaca ketinggian dari permukaan laut dalam satuan meter.
  4. readHumidity: membaca kelembaban sekitar dalam satuan persen.

— Analysis

Berikut adalah video demo yang saya lakukan. Namun, setelah diconvert menjadi gif ternyata jadinya pecah dan angka yang tercetak tidak jelas. Oleh karena itu, berikut aku lampirkan juga screenshot serial monitornya.

Ketika belum disentuh dengan jari:

Tampilan serial monitor sebelum disentuh oleh jari

Ketika sudah disentuh dengan jari:

Tampilan serial monitor sesudah disentuh oleh jari

Nah berdasarkan gambar tersebut, ketika sensor tidak disentuh, suhu berkisar 30℃ dan humidity sekitar 40%. Namun, ketika sensor disentuh beberapa waktu, suhunya meningkat menjadi sekitar 32℃ dan humidity sekitar 50%. Berbeda dengan pressure, tekanan tidak banyak berubah ketika sensor disentuh maupun tidak. Hal ini wajar terjadi karena ketika kita menyentuh sensor, berarti kita juga memberikan sedikit panas tubuh kita ke sensor sehingga suhunya meningkat. Selain itu juga, permukaan tangan kita juga cukup lembab dibandingkan dengan lingkungan sekitar sehingga ketika disentuh, tingkat kelembapan tentu akan meningkat juga. Namun, tekanan adalah sesuatu yang tidak bisa kita kontrol sehingga terlihat dari hasil sensornya tidak ada perubahan.

Selain itu, aku juga mencoba meniup/ menghela nafas didepan sensor. Sesuai dugaan, suhu dan humidity langsung meningkat cukup drastis. Suhu sensor mencapai sekitar 34℃ dan humidity sebesar 70%. Hal ini menunjukkan bahwa sensor benar-benar menyala.

— Possible Error

Could not find a valid BME 280

Seperti gambar terlampir, serial program tidak mendeteksi adanya BME280 yang terdeteksi. Usut punya usut, setelah aku mengubah-ubah rangkaian, aku baru menyadari bahwa kesalahannya ketika aku menghubungkan antara BME280 dan ESP32nya. Jadi, pada awalnya aku menghubungkan 3,3V pada ESP32 ke daerah positif pada breadboard, kemudian 3,3V pada BME280 juga kuhubungkan ke daerah positif pada breadboard. Begitu juga ground pada BME280 dan ESP32, keduanya aku hubungkan ke daerah negatif breadboard. Ternyata, tidak perlu dihubungkan ke daerah berkutub pada breadboard, langsung hubungkan saja antara ESP32 dan BME280nya seperti ilustrasi diatas. Yha begitulah tadinya berniat ngide tapi ternyata fail hahaha~

Hasil bacaan BME280 selalu nilai bernilai nan.

Setelah berhasil terdeteksi, ternyata errornya tidak sampai sana saja. Ada masalah lanjutan, yaitu hasil bacaan sensor selalu menunjukkan nilai nan. Hadeu. Karena aku tidak memiliki ide errornya dimana, akhirnya aku coba browsing dan ada dua dugaan masalah. Yang pertama adalah I2C sensor salah alamat dan yang kedua ada masalah pada 3,3V. Untuk mengatasi masalah ini, aku memperbaiki lagi sambungan 3,3V pada ESP32 dan BME280 serta mengganti deklarasi kode menjadi status = bme.begin(0x76). Akhirnya, solved yeay!

Hard reseting via RTS pin.

Terakhir, hard resetting via RTS pin. Jadi, programku sudah berhasil jalan, namun karena aku mencoba-coba terlalu banyak sampailah aku pada Hard resetting via RTS pin dalam jangka waktu lama alias ga berhenti-berhenti resettingnya. Lagi-lagi, setelah surfing di Google dan YouTube, aku mendapatkan saran untuk menekan tombol BOOT pada ESP32. Voila! Berhasil hehe~

— Closing

Horray, sudah sampai di akhir kata pada blog ini! Terima kasih sudah membaca sampai sini. Project 4 officially selesai. Sampai jumpa di project selanjutnya! See yoouuu

— Resources

  1. https://randomnerdtutorials.com/esp32-bme280-arduino-ide-pressure-temperature-humidity/
  2. https://forum.arduino.cc/index.php?topic=460116.0
  3. https://forum.fritzing.org/t/bme-bmp-280-sensor/6143
  4. http://adafruit.github.io/Adafruit_BME280_Library/html/class_adafruit___b_m_e280.html
  5. https://www.youtube.com/watch?v=McjIEpc26Do

--

--

Graciella Valeska Liander
Graciella Valeska Liander

Written by Graciella Valeska Liander

Exploring life through random activities

No responses yet