[ESP32 Project 4: External Sensors]

Pandu Puncak Prawira
6 min readFeb 21, 2021

--

Haaalllooo lagiii :D

Sudah kembali waktunya bagi saya untuk menulis laporan mengenai proyek ESP32 yang telah dicoba selama minggu ini dan pengalaman yang diperoleh dalam menyusun rangkaiannya. Sungguh, kali ini proyek yang diberikan bukanlah sesuatu yang menimbulkan kekesalan akibat gagal, tetapi justru menimbulkan kebahagiaan. Setelah dua minggu (iya, 2 minggu banget) berturut-turut tidak berhasil dalam menghasilkan rangkaian yang lebih kompleks dari yang diinginkan, kali ini telah sampailah kita kepada momen kebenaran. Karena pada pengalaman minggu ini, rasanya telah dapat disimpulkan apa persisnya masalah yang terjadi dengan rangkaian dan algoritma saya selama dua minggu kebelakang. Maka dari itu, berikut inilah cerita yang diperoleh dari penyusunan proyek kali ini:

Proyek keempat dari mata kuliah yang sedang saya tekuni masih melibatkan ESP32, tetapi apabila minggu lalu kita bermain-main dengan Internal Sensor, kali ini kita akan berkutat dengan External Sensor. Yang diinginkan dari proyek sekarang adalah untuk membuat rangkaian yang dapat memanfaatkan sensor eksternal dan ESP32 untuk mendeteksi suatu parameter yang mungkin ada sesuai sensor yang dipakai. Banyak sensor yang sebenarnya disarankan untuk dipakai, tetapi sensor yang akan terlibat dalam proyek minggu ini hanya satu, yaitu BMP280. BMP280 adalah environmental sensor yang dapat mendeteksi temperatur dan tekanan hingga standar deviasi 1 satuan untuk keduanya. Karena akurasinya yang tinggi inilah maka sensor ini juga dapat digunakan sebagai alat pendeteksi ketinggian dengan standar deviasi 1 meter.

Kemampuan dari BMP280 terdengar impresif, tetapi saat wujud asli dari sensor inilah baru rasanya dapat benar-benar mengapresiasi kemampuan dari sensor ini. Gambar dari sensor yang ada digunakan ada di bawah ini:

Gambar 1: Sensor BMP280 yang digunakan

Sungguh menakjubkan, bahwa sekeping alat elektronik yang lebih kecil dari jempol manusia dapat melakukan begitu banyak hal. Rasa skeptis saya pun belum sepenuhnya hilang hingga ia benar-benar menunjukkan hasil.

Kemudian untuk memanfaatkan kapabilitas dari sensor BMP280, kita akan merangkainya dengan ESP32. Pada kali ini, saya memutuskan untuk membuat dua rangkaian kembali, karena dengan pembuatan dua rangkaian ini saya dapat benar-benar menguji hipotesis saya pada proyek sebelumnya, yaitu bahwa komponen Breadboard yang digunakan memiliki kerusakan sehingga tidak dapat menghubungkan alat-alat elektronik yang terpasang kepadanya. Rangkaian tersebut adalah:

  1. Rangkaian BMP280-ESP32 dengan Breadboard
Gambar 2: Rangkaian 1

2. Rangkaian BMP280-ESP32 tanpa Breadboard

Gambar 3: Rangkaian 2

Dapat dilihat bahwa pada rangkaian yang tidak menggunakan Breadboard, ESP32 dengan sensor BMP280 terhubung secara langsung melewati jumper female -to-female. Maka dari itu, apabila rangkaian kedua berhasil sementara rangkaian kesatu gagal, maka dapat kita buktikan (meskipun tidak 100%) bahwa komponen breadboard yang digunakan rusak.

Alat dan Bahan

Alat dan Bahan yang digunakan dalam proyek kali ini adalah:

  1. ESP32
  2. Kabel Micro USB
  3. Sensor Lingkungan BMP280
  4. Breadboard (Untuk rangkaian 1)
  5. Jumper male-to-male (Untuk rangkaian 1)
  6. Jumper female-to-female (Untuk rangkaian 2)

Skema Rangkaian

Selanjutnya, skema dari rangkaian yang akan digunakan adalah:

Rangkaian 1:

Gambar 4: Skematik Rangkaian dengan Breadboard

Rangkaian 2:

Gambar 5: Skematik Rangkaian tanpa Breadboard

*Tambahan: Modul sensor BMP280 yang saya dapatkan dari internet menggunakan pin SCK (sama saja dengan SCL) dan SDI (sama dengan SDA). Perbedaannya hanyalah istilah, karena istilah-istilah tersebut tidak digunakan dalam protokol I2C.

Kedua rangkaian sebenarnya cukup mirip. Perbedaan dari keduanya hanya berasal dari metode penghubung sensor ke ESP32 yang digunakan. Rangkaian 1 menggunakan breadboard dan jumper male-to-male, sedangkan rangkaian 2 menyambungkan langsung antara sensor dengan ESP32 menggunakan jumper female-to-female. Selain itu, detail-detail kecil lainnya kurang lebih sama. VCC pada Sensor terhubung dengan pin 3.3 volt pada ESP32, GND dengan pin GND, SCL ke pin 22, dan SDA ke pin 21.

Ada alasan khusus mengapa kedua pin tersebut yang digunakan, dan alasannya adalah karena kedua pin tersebut merupakan pin default yang sesuai dalam ESP32 yang dapat menggunakan I2C device. I2C itu sendiri adalah Inter Integrated Circuit, dan ia pada dasarnya berfungsi sebagai protokol komunikasi antara master (ESP32) dengan slave(BMP280, atau komponen eksternal lainnya). SDA dan SCL itu sendiri pun tidak dapat dibalik-balik tanpa ada tambahan dalam algoritmanya, karena mereka berdua merepresentasikan aspek yang berbeda dari sensor. SCL digunakan untuk clock signal, dan SDA digunakan untuk mengirim serta menerima data. Default SCL dan SDA untuk ESP32 adalah 22 dan 21. Tentu saja, pin ini dapat diubah, dengan menggunakan baris kode:

Wire.begin(SDA, SCL); 

Tetapi pada proyek kali ini pin yang digunakan adalah pin default.

Algoritma

Algoritma yang digunakan untuk kedua rangkaian adalah:

/***************************************************************************
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);
Serial.println(F(“BMP280 test”));

if (!bmp.begin(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()); /*Mendeteksi temperatur*/
Serial.println(“ *C”);

Serial.print(F(“Pressure = “)); /
Serial.print(bmp.readPressure()); /*Mendeteksi tekanan */
Serial.println(“ Pa”);

Serial.print(F(“Approx altitude = “));
Serial.print(bmp.readAltitude(1013.25)); /* Pendeteksi ketinggian, Adjusted to local forecast! */
Serial.println(“ m”);

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

Keterangan-keterangan penting yang mungkin belum dijelaskan:

if (!bmp.begin(0x76)) {

  • Baris kode diatas diisi dengan 0x76, dan 0x76 ini adalah alamat dari sensor yang terhubung dengan ESP32.

Eksperimen dan Demo

Rangkaian kedua terbukti sukses dan dapat dijalankan, sementara itu rangkaian pertama gagal dalam mengeksekusi permintaan yang diminta.

Link Video Demo Rangkaian 2

Bukti Kegagalan:

Gambar 6: Bukti kegagalan rangkaian 1
Gambar 7: Rangkaian 1 terpasang dengan rapat
Gambar 8: Bukti keberhasilan rangkaian 2

Analisis

Dapat disimpulkan dari tujuan sampingan menggunakan dua rangkaian yaitu bahwa komponen breadboard yang digunakan kemungkinan besar sudah rusak. Hal ini merupakan sesuatu yang sangat disayangkan karena sebenarnya saya berniat untuk mengembangkan rangkaian ini lagi dengan menggunakan OLED untuk menampilkan hasil bacaan dari sensor BMP280. Tetapi dengan breadboard yang tidak bisa dan keterbatasan waktu yang ada, maka akhirnya proyek ini tidak jadi memakai OLED tersebut. Meskipun begitu, rangkaian percobaan telah sempat dibuat untuk menguji apakah kira-kira hal tersebut dapat dilakukan.

Gambar 9: Percobaan menggunakan OLED

Selain itu, telah dicoba juga berbagai perlakuan yang diniatkan untuk melihat respon yang akan diberikan oleh sensor. Perlakuan-perlakuan tersebut adalah:

  • Menaik-turunkan sensor
  • Memegang sensor dengan jari

Hasil yang dapat terlihat dari kedua perlakuan tersebut adalah timbulnya perubahan nilai yang ditunjukkan pada serial monitor. Nilai ketinggian naik saat sensor dinaikkan dan turun saat sensor berada pada posisi yang lebih rendah, sebagaimana mestinya sebuah sensor ketinggian bekerja. Lalu nilai temperatur bertambah saat sensor disentuh oleh jari manusia, dan turun saat sudah tidak disentuh. Ini menandakan bahwa rangkaian satu sudah dapat berfungsi dan memenuhi tujuan dari proyek ini, yaitu memanfaatkan sensor eksternal dengan ESP32.

Kesamaan yang mungkin menjadi hal yang menarik dari kedua perlakuan diatas adalah bahwa nilai yang ditunjukkan oleh sensor tidak langsung berubah secara instan, tanpa peduli seberapa cepat impuls yang dilakukan di perlakuan (menaikkannya cepat, mendekatkannya ke AC). Nilai yang ditunjukkan justru naik secara perlahan-lahan dalam skala tertentu sebelum akhirnya stabil pada nilai yang seharusnya ia tunjukkan. Hal ini dapat digunakan sebagai basis dasar dari satu hipotesis, yaitu:

  • Sensor BMP280 membaca nilai-nilai untuk temperatur dan ketinggian secara analog.

Karena pembacaan nilai dilakukan secara analog, maka masuk akal apabila nilai yang ditunjukkan tidak langsung tiba-tiba melonjak saat ketinggian sensor berubah tiba-tiba secara drastis.

Begitu saja untuk proyek kali ini, sekian dan terima kasih.

--

--