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.
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.
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.
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.
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.
#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(); } }
#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 }
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.
Pendahuluan Dalam dunia pengembangan perangkat lunak yang terus berkembang, Kubernetes telah muncul sebagai alat kunci dalam orkestrasi…
Mengelola sebuah sekolah atau lembaga pendidikan adalah tugas yang kompleks dan penuh tantangan. Dengan berbagai…
Selamat datang di artikel kami tentang cara menginstal OpenVPN server di Ubuntu 20.04 di HuaweiCloud!…
Dalam dunia pengembangan aplikasi, salah satu hal yang menjadi penting adalah mengelola dan memonitor kontainer…
Tutorial led blinking. LED (Light Emitting Diode) merupakan salah satu komponen elektronik yang paling umum…
Tutorial LCD Display, ini merupakan salah satu komponen yang sering digunakan dalam project elektronika sebagai…