ESP32 with Multiple I2C Devices

Kirana Shely Sefiana
3 min readMar 21, 2022

--

Hello, Readers! Kembali lagi di project ESP32. Kali ini saya akan membuat project ESP32 yang dihubungkan dengan beberapa device menggunakan I2C Serial Communication Protocol. Dalam mencoba protokol I2C ini saya akan menggunakan ESP32, BMP280, dan OLED Display.

Prerequisites

  1. ESP32
  2. Micro USB Cable
  3. Male-to-Male Jumper
  4. BMP280 Sensor
  5. OLED Display 128x64
  6. Breadboard

Schematic Diagram

Sebelum memulai percobaan, pertama-tama akan disusun skema diagram untuk komponen-komponen diatas. Berikut gambar skema diagram untuk percobaan ini.

Dalam pemasangan komponen ini, intinya VCC di sambungkan ke 3V3, GND ke GND, lalu SDA dan SCL disambungkan ke pin yang dipilih. Untuk rangkaian ini SDA ke pin 21 dan SCL ke pin 22. Kemudian setelah disambungkan rangkaian nya akan terlihat seperti ini.

Rangkaian Komponen

Program Code

Setelah selesai merangkai, mulailah untuk membuat kode program pada Arduino IDE. Pastikan sebelum memulai percobaan anda sudah pernah men-install library BMP280 dan Adafruit untuk keperluan display OLED. Jika belum anda bisa mencoba masing-masing komponen di tutorial sebelumnya. (Tutorial BMP280 dan Display OLED).

Kemudian untuk percobaan ini saya menggunakan code yang tertera pada referensi. Berikut kode yang akan digunakan untuk percobaan ini.

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
Adafruit_BMP280 bmp; // I2C
void setup() {
Serial.begin(115200);
// inisialisasi alamat bme280
bmp.begin(0x76);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed or couldn't find a valid bme280"));
for(;;);
}
delay(2000);
display.clearDisplay();
display.setTextColor(WHITE);
}
void loop() {
delay(5000);
//read temperature and humidity
float t = bmp.readTemperature();
float h = bmp.readPressure();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from bmp sensor!");
}
// clear display
display.clearDisplay();

// display temperature
display.setTextSize(1);
display.setCursor(0,0);
display.print("Temperature: ");
display.setTextSize(2);
display.setCursor(30,10);
display.print(t);
display.print(" ");
display.setTextSize(1);
display.cp437(true);
display.write(167);
display.setTextSize(2);
display.print("C");

// display pressure
display.setTextSize(1);
display.setCursor(0, 35);
display.print("Pressure: ");
display.setTextSize(2);
display.setCursor(30, 45);
display.print(h/1000);
display.print("kPa");

display.display();
}

Saya juga menyesuaikan kode ini dengan spek komponen yang digunakan. Untuk OLED di sini digunakan ukuran 128x64.

Jika sudah, kemudian compile dan uplode kode program ini ke ESP32. Jangan lupa untuk menekan tombol Boot. Jika sudah maka pada display OLED akan muncul pembacaan sensor. Berikut hasil percobaan yang saya lakukan.

Hasil percobaan

Problems

Pada akhirnya saya berhasil dalam melakukan percobaan ini. Namun, ada beberapa kendala yang saya alami. Pada pin komponen OLED saya tidak tersolder dengan baik sehingga OLED tidak bisa bekerja dengan sempurna. Komponen nya pun menjadi panas saat disambungkan ke laptop oleh USB cable. Karena hal ini saya harus mensolder ulang komponen OLED saya agar bisa berjalan dengan baik.

Sekian project kali ini. Semoga artikel ini bermanfaat. Tetap semangat!

References :

--

--

Kirana Shely Sefiana
0 Followers

Information System & Technology Student