ESP32 : (6) Serial Communication Protocols

Alya Apriliyanti
5 min readMar 21, 2022

--

Hello, Learners!!

Selamat datang kembali ..!! Kali ini aku mau berbagi pengalamanku selama pengerjaan proyek keenam yang pastinyaa seru banget karena kita akan melakukan eksperimen yang berkaitan dengan dua proyek eksperimen sebelumnya. Sekarang, kita akan belajar tentang Serial Communication Protocols dengan menggunakan BMP280 dan OLED LCD Display.

Sebelum itu, mari kita pahami terlebih dahulu mengenai serial communication protocols. Jadi, Communication Protocols adalah media berkomunikasi beberapa device. Pada proyek sebelumnya, kita sudah mengetahui address dari OLED adalah 0x3Cdan BMP280 adalah 0x76. Kedua hal tersebut disebut sebagai communication protocol. Sedangkan, serial communication protocol adalah pendekatan yang sering digunakan device untuk berkomunikasi. Beberapa protokol komunikasi yang umum digunakan yaitu I2C, SPI, dan UART. Pada proyek kali ini, kita akan menggunakan I2C karena ESP32, OLED, dan BMP280 menGgunakan protokol I2C.

Berdasarkan gambar di atas, setiap device terhubung dengan dua garis, yaitu SDA yang merupakan media untuk mengirim dan menerima sinyal serta SCL yang merupakan media untuk melakukan track waktu (clock signal). Communication protocol ini memberikan jalan sehingga beberapa device dapat berkomunikasi. Kemudian, kita perlu bus interface agar dapat membawa pesan atau data yang ingin disampaikan device. Data tersebut akan diantar ke alamat yang sesuai baik itu alamat yang sama (jenis device sama) maupun berbeda (jenis device beda). Kali ini, kita menggunakan alamat yang berbeda karena jenis yang dipakai pun berbeda yaitu, OLED (0x3C) dan BME280 (0x76).

Pasti sudah penasaran, kan, bagaimana eksperimen dari kedua komponen tersebut? Tanpa berlama-lama lagi, yuk, kita mulai!

Persiapan

Peralatan berupa perangkat dan komponen yang dibutuhkan untuk proyek Serial Communication ini adalah:

  • Laptop/Komputer
  • Microcontroller ESP32
ESP32 DEVKIT — DOIT (30 PIN)
  • Kabel Micro USB type B
  • Breadboard
  • Kabel jumper (jumlah dan jenis disesuaikan dengan kebutuhan)
  • BMP280 Barometic Preasure Sensor
  • OLED LCD Display 0.96 inch (untuk output display)

Oke.. sebelum bener-bener mulai membuat rangkaiannya, jangan lupa kita perlu menyiapkan 3 library managernya, yaitu Adafruit BMP280 Library, Adafruit SSD1306, dan Adafruit Unified Sensor. Pada Arduino IDE klik Tools > Manage Library > Cari library.

Pertama-tama, kita rangkai terlebih dahulu komponen dan perangkat tersebut seperti gambar di bawah ini.

Berdasarkan skema tersebut, kita siapkan 8buah kabel jumper male to male, OLED Display dan BMP280. Kemudian, kita pasang OLED Display dan BMP280 ke dalam breadboard seperti pada skema di atas. Pastikan OLED Display dan BMP280 dalam keadaan telah di-solder yaa! jika belum, solder terlebih dahulu bagian kaki-kaki sensornya.

Lalu, kita hubungkan pin 3v3 pada ESP32 ke pin VCC pada BMP280. Selanjutnya, kita hubungkan pin GND pada ESP32 ke pin GND pada BMP280. Kita hubungkan juga pin GPIO21 pada ESP32 ke pin SDA pada BMP280. Terakhir, kita hubungkan pin GPIO22 pada ESP32 ke SCL pada BMP280. Kemudian, hubungkan pin-pin dalam BMP280 dengan pin-pin dalam OLED Display yang bersesuaian.

Setelah itu, langsung saja kita bentuk rangkaiannya sesuai dengan skema yang sudah kita buat. Hasil rangkaiannya seperti di bawah ini.

Untuk kodenya ada di bawah ini.

/*
Rui Santos
Complete project details at https://RandomNerdTutorials.com/esp32-i2c-communication-arduino-ide/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files.

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
*/
#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
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(;;);
}

bool status = bmp.begin(0x76);
if (!status) {
Serial.println("Could not find a valid BMP280 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(bmp.readTemperature()));
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(1);
display.setCursor(0, 45);
display.print(String(bmp.readPressure()));
display.print(" Pa");

display.display();
delay(1000);
}

Kode program yang digunakan simpel saja. Kita dapat menggunakan dan memodifikasi kode pada proyek 4 dan 5. Jika temen-temen mencoba menggunakan kode yang berasal dari rancomnerdstutorial, cek lagi yaa untuk kodenya karena yang digunakan pada website tersebut merupakan BME. BMP dan BME adalah kedua sensor yang memiliki fungsi yang berbeda.

Sensor dibiarkan

Saat sensor dibiarkan, tidak disentuh, suhu menunjukkan 29.10 ℃ dengan tekanan sekitar 93014.67 Pa.

Sensor disentuh

Saat sensor disentuh selama beberapa waktu, suhu perlahan-lahan meningkat menjadi 33.90 ℃ dengan tekanan sekitar 93042.25 Pa.

Berdasarkan percobaan tersebut, ternyata bus telah berhasil mengantarkan data dengan benar dan tepat, yeyy!!!

Selama pengerjaan proyek ini, alhamdulillah… prosesnya lancar dan berjalan dengan baik. Tidak ada kendala yang mengganggu.

Sekian sharing pengalamanku tentang proyek keenam ESP32 kali ini. Semoga bermanfaat :D

Sampai ketemu di sharing pengalaman proyek berikutnya yaa!

--

--