ESP32 | Project VI: Communication Protocol and Bus Interface

Ega Stephanie
3 min readMar 5, 2021

--

Assalamualaikum Wr. Wb. semua, nama saya Ega dan pada project kali ini saya akan membahas tentang ESP32 Communication Protocol — Integrating Multiple Devices. Sama seperti project external sensors, saya akan menggunakan sensor BME280 untuk melakukan pembacaan suhu, tekanan, dan kelembapan namun kali ini hasil pembacaannya akan ditampilkan lewat OLED Display.

Tentang ESP32 I2C Communication Protocol

ESP32 dapat berkomunikasi antar ESP32 dengan berbagai macam protokol komunikasi, bisa dengan UART, SPI, I2C. I2C adalah standar komunikasi serial dua arah menggunakan dua saluran yang didisain khusus untuk mengirim maupun menerima data. Sistem I2C terdiri dari saluran SCL (Serial Clock) dan SDA (Serial Data) yang membawa informasi data antara I2C dengan pengontrolnya. Piranti yang dihubungkan dengan sistem I2C Bus dapat dioperasikan sebagai Master dan Slave. Master adalah piranti yang memulai transfer data pada I2C Bus dengan membentuk sinyal Start, mengakhiri transfer data dengan membentuk sinyal Stop, dan membangkitkan sinyal clock. Slave adalah piranti yang dialamati master.

I2C, SPI, UART Connection Diagram
I2C Master-Slave

Pada project ini kita akan mengintegrasi ESP32, sensor BME280, dan OLED Display. Karena OLED dan BME280 memiliki alamat yang berbeda, kita dapat menggunakan jalur SDA dan SCL yang sama tanpa masalah. Alamat tampilan OLED adalah 0x3C dan alamat BME280 adalah 0x76. Namun apabila kita mau menggunakan Multiple I2C devices dengan alamat yang sama maka kita harus mengganti alamat I2C dari device tersebut atau menggunakan I2C multiplexer. Tutorialnya ada di https://randomnerdtutorials.com/esp32-i2c-communication-arduino-ide/.

Multiple I2C devices (same bus, different addresses)

Melakukan pembacaan sensor BME280 kemudian hasilnya ditampilkan di OLED Display.

Komponen dan Perangkat yang digunakan

  1. ESP32 Board
  2. OLED Display
  3. Sensor BME280
  4. Jumper Wires
  5. Kabel MicroUSB
  6. Laptop

Prasyarat

Install beberapa library yang bisa didapatkan di Sketch > Include Library > Manage Libraries yaitu:

  • Adafruit BME280 Library
  • Adafruit Unified Sensor
  • Adafruit_SSD1306 Library
  • Adafruit_GFX Library

Skema Rangkaian

Skema Rangkaian

Program

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

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

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

Adafruit_BME280 bme;

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

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

bool status = bme.begin(0x76);
if (!status) {
Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1);
}

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

void loop() {
display.clearDisplay();
// display temperature
display.setTextSize(1);
display.setCursor(0,0);
display.print("Temperature: ");
display.setTextSize(2);
display.setCursor(0,10);
display.print(String(bme.readTemperature()));
display.print(" ");
display.setTextSize(1);
display.cp437(true);
display.write(167);
display.setTextSize(2);
display.print("C");

// display humidity
display.setTextSize(1);
display.setCursor(0, 35);
display.print("Humidity: ");
display.setTextSize(2);
display.setCursor(0, 45);
display.print(String(bme.readHumidity()));
display.print(" %");

display.display();

delay(1000);
}

Bagian setup cukup krusial disini sebab mengeset alamat dari kedua device.

Eksperimen

  1. Pertama-tama rangkai dahulu sesuai dengan skema.
Begitu banyak kabel…

2. Upload program, jangan lupa pencet tombol boot.

3. Selesai, kini pembacaan suhu, kelembapan, dan tekanan berada di OLED Display.

Taraa

Analisis

Pada project ini saya banyak melakukan bongkar pasang kabel. Hal ini dikarenakan terlalu banyak yang harus dihubungkan (Hiperbola). Awal mengupload program, tidak tampak apapun di OLED Display, hanya gambar lambang konoha bekas project kemarin. Kemudian saya melakukan tes pada masing — masing device dengan mengupload program yang pernah saya coba sebelumnya (Hello World program untuk OLED dan looping pembacaan suhu untuk BME280) untuk memastikan apakah salahnya di device atau di wiring atau dimana. Setelah keduanya bekerja baru saya gabungkan lagi dan upload ulang program saya. Berhasil! untuk masalah di awal… saya juga gatau kenapa bisa gak jalan padahal sama aja. Mungkin wiringnya kali ya kurang mantap atau mungkin tertukar antara SDA dan SCL karena ada 4 yang harus dihubungkan.

Video Eksperimen

Thank you

Ega Stephanie

18219041

--

--

No responses yet