Esp32 Master Slave Uart
Tutorial Lengkap: Komunikasi Serial Antar Dua ESP32 DevKit V1 (Master-Slave) Menggunakan TX dan RX
ESP32 adalah mikrokontroler yang memiliki berbagai fitur komunikasi, salah satunya adalah komunikasi serial menggunakan UART (Universal Asynchronous Receiver/Transmitter). Pada tutorial ini, kita akan menghubungkan dua ESP32 DevKit V1 untuk berkomunikasi satu sama lain dalam mode Master-Slave menggunakan pin TX dan RX.
Komunikasi serial ini sangat penting dalam berbagai aplikasi, seperti pertukaran data sensor antar mikrokontroler, komunikasi antar perangkat yang tidak memiliki koneksi Wi-Fi atau Bluetooth, serta sistem kontrol yang memerlukan komunikasi cepat dan sederhana.
1. Peralatan yang Diperlukan
Sebelum kita mulai, pastikan Anda memiliki:
- 2x ESP32 DevKit V1
- Kabel jumper
- Breadboard (opsional)
- Software Arduino IDE
- Kabel USB untuk menghubungkan ESP32 ke komputer
- Resistor pull-up (opsional untuk stabilisasi sinyal)
2. Konsep Dasar Komunikasi Serial UART
UART adalah protokol komunikasi yang memungkinkan dua perangkat bertukar data menggunakan dua pin utama:
- TX (Transmit) untuk mengirim data
- RX (Receive) untuk menerima data
Pada koneksi antara dua ESP32:
- TX dari Master akan terhubung ke RX di Slave
- RX dari Master akan terhubung ke TX di Slave
- GND dari kedua perangkat harus terhubung bersama untuk menyamakan referensi tegangan
3. Diagram Koneksi
ESP32 Master - ESP32 Slave Pinout
ESP32 Master | ESP32 Slave |
---|---|
TX (GPIO17) | RX (GPIO16) |
RX (GPIO16) | TX (GPIO17) |
GND | GND |
Alasan Menggunakan UART 1
ESP32 memiliki beberapa antarmuka UART, yaitu UART0, UART1, dan UART2. UART0 biasanya digunakan oleh komunikasi Serial Monitor di Arduino IDE, sehingga lebih baik menggunakan UART1 atau UART2 untuk komunikasi antar ESP32.
4. Pemrograman ESP32 Master dan Slave
Kode ESP32 Master
Kode berikut akan mengirim data ke ESP32 Slave melalui komunikasi serial UART:
#include <HardwareSerial.h>
HardwareSerial mySerial(1); // Menggunakan UART1
void setup() {
Serial.begin(115200);
mySerial.begin(9600, SERIAL_8N1, 16, 17); // RX=16, TX=17
Serial.println("ESP32 Master siap mengirim data...");
}
void loop() {
Serial.println("Mengirim data ke Slave...");
mySerial.println("Hello from Master");
delay(2000);
}
Kode ESP32 Slave
Kode berikut akan menerima data dari ESP32 Master:
#include <HardwareSerial.h>
HardwareSerial mySerial(1);
void setup() {
Serial.begin(115200);
mySerial.begin(9600, SERIAL_8N1, 16, 17); // RX=16, TX=17
Serial.println("ESP32 Slave siap menerima data...");
}
void loop() {
if (mySerial.available()) {
String receivedData = mySerial.readStringUntil('\n');
Serial.print("Data diterima: ");
Serial.println(receivedData);
}
}
5. Pengujian dan Debugging
- Unggah kode ke masing-masing ESP32.
- Buka Serial Monitor pada Arduino IDE untuk melihat data yang dikirim dan diterima.
- Pastikan baud rate pada Serial Monitor diatur ke 115200.
- Jika data tidak terkirim, periksa kabel koneksi TX-RX dan GND.
- Periksa apakah UART1 digunakan oleh perangkat lain, seperti debugging atau sensor lain yang terhubung.
- Gunakan resistor pull-up pada TX dan RX jika terjadi ketidakstabilan sinyal
6. Implementasi Lebih Lanjut
Menambahkan Acknowledgment (ACK)
Untuk memastikan data diterima dengan benar, Slave bisa mengirim balasan (ACK) ke Master setelah menerima pesan:
Modifikasi Kode Master
#include <HardwareSerial.h>
HardwareSerial mySerial(1); // Menggunakan UART1
void setup() {
Serial.begin(115200);
mySerial.begin(9600, SERIAL_8N1, 16, 17); // RX=16, TX=17
Serial.println("ESP32 Master siap mengirim data...");
}
void loop() {
Serial.println("Mengirim data ke Slave...");
mySerial.println("Hello from Master");
delay(500);
if (mySerial.available()) {
String ack = mySerial.readStringUntil('\n');
Serial.print("ACK dari Slave: ");
Serial.println(ack);
}
delay(2000);
}
Modifikasi Kode Slave
#include <HardwareSerial.h>
HardwareSerial mySerial(1);
void setup() {
Serial.begin(115200);
mySerial.begin(9600, SERIAL_8N1, 16, 17); // RX=16, TX=17
Serial.println("ESP32 Slave siap menerima data...");
}
void loop() {
if (mySerial.available()) {
String receivedData = mySerial.readStringUntil('\n');
Serial.print("Data diterima: ");
Serial.println(receivedData);
// Kirim ACK ke Master
mySerial.println("ACK: Data diterima");
}
}
Kesimpulan
Dengan komunikasi serial UART, dua ESP32 dapat saling berkomunikasi dengan mudah dalam mode Master-Slave. Teknik ini dapat digunakan dalam berbagai aplikasi seperti:
- Sistem sensor jarak jauh
- Kontrol perangkat berbasis serial
- Komunikasi antar mikrokontroler
Selain itu, dengan menambahkan sistem acknowledgment (ACK), kita bisa memastikan komunikasi lebih handal dan mengurangi kemungkinan kehilangan data.
Demikian tutorial ini, semoga bermanfaat dan selamat mencoba!