top of page

6th Project: ESP32 Serial Communication

Hai teman-teman👋🏻!!!


Setelah kemarin kita sudah mengerjakan projek ke-5 maka pada hari ini kita akan melanjutkan mengerjakan projek ke-6 yaitu Project ESP32 Serial Communication. Tanpa basa basi langsung saja kita kerjakan


Project ini menggabungkan aspek dari project kami sebelumnya, project ke-4 dan ke-5. Setelah menjelajahi berbagai jenis komunikasi serial, kita akan mempelajari penerapannya secara praktis. Meskipun kami sebelumnya telah mengerjakan protokol I2C dalam dua minggu terakhir, proyek minggu ini melangkah lebih dalam dan menambah kompleksitas dengan mendemonstrasikan cara menggunakan protokol yang sama untuk beberapa perangkat secara bersamaan, sambil memanfaatkan layar OLED dan sensor BME.


Protokol komunikasi antarmuka I2C berfungsi sebagai media yang memungkinkan beberapa perangkat untuk berkomunikasi satu sama lain. Protokol komunikasi yang umum digunakan termasuk I2C, SPI, dan UART. Namun, mengingat pengaturan proyek kami dengan ESP32, OLED, dan BME280, semuanya menggunakan protokol I2C, kami akan lebih fokus menjelaskan seluk-beluk I2C.


ESP32 memiliki 2 antarmuka bus I2C yang dapat berfungsi sebagai master atau slave. Berikut ikhtisar dukungan antarmuka I2C:


Mode standar (100 Kbit/dtk)

Mode cepat (400 Kbit/dtk)

Hingga 5 MHz, dibatasi oleh kekuatan pull-up SDA

Mode pengalamatan 7-bit/10-bit

Mode pengalamatan ganda


Saat menggunakan ESP32 dengan Arduino IDE, penetapan pin I2C default adalah:

SDA: GPIO21

SCL: GPIO22


Antarmuka bus berfungsi sebagai jalur komunikasi yang menghubungkan beberapa perangkat dalam komputer atau sistem elektronik. Hal ini memungkinkan perangkat ini untuk bertukar informasi, termasuk data, sinyal kontrol, atau sinyal lainnya, memfasilitasi kolaborasi dan interaksi dalam sistem yang lebih besar.

Biasanya, antarmuka bus terdiri dari serangkaian jalur (kabel atau jejak PCB) yang menghubungkan perangkat ini, bersama dengan aturan dan protokol komunikasi yang mengatur bagaimana data dikirim, diterima, dan diinterpretasikan di antara perangkat tersebut.


Contoh antarmuka bus yang umum digunakan termasuk Universal Serial Bus (USB), Peripheral Component Interconnect Express (PCIe), Serial Peripheral Interface (SPI), Inter-Integrated Circuit (I2C), dan banyak lagi. Setiap antarmuka bus memiliki karakteristik dan utilitasnya sendiri tergantung pada kebutuhan sistem dan perangkat yang terhubung.


Mari selidiki lebih jauh project ke-6 kami: Serial Communication!


TOOLS

  1. Laptop/PC dengan Arduino IDE

  2. ESP32

  3. Breadboard

  4. USB Cable

  5. Connector (Optional)

  6. Male-to-Male Jumper Cable

  7. Male-to-Female Jumper Cable

  8. OLED

  9. BME280


TUTORIAL

  1. Pertama-tama, Kamu perlu membuat skema seperti ini..


2. Dengan mengikuti skema diatas, maka rangkaian yang kamu buat akan tampak seperti gambar di bawah ini:


3. Setelah semuanya siap, Kamu dapat melanjutkan menulis program untuk ESP32. Berikut kodenya:

// Include library yang diperlukan

#include <Wire.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>

#include <Adafruit_Sensor.h>

#include <Adafruit_BME280.h>

// Deklarasi variabel OLED

#define SCREEN_WIDTH 128 // OLED display width, in pixels

#define SCREEN_HEIGHT 64 // OLED display height, in pixels

#define SCREEN_ADDRESS 0x3C

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

// Deklarasi variabel BME

#define BME_ADDRESS 0x76

Adafruit_BME280 bme;

void setup() {

  Serial.begin(115200);

if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {

    Serial.println(F("SSD1306 allocation failed"));

    for(;;);

  }

  

  bool status = bme.begin(BME_ADDRESS);

  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();

  // Menampilkan tulisan Temperature

  display.setTextSize(1);

  display.setCursor(0,0);

  display.print("Temperature: ");

  // Menampilkan temperature yang diukur

  display.setTextSize(2);

  display.setCursor(0,10);

  display.print(String(bme.readTemperature()));

  display.print(" ");

  // Menampilkan satuan temperature

  display.setTextSize(1);

  display.cp437(true);

  display.write(167);

  display.setTextSize(2);

  display.print("C");

  

  // Menampilkan tulisan kelembapan

  display.setTextSize(1);

  display.setCursor(0, 35);

  display.print("Humidity: ");

// Menampilkan kelembapan

  display.setTextSize(2);

  display.setCursor(0, 45);

  display.print(String(bme.readHumidity()));

  display.print(" %");

  

  display.display();

  delay(1000);

}

4. Kode yang diberikan adalah program yang dirancang untuk membaca suhu dan kelembapan menggunakan sensor BME280 dan menampilkan informasi tersebut pada layar OLED menggunakan ESP32.


Berikut Analisis kodenya:


a. Sertakan Library: Baris pertama mengimpor perpustakaan yang diperlukan untuk proyek, seperti Wire.h (untuk I2C), Adafruit_GFX.h, dan Adafruit_SSD1306.h (untuk tampilan OLED), serta Adafruit_Sensor.h dan Adafruit_BME280.h (untuk sensor BME280).


b. Deklarasi Variabel OLED: Di sini, ukuran layar OLED (128x64 piksel) dan alamat I2C-nya (0x3C) dideklarasikan. Objek kelas Adafruit_SSD1306 juga dibuat menggunakan variabel SCREEN_WIDTH, SCREEN_HEIGHT, dan Wire (mewakili I2C) untuk menginisialisasi tampilan.


c. Deklarasi Variabel BME: Alamat I2C dari sensor BME280 (0x76) dideklarasikan di sini. Objek kelas Adafruit_BME280 juga dibuat menggunakan variabel bme.


d. Fungsi Pengaturan: Di dalam fungsi setup(), Serial diinisialisasi dengan baud rate 115200 untuk tujuan debugging. Kemudian, tampilan OLED diinisialisasi dengan memanggil fungsi Begin() dari objek tampilan. Jika inisialisasi tampilan gagal, pesan kesalahan akan ditampilkan melalui Serial Monitor. Selanjutnya sensor BME280 diinisialisasi dengan memanggil fungsi Begin() pada objek bme. Jika sensor tidak terdeteksi maka akan muncul pesan error melalui Serial Monitor. Terakhir, ada jeda singkat sebelum menghapus layar OLED dan mengatur warna teks menjadi putih.


e. Fungsi Loop: Fungsi loop() terus berjalan berulang kali. Pada setiap iterasi, tampilan OLED dibersihkan terlebih dahulu. Informasi suhu dan kelembaban dibaca dari sensor BME280 menggunakan fungsi readTemperature() dan readHumidity(), kemudian informasi tersebut ditampilkan pada layar OLED. Ada juga penundaan 1 detik di akhir loop().


f. Secara keseluruhan, kode tersebut bertujuan untuk membaca data suhu dan kelembapan dari sensor BME280 dan menampilkannya secara real-time di layar OLED menggunakan ESP32.


5. Setelah kita mencoba menganalisis kode demi kode, lalu selanjutnya kita jalankan persiapan programnya dengan klik tombol “Verify” (Checklist)


6. click tombol “Upload” (Right Arrow) sampai “Done Uploading”


7. ANDDDD inilah hasilnya:



SELAMAT!!! Kamu baru saja berhasil mempelajari dan bereksperimen dengan Komunikasi Serial. Itu menyimpulkan project ke-6 kami: Serial Communication. Nantikan tutorial lainnya!!! 🙌


References:

Comments


bottom of page