PROJECT 6: ESP32 Communication Protocol — Integrating Multiple Devices
Bismillaahirrahmaanirrahiim..
Hello sobat setia medium-ers semua!! Gimana kabarnya?? Semoga sehat selalu yaa..
Menurut pepatah, tak kenal maka?? ya kenalan dongg.. Sebelumnya kita kenalan dulu ya guys. Kenalin namaku Muhammad Raflie Dwi Putra yang bisa dipanggil Raflie dengan NIM 18219035. Aku sedang berkuliah semester 4 di prodi Sistem dan Teknologi Informasi (STI) Institut Teknologi Bandung.
Communication Protocol and Bus Interface
Data communication terbagi menjadi 2 jenis yaitu Serial Communication dan Parallel Communication. Serial Communication adalah pendekatan yang paling banyak digunakan untuk mentransfer informasi antara perangkat pemrosesan data. Terdapat beberapa terminologi dari Serial Communication:
- Transmission Modes
- Clock Synchronization
- Baud Rate
- Framing
- Bit Synchronization
- Error Control
Terdapat 3 jenis Serial Communication Protocol, yakni:
- UART (Universal Asynchronous Receiver-Transmitter Asynchronous), serial data transmission between devices;
- I2C (Inter-Integrated Circuit), Half duplex, serial data transmission used for short-distance between boards, modules, and peripherals; and
- SPI (Serial Peripheral Interface bus Full-duplex), serial data transmission used for short-distance between devices.
Secara sederhana, kita akan merancang suatu sistem embedded berbasis ESP32 yang terhubung ke 2 device atau lebih dengan menggunakan komunikasi serial. Contohnya seperti: Aplikasi sistem embedded berbasis ESP32 untuk membaca informasi lingkungan menggunakan sensor BME280 dan menampilkannya pada display OLED 0.96” menggunakan komunikasi serial I2C.
KOMPONEN DAN ALAT YANG DIBUTUHKAN
Tentunya, untuk menjalankan berbagai program eksperimen Integrating Multiple Devices with ESP32 yang telah disebutkan sebelumnya, membutuhkan beberapa komponen atau alat yang perlu disiapkan, yaitu:
- ESP32 DEVKIT V1 DOIT Board, sebagai komponen utama untuk dimasukkan program dari Arduino IDE.
- Kabel Micro USB (type A), sebagai kabel penghubung ESP32 Board dengan PC/Laptop untuk memasukkan program.
- Perangkat PC (Laptop / Komputer), tentunya yang sudah terinstall aplikasi Arduino IDE dan paket board ESP-32 di dalamnya.
(Catatan: Jika belum disiapkan, bisa diikuti langkah-langkah pada link ini.)
- Breadboard 830 points, sebagai tempat meletakkan ESP32 Board dan menghubungkan berbagai komponen dengan bantuan kabel jumper wires, baik secara seri maupun parallel.
- Jumper Wires Male to Female and Jumper Wires Male to Male, sebagai penghubung antar komponen melalui breadboard.
- 0.96 inch I2C Organic Light Emitting Diode (OLED) Display SSD1306, sebagai komponen display.
Spesifikasi:
- Interface: I2C (3.3V / 5V logic level)
- Resolusi: 128 x 64
- Sudut Pandang: >160 derajat
- Warna : Kombinasi Kuning dan Biru
- Power supply: DC3.3V~5V
- Operating temperature: -20'C~70'C
- Ukuran LCD+Board : 2.7 x 2.7 cm
- BME-280 sensor module, untuk mengukur tekanan, temperatur dan kelembaban (aku pakai yang 4 pin).
Spesifikasi :
Pasokan Tegangan: 1.8–5 V DC; Antarmuka: I2C (hingga 3.4 MHz), SPI (hingga 10 MHz)
Rentang operasional :
Suhu:-40 sampai + 85 °C; Kelembaban: 0–100%; Tekanan: 300–1100 hPa
Resolusi :
Suhu: 0.01 °C; Kelembaban: 0.008%; Tekanan: 0.18 Pa;
Akurasi :
Suhu: +-1 °C; Kelembaban: +-3%; Tekanan: +-1 Pa;
I2C alamat :
SDO RENDAH: 0x76; SDO TINGGI: 0x77
DIAGRAM SKEMA RANGKAIAN
Hati-hati dalam proses wiring rangkaian parallelnya ya temen-temen..
KODE 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);
}
PROSES DAN HASIL PERCOBAAN
- Untuk langkah pertama, kita bisa melakukan proses wiring sesuai diagram skema di atas.
- Hati-hati pada OLED SSD1306 (yellow-blue) pada umumnya ditukar posisinya antara pin SCL dan SDA sehingga sesuaikan saja dengan pin yang tertulis di OLED-nya!!!
- Lebih fatalnya lagi, jika tertukar antara VCC dan GND pada BME280 dan OLED, serta kutub positif dan kutub negatif pada Breadboard. Hal ini dapat menyebabkan ESP32 atau OLED dapat cepat panas hingga mengeluarkan asap. - Kemudian, Install Seluruh Libraries yang dibutuhkan pada Arduino IDE.
- Untuk melakukan pembacaan dari BME280 Sensor Module, kita butuh menggunakan Adafruit_BME280 library dan Adafruit_Sensor library. Berikut cara menginstall seluruh libraries tersebut dalam Arduino IDE:
Buka aplikasi Arduino IDE dan buka menu Sketch > Include Library > Manage Libraries. Kemudian Library Manager akan terbuka.
Search “adafruit bme280” pada Search box dan install library tersebut; Search “Adafruit Unified Sensor” pada Search box kemudian scroll ke paling bawah, dan install library tersebut;
- Untuk melakukan penampilan output ke OLED Display, kita butuh menggunakan Adafruit_SSD1306 library dan Adafruit_GFX library. Berikut cara menginstall seluruh libraries tersebut dalam Arduino IDE:
Buka aplikasi Arduino IDE dan buka menu Sketch > Include Library > Manage Libraries. Kemudian Library Manager akan terbuka.
Search “SSD1306” pada Search box dan install library Adafruit tersebut;
Search “GFX” pada Search box dan install library Adafruit tersebut;
- Setelah seluruh libraries tersebut terinstall, kemudian restart Arduino IDE kita.
3. Pastikan Address dari BME280 dan OLED SSD1306 sudah benar.
- Karena OLED dan BME280 memiliki address yang berbeda, kita dapat menggunakan pins SDA dan SCL yang sama tanpa masalah. Address OLED display adalah 0x3C dan address BME280 adalah 0x76 (untuk memastikan dapat dilakukan cek masing-masing address dengan langkah-langkah pada story-story sebelumnya)
4. Upload Kode Program pada Arduino IDE dengan menyesuaikan nama library-library yang di-include dan ukuran atau type dari OLED dan BME280.
Video Demo:
KESIMPULAN
Dari eksperimen yang telah dilakukan, ESP32 berhasil untuk menjalankan program Sistem Integrating Multiple Devices (BME280 with OLED Display) dengan baik sesuai dengan kode program yang dibuat pada aplikasi Arduino IDE. Harapannya, berbagai pengalaman dalam project ESP32 ini dapat dikembangkan lebih jauh lagi.
Walaupun pada beberapa eksperimen tertentu tidak langsung berhasil karena menemukan berbagai kendala. Namun, dengan adanya banyak kegagalan tersebut akan membuat kita mempunyai pengalaman lebih banyak pada project ini sehingga akan lebih lancar mengatasi problem-problem tersebut di masa yang akan datang.
Alhamdulillaah..
Sekian, terima kasih atas perhatiannya..
SELAMAT MENCOBA!!!