By | 25/12/2020

ESP32 dapat berkomunikasi antar ESP32 dengan berbagai macam protokol komunikasi, bisa dengan Serial, SPI, Wifi dan sekarang saya akan menulis artikel tutorial cara komunikasi antar ESP32 dengan I2C. Jika dengan Serial kita tidak perlu menggunakan softwareserial karena esp32 memiliki dua buah hardware serial yang bisa kita gunakan selain untuk mengisi program.

Ada beberapa alasan untuk anda lebih memilih komunikasi I2C dibandingkan dengan Komunikasi Serial.

Tutorial ESP32 Komunikasi Antar ESP32 dengan I2C

Kelebihan Komunikasi I2C

Salah satu keuntungan menggunakan komunikasi I2C adalah kita hanya memerulkan dua buah kabel untuk menghubungkan antar device, tidak seperti SPI yang membutuhkan paling tidak empat buah kabel untuk dapat melakukan komunikasi data.

Adapun jika dibandingkan serial, komunikasi I2C dapat mempararel koneksi dua kabel antar device jika kita akan menghubungkan ke perangkat dengan komunikasi I2C, dan hanya perlu membedakan alamat nya saja.

Meskipun dengan serial juga bisa, tapi tetap tidak saya rekomendasikan, karena terlalu rumit dalam membuat programnya.

Kekurangan Komunikasi Antar ESP32 dengan I2C

Sangat disesali, saat mencoba komunikasi dua ESP32 dengan menggunakan metode I2C ternyata memiliki kelemahan berupa delay dalam menerima data dari master. begitu pun sebaliknya, saat slave yang mengirim ke master.

Maka master akan membaca data dari slave sangat lama. menurut analisis delay terjadi pada program bagian SLAVE nya.

Dan sampai artikel ini ditulis, belum menemukan metode untuk mengatasi kelemahan ini, sehingga jika dibandingkan dengan komunikasi serial. maka saya pribadi lebih memilih komunikasi serial untuk komunikasi antar esp32.

Cara ESP32 Melakukan Komunikasi I2C

Karena kita membuat kode dengan Arduino IDE maka library yang kita butuhkan sama seperti library untuk arduino biasa yaitu wire.h dan ada tambahan WireSlave.h

Meskipun isi didalam library tersebut berbeda, tapi struktur code atau nama-nama class nya hampir sama dengan library yang untuk arduino.

Contoh Aplikasi Komunikasi Antar ESP32 I2C

Banyak Sekali kegunaan komunikasi dua kabel dengan I2C ESP32. Misalkan saat kita ingin mengontrol dan memonitoring sistem, dimana sistem tersebut sangat sulit menrima jaringan, maka kita bisa menggunakan komunikasi antar ESP32 dengan I2C sebagai pengganti WiFi.

Tutorial langkah-langkah Komunikasi I2C Antar ESP32 I2C

Tutorial ESP32 Komunikasi Antar ESP32 dengan I2C
  1. Siapkan bahan-bahan yang diperlukan untuk uji coba tutorial ini.
  2. Buat rangkaian seperti pada gambar diatas, yaitu dengan menghubungkan pin SDA dan SCL pada masing-masing ESP32
  3. Download Library WireSlave.h untuk ESP32
  4. Buat program dan upload dengan software Arduino IDE
    Program dibawah ini saya buat untuk ESP32 Master dan juga ESP32 Slave, namun saya kunci, dan untuk membukanya silahkan lakukan tindakan salah satu dibawah ini !

ESP32 Master I2C Sebagai Pengirim Data

#include <Arduino.h>
#include <Wire.h>
#include <WirePacker.h>

#define SDA_PIN 21
#define SCL_PIN 22
#define I2C_SLAVE_ADDR 0x04

void setup()
{
    Serial.begin(9600);           // start serial for output
    Wire.begin(SDA_PIN, SCL_PIN);   // join i2c bus
}

void loop()
{
    static unsigned long lastWireTransmit = 0;
    static byte x = 0;

    // send data to WireSlave device every 1000 ms
    if (millis() - lastWireTransmit > 1000) {
        // first create a WirePacker that will assemble a packet
        WirePacker packer;

        // then add data the same way as you would with Wire
        packer.write("x is ");
        packer.write(x);

        // after adding all data you want to send, close the packet
        packer.end();

        // now transmit the packed data
        Wire.beginTransmission(I2C_SLAVE_ADDR);
        while (packer.available()) {    // write every packet byte
            Wire.write(packer.read());
        }
        Wire.endTransmission();         // stop transmitting

        x++;
        lastWireTransmit = millis();
    }
}

ESP32 Slave I2C Sebagai Penerima Data

#include <Arduino.h>
#include <Wire.h>
#include <WireSlave.h>

#define SDA_PIN 21
#define SCL_PIN 22
#define I2C_SLAVE_ADDR 0x04

void receiveEvent(int howMany);

void setup()
{
    Serial.begin(9600);

    bool success = WireSlave.begin(SDA_PIN, SCL_PIN, I2C_SLAVE_ADDR);
    if (!success) {
        Serial.println("I2C slave init failed");
        while(1) delay(100);
    }

    WireSlave.onReceive(receiveEvent);
}

void loop()
{
    WireSlave.update();

    delay(1);
}
void receiveEvent(int howMany)
{
    while (1 < WireSlave.available()) // loop through all but the last byte
    {
        char c = WireSlave.read();  // receive byte as a character
        Serial.print(c);            // print the character
    }

    int x = WireSlave.read();   // receive byte as an integer
    Serial.println(x);          // print the integer
}

Hasil Komunikasi Master Slave I2C ESP32

Bisa di analisis, serial monitor bagian kiri adalah slave penerima, dan serial monitor bagian kanan adalah master pengirim, dari hasilnya antara slave dan master data x tidak sinkron atau ada yang hilang.

Itulah kekurangan komunikasi antar ESP32 jika menggunakan metode I2C.

Semoga dapat membantu, dan itulah cara komunikasi antar ESP32 dengan I2C dari anakkendali.com semoga membantu.

Leave a Reply

Your email address will not be published. Required fields are marked *