ESP32 Project 6 - Serial Communication
Hallo semuanyaa, jumpa lagi, pada project sebelumnya kita telah berhasil membaca hasil sensor suhu dan kelembapan dari BMP180 (bisa lihat disini) dan juga berhasil menampilkan tulisan atau animasi pada display OLED 0.96” (bisa lihat disini). Jadii, di project enam ini kita akan menggabungkan keduanya yaitu suatu sistem embedded berbasis ESP32 untuk membaca informasi lingkungan dengan sensor BMP180 dan menampilkannya secara realtime melalui display OLED 0.96” menggunakan komunikasi serial I2C. Referensi yang digunakan adalah https://randomnerdtutorials.com/esp32-i2c-communication-arduino-ide/.
Komponen
Komponen yang digunakan adalah
- Board ESP32
- Sensor BMP180
- Layar OLED 0.96”
- Breadboard
- Kabel Jumper
Rangkaian

Terdapat tida metode komunikasi standar yang umum digunakan pada mikrokontroller, yaitu sebagai berikut:
- UART, Komunikasi serial dua arah bersifat asinkron artinya tidak butuh sinyal clock, metode ini sangat sederhana karena hanya membutuhkan dua kabel utama yaitu pin Tx (pengirim) yang dihubungkan ke Rx (penerima). Namun metode ini yang paling lambat, dan terbadat pada 1 device yang terhubung ke microkontorller.
- SPI, komunikasi sinkron berkecepatan tinggi dengan sistem Master-Slave. Membutuhkan empat kabel utama (SCLK, MOSI, MISO, dan SS) dan memungkinkan pengiriman serta penerimaan data secara bersamaan (full duplex). Namun ini juga memiliki batasan secara praktik terhadap jumlah devices pada mikrokontrollernya.
- I2C, komunikasi sinkron yang ringkas karena hanya menggunakan dua kabel (SCL untuk clock dan SDA untuk aliran data). Pengaturannya juga menggunakan sistem Master-Slave, dimana setiap slave diberi alamat unik agar tidak tertukar saat master mengirmkan perintah. Komunikasi ini lebih cepat dibanding UART namun tidak secepat SPI, namun mudah digunakan untuk banyak devices/sensor yang digunakan.
Pada project kali ini, kita gunakan metode I2C, dengan rancangan rangkaian yang digunakan adalah sebagai berikut:

Sebagai catatan untuk kabel GND dan kabel 3V3 terlihat di rancangan agak berjauhan hal ini mengakibatkan baik display dan sensor tidak bekerja dengan baik, sehingga peletakan pin nya dibuat berdekatan terlihat dari gambar hasil rangkaian yang telah dilakukan berikut:

Code
Jika teman2 langsung lompat pada project enam ini, ada beberapa library yang perlu diinstall, tata cara installnya ada pada project sebelumnya ya. Library yang perlu diinstall yaitu:
- Adafruit BMP085
- Adafruit SSD1306
- Adafruit GFX Library
Kode yang digunakan adalah sebagai berikut:
#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// Deklarasi ukuran layar OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define SCREEN_ADDRESS 0x3C
// Inisialisasi objek layar OLED dan Sensor
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
Adafruit_BMP085 bmp;
void setup() {
Serial.begin(115200);
// Memulai layar OLED di alamat I2C SCREEN_ADDRESS
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("Gagal menemukan layar OLED"));
for(;;); // Berhenti di sini jika layar gagal
}
// Membaca sensor BMP180
if (!bmp.begin()) {
Serial.println(F("Gagal menemukan sensor BMP180, periksa kabel!"));
while (1) {} // Berhenti di sini jika sensor gagal
}
// Membersihkan memori layar saat pertama kali menyala
display.clearDisplay();
display.setTextColor(WHITE);
}
void loop() {
// Mengambil data dari sensor
float suhu = bmp.readTemperature();
int32_t tekanan = bmp.readPressure();
// Menyiapkan tampilan di layar OLED
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 0);
// Menulis teks ke layar
display.println("--- MONITORING ---");
display.setCursor(0, 20);
display.print("Suhu: ");
display.print(suhu);
display.println(" C");
display.setCursor(0, 40);
display.print("Tekanan: ");
display.print(tekanan);
display.println(" Pa");
// Perintah wajib untuk memunculkan teks yang sudah diset ke layar
display.display();
// Jeda 2 detik sebelum membaca ulang
delay(2000);
}
Hasil eksperimen sebagai berikut

Oke sampai sini dulu aja ya laporannya, terimakasih sudah mampir kesini!