Alvoria Neura


Komunikasi Serial i2c Master Slave Esp8266 Nodemcu V3

Tutorial: Komunikasi Antara Dua Modul ESP8266 NodeMCU V3 Menggunakan Metode I2C

Penjelasan Dasar tentang I2C

Komunikasi antar perangkat mikrokontroler adalah salah satu aspek penting dalam dunia pengembangan IoT (Internet of Things). Di dalam sistem IoT, seringkali kita memerlukan komunikasi antar perangkat untuk saling bertukar data dan informasi. Salah satu metode komunikasi yang banyak digunakan dalam proyek-proyek IoT adalah I2C (Inter-Integrated Circuit). Pada tutorial ini, kita akan membahas cara menghubungkan dua modul ESP8266 NodeMCU V3 menggunakan metode I2C, dengan satu modul bertindak sebagai master dan modul lainnya sebagai slave.

I2C (Inter-Integrated Circuit) adalah protokol komunikasi serial yang banyak digunakan dalam mikrokontroler untuk menghubungkan perangkat dengan menggunakan dua jalur utama, yaitu:

  1. SDA (Serial Data Line): Saluran data untuk pengiriman dan penerimaan data.
  2. SCL (Serial Clock Line): Saluran untuk sinyal clock yang digunakan untuk sinkronisasi antara master dan slave.

I2C memungkinkan komunikasi antara banyak perangkat dengan hanya menggunakan dua jalur utama. Salah satu perangkat akan bertindak sebagai master, yang mengatur komunikasi dan menginisiasi pengiriman data, sementara perangkat lainnya berfungsi sebagai slave, yang akan menerima data dan memberikan respons sesuai dengan instruksi dari master.

Tujuan:

  • Master: Mengirimkan data ke slave melalui I2C.
  • Slave: Menerima data dari master dan memberikan respons balik.

1. Komponen yang Dibutuhkan:

Sebelum kita mulai, pastikan Anda memiliki:

  • 2 buah ESP8266 NodeMCU V3
  • Kabel jumper untuk menghubungkan pin antara dua modul
  • Komputer dengan Arduino IDE untuk memprogram kedua modul ESP8266
  • Kabel USB untuk menghubungkan ESP8266 ke komputer

2. Wiring (Diagram / Skema Koneksi)

Koneksi antara kedua modul ESP8266 adalah sebagai berikut:

ESP8266 (Master) ESP8266 (Slave)
SDA (pin D2) SDA (pin D2)
SCL (pin D1) SCL (pin D1)
GND GND
VCC (untuk memberikan daya ke kedua modul) VCC (untuk memberikan daya ke kedua modul).

3. Instalasi dan Persiapan

Sebelum menulis kode, pastikan Anda sudah:

  1. Instalasi Arduino IDE: Pastikan Anda sudah menginstal Arduino IDE terbaru di komputer Anda. Anda bisa mendownloadnya di sini.
  2. Instalasi ESP8266 Board pada Arduino IDE:

    • Buka Arduino IDE.
    • Pilih File > Preferences dan tambahkan URL berikut ke dalam "Additional Boards Manager URLs":
    • http://arduino.esp8266.com/stable/package_esp8266com_index.json

    • Pilih Tools > Board > Boards Manager....
    • Cari "ESP8266" dan klik "Install".
  3. Pilih Board ESP8266:

    • Pilih Tools > Board > NodeMCU 1.0 (ESP-12E Module).

4. Kode untuk Master (ESP8266 NodeMCU V3)

Pada kode master, ESP8266 akan mengirimkan data ke slave menggunakan I2C. Kita akan menggunakan Wire.h library untuk komunikasi I2C.


#include <Wire.h>

#define SLAVE_ADDR 9  // Alamat I2C slave

void setup() {
    Wire.begin();          // Mulai komunikasi I2C sebagai master
    Serial.begin(9600);    // Mulai komunikasi serial untuk debugging

    Serial.println("Master ready to send data to Slave...");
}

void loop() {
    Wire.beginTransmission(SLAVE_ADDR);  // Memulai transmisi ke slave dengan alamat 9
    Wire.write("Hello, Slave!");         // Mengirim data ke slave
    Wire.endTransmission();              // Mengakhiri transmisi

    Serial.println("Data sent to Slave");

    delay(1000);  // Delay 1 detik sebelum mengirim data lagi
}

Penjelasan Kode Master:

  1. Wire.begin(): Fungsi ini digunakan untuk menginisialisasi komunikasi I2C sebagai master.
  2. Wire.beginTransmission (SLAVE_ADDR): Fungsi ini memulai transmisi data ke slave dengan alamat yang sudah ditentukan. Alamat slave di sini adalah 9.
  3. Wire.write("Hello, Slave!"): Mengirimkan data dalam bentuk string ke slave.
  4. Wire.endTransmission(): Mengakhiri transmisi data ke slave.
  5. Serial.begin(9600): Memulai komunikasi serial untuk menampilkan status di monitor serial.
  6. delay(1000): Memberikan jeda 1 detik agar transmisi data dilakukan secara periodik.

5. Kode untuk Slave (ESP8266 NodeMCU V3)

Pada kode slave, ESP8266 akan menerima data dari master melalui I2C dan mengirimkan respons kembali ke master.


#include <Wire.h>

#define SLAVE_ADDR 9  // Alamat I2C slave

void setup() {
    Wire.begin(SLAVE_ADDR);      // Mulai komunikasi I2C sebagai slave dengan alamat 9
    Wire.onReceive(receiveEvent); // Menentukan fungsi yang akan dipanggil saat data diterima
    Serial.begin(9600);          // Mulai komunikasi serial untuk debugging

    Serial.println("Slave is ready and waiting for data...");
}

void loop() {
    // Tidak ada kode yang diperlukan di loop untuk komunikasi I2C
    delay(100);  // Delay kecil agar sistem tetap responsif
}

void receiveEvent(int byteCount) {
    while (Wire.available()) {  // Mengecek apakah ada data yang diterima
    char c = Wire.read();     // Membaca data dari master
    Serial.print(c);          // Menampilkan data yang diterima
    }
    Serial.println();  // Menambahkan baris baru setelah menerima data
}

Penjelasan Kode Slave:

  1. Wire.begin(SLAVE_ADDR): Fungsi ini digunakan untuk memulai komunikasi I2C dengan ESP8266 bertindak sebagai slave dan alamat yang sudah ditentukan.
  2. Wire.onReceive(receiveEvent): Fungsi ini mendaftarkan event handler (fungsi receiveEvent) yang akan dipanggil setiap kali slave menerima data dari master.
  3. receiveEvent(int byteCount): Fungsi ini akan dipanggil saat slave menerima data. Fungsi ini membaca semua data yang diterima dan mencetaknya ke monitor serial.
  4. Serial.print(c): Mencetak karakter yang diterima dari master ke monitor serial.

6. Menghubungkan ESP8266

Berikut adalah langkah-langkah untuk menghubungkan kedua modul ESP8266 NodeMCU V3:

  1. SDA (pin D2 pada ESP8266 Master) ke SDA (pin D2 pada ESP8266 Slave)..
  2. SCL (pin D1 pada ESP8266 Master) ke SCL (pin D1 pada ESP8266 Slave).
  3. GND ke GND.
  4. VCC ke VCC (untuk memberikan daya ke kedua modul).

Catatan: Pastikan semua koneksi sudah benar dan kedua modul terhubung dengan baik.

7. Meng-upload Kode ke ESP8266

  1. Sambungkan kedua modul ESP8266 ke komputer Anda melalui kabel USB.
  2. Pilih port yang sesuai di Tools > Port untuk masing-masing modul.
  3. Pilih board ESP8266 yang sesuai di Tools > Board.
  4. Upload kode untuk Master ke modul pertama dan Slave ke modul kedua.

8. Verifikasi Hasil

  1. Setelah meng-upload kode, buka Serial Monitor pada Arduino IDE.
  2. Setel baud rate Serial Monitor ke 9600.
  3. Anda akan melihat output berikut:
    • Master akan mengirimkan pesan "Data sent to Slave" setiap detik.
    • Slave akan menerima data dan menampilkan "Hello, Slave!" pada monitor serial.

Kesimpulan

Pada tutorial ini, kita telah berhasil menghubungkan dua modul ESP8266 NodeMCU menggunakan komunikasi I2C, dengan satu modul bertindak sebagai master dan modul lainnya sebagai slave. Master mengirimkan data ke slave melalui jalur I2C, dan slave menerima data tersebut dan mencetaknya di monitor serial.


Metode I2C adalah salah satu metode yang efisien untuk komunikasi antar perangkat dalam proyek IoT karena menggunakan dua jalur utama (SDA dan SCL) untuk komunikasi, memungkinkan banyak perangkat untuk berbagi jalur yang sama. Dengan memahami cara kerja komunikasi I2C ini, Anda dapat mengembangkan berbagai aplikasi berbasis ESP8266 dengan banyak perangkat yang saling berkomunikasi.


Dengan menggunakan kode di atas sebagai dasar, Anda dapat mulai mengembangkan proyek-proyek I2C yang lebih kompleks, seperti sistem sensor yang berkomunikasi antara beberapa perangkat atau perangkat yang saling bertukar data secara bersamaan.