ESP32 Tutorial Part 6 (Multiple I2C Devices)

Ilham Alvindo Riandova
4 min readMar 6, 2021

--

Haii, balik lagi di tutorial ESP32 part 6 yaitu multiple I2C devices. Nah pada tutorial kali ini aku akan mencoba untuk memberikan tutorial tentang bagaimana cara menampilkan pembacaan temperatur, ketinggian, dan tekanan yang ada pada sensor BMP280 ke layar OLED. Nah untuk tutorialnya langsung aja cuss scroll ke bawah!

A. Komponen

  1. ESP32
  2. Arduino IDE (install library Adafruit SSD1306, Adafruit GFX library, dan Adafruit BusIO untuk OLED-nya, installasi dapat dilihat pada link ini install OLED. Untuk selanjutnya install library BMP280 pada link ini install BMP280).
  3. Breadboard
  4. Micro USB Cable
  5. Kabel jumper male to male
  6. OLED Screen 0.96 inch (128 x 64)
  7. Sensor BMP280 (6 pin)
  8. Laptop pastinya hehe

B. Skema

Untuk skema pemasangannya bisa dilihat pada gambar berikut ya!

Untuk penjelasannya,
1. Pin SDL pada OLED dihubungkan dengan pin SDL pada SENSOR
2. Pin SDA pada OLED dihubungkan dengan pin SDA pada SENSOR
3. Pin 3v3 pada OLED dihubungkan dengan pin 3v3 pada ESP32
4. Pin GND pada OLED dihubungkan dengan pin GND pada ESP32
5. Pin SDA pada OLED dihubungkan juga dengan pin GPIO21 pada ESP32
6. Pin SCL pada OLED dihubungkan juga dengan pin GPIO22 pada ESP32
7. Pin 3v3 pada SENSOR dihubungkan dengan pin 3v3 pada ESP32
8. Pin GND pada SENSOR dihubungkan dengan pin GND pada ESP32

Nah kurang lebih skemanya seperti gambar diatas ya!

C. Source Code

Untuk source code nya dapat dilihat dibawah ini ya. Source code yang bercetak tebal dan comment yang bercetak miring!

#include <Wire.h>
#include <Adafruit_GFX.h>// Memasukkan library GFX.h
#include <Adafruit_SSD1306.h>// Memasukkan library untuk OLED
#include <Adafruit_Sensor.h> // Memasukkan library untuk SENSOR
#include <Adafruit_BMP280.h>// Memasukkan library BMP280 Sensor

#define SCREEN_WIDTH 128 // Mendeklarasikan panjang layar
#define SCREEN_HEIGHT 64 // Mendeklarasikan lebar layar

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

Adafruit_BMP280 bmp;

void setup() {
Serial.begin(115200);

if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F(“SSD1306 allocation failed”));
for(;;);

/*
Setup pengaturan pada OLED*/

}

bool status = bmp.begin(0x76);
if (!status) {
Serial.println(“Could not find a valid BME280 sensor, check wiring!”);
while (1);
/*
Setup pengaturan pada SENSOR, jika sensor tidak terdeteksi maka akan muncul pesan peringatan seperti pada kalimat diatas*/

}

delay(2000);
display.clearDisplay();
display.setTextColor(WHITE);

/* Setting default untuk sensor BMP280*/
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() {
display.clearDisplay();
/*Membersihkan layar*/

// display temperature
display.setTextSize(1); // Setting ukuran tulisan menjadi 1
display.setCursor(0,0); // Set tulisan posisi (0,0) pada layar
display.print(“Temperature: “); // Menampilkan tulisan “Temperature”
display.setTextSize(1);// Setting ukuran tulisan menjadi 1
display.setCursor(75,0); // Set tulisan di posisi (75,0) pada layar
display.print(String(bmp.readTemperature())); // Membaca temperatur
display.print(“ “);
display.setTextSize(1); // Setting ukuran tulisan menjadi 1
display.cp437(true); // Extended ascii
display.write(167); //Menampilkan object “derajat”
display.setTextSize(1); // Setting ukuran tulisan menjadi 1
display.print(“C”); // Menampilan ke layar dengan satuan C
display.display(); // Menampilkan hasil ke layar
display.print(“ “);

// DISPLAY PRESSURE
display.setTextSize(1); // Setting ukuran tulisan menjadi 1
display.setCursor(0,20); // Set tulisan posisi (0,20) pada layar
display.print(“Pressure: “); // Menampilkan tulisan “Pressure”
display.setTextSize(1); // Setting ukuran tulisan menjadi 1
display.setCursor(55,20); // Set tulisan posisi (55,20) pada layar
display.print(String(bmp.readPressure())); // Membaca Pressure
display.print(“ “);
display.setTextSize(1); // Setting ukuran tulisan menjadi 1
display.print(“Pa”); // Menampilan ke layar dengan satuan C

// DISPLAY ALTITUDE
display.setTextSize(1);
display.setCursor(0,40); // Set tulisan posisi (0,40) pada layar
display.print(“Altitude: “); // Menampilkan tulisan “Pressure”
display.setTextSize(1); // Setting ukuran tulisan menjadi 1
display.setCursor(55,40); // Set tulisan posisi (55,40) pada layar
display.print(String(bmp.readAltitude(1013.25))); // Membaca Altitude
display.print(“ “);
display.setTextSize(1); // Setting ukuran tulisan menjadi 1
display.print(“m”); // Menampilan ke layar dengan satuan meter

display.display(); // Menampilkan hasil ke layar

delay(1000); // Memperbarui nilai setiap satu detik
}

Nah untuk codenya, bisa dicompile seperti itu dengan penjelasan pada setiap commentnya ya!. Pada source code diatas, kita akan menampilkan pembacaan temperature, altitude, dan pressure yang telah dibaca oleh sensor BMP280. Ketika compile berhasil, maka hasilnya akan ditampilkan pada layar OLED.

D. Hasil

Nah untuk pertama kali coba emang aku gagal menampilkankannya. Pertama hanya karena wiring sih, beberapa kabel yang aku pakai ternyata udah rusak. Akhirnya ganti kabel baru hehe.

Masalah kedua, aku sempet kaget pas tulisannya “Temperature, Pressure, dan Altitude”-nya bertumpuk pada satu baris, jadi solusinya atur posisi (x,y) pada OLED nya ya, untuk source codenya yang ini

display.setCursor(75,0); // Set tulisan di posisi (75,0) pada layar

Nah itu diatur-atur aja sesuai keinginan kita hehehe. Nah untuk permasalahannya itu aja sih, sisanya aman. Karena aku udah mulai mengerti gimana ESP32 dan sensor ini bekerja dibawah pengaturan Arduino IDE. Untuk hasilnya seperti gambar berikut ya!

Untuk video demonya dapat dilihat pada video dibawah ini ya!

Untuk itu, sekian tutorial ESP32 untuk menampilkan pembacaan sensor BMP280 ke layar OLED. Mohon maaf jika ada kesalahan dari penulis yang masih belajar ini. Terima kasih telah membaca dan sampai jumpa di lain project!! :D

References:
1. www.randomnerdstutorial.com

Best Regards,

Ilham Alvindo Riandova (18219063),
Sistem dan Teknologi Informasi,
Institut Teknologi Bandung.

--

--

Ilham Alvindo Riandova

Final year student at Institut Teknologi Bandung majoring Information System and Technology.