Cara Komunikasi Dua Arah ESPNOW di ESP32

Pada protokol ESPNOW, kita bisa menggunakannya untuk komunikasi dua arah. Dari ESP32 Master kirim data ke ESP32 Slave, kemudian dari ESP32 Slave balikin lagi ke ESP32 Master.

Cara Komunikasi Dua Arah ESPNOW di ESP32

Kode Cek Mac Address

#include "WiFi.h"
void setup(){
Serial.begin(115200);
WiFi.mode(WIFI_MODE_STA);
Serial.println(WiFi.macAddress());
}
void loop(){
}

Kode ESP32 Master

#include <WiFi.h>
#include <esp_now.h>
// mac address tujuan
uint8_t mac_addr_tujuan[] = {0xA4, 0xCF, 0x12, 0x05, 0xD5, 0x98};
// struktur data yang dikirim
typedef struct struct_message {
unsigned long waktu;
} struct_message;
struct_message data_ku;
// variabel peerInfo
esp_now_peer_info_t peerInfo;
// callback Jika data terkirim
void cb_kirim(const uint8_t *mac_addr, esp_now_send_status_t status) {
Serial.print("Status Pengiriman: ");
if(status == ESP_NOW_SEND_SUCCESS){
Serial.println("Sukses");
}
else{
Serial.println("Gagal");
}
}
// callback jika menerima data
void cb_terima(const uint8_t *mac_addr, const uint8_t *dataDiterima, int panjang) {
memcpy(&data_ku, dataDiterima, sizeof(data_ku));
Serial.print("Bytes diterima: ");
Serial.println(panjang);
Serial.print("Waktu Dikirim: ");
Serial.println(data_ku.waktu);
Serial.print("Waktu Diterima: ");
Serial.println(millis());
Serial.println();
}
void setup() {
Serial.begin(115200);
// mengatur esp ke mode station
WiFi.mode(WIFI_STA);
// inisialisasi espnow
if (esp_now_init() != ESP_OK) {
Serial.println("Gagal Inisialisasi espnow");
return;
}
// mendaftarkan fungsi callback
esp_now_register_send_cb(cb_kirim);
// Mendata Peer / Kawan
memcpy(peerInfo.peer_addr, mac_addr_tujuan, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
// Menambahkan Peer / Kawan
if (esp_now_add_peer(&peerInfo) != ESP_OK){
Serial.println("Gagal Menambah Peer");
return;
}
// mendaftarkan fungsi callback
esp_now_register_recv_cb(cb_terima);
}
void loop() {
// mengisi nilai ke variabel
data_ku.waktu = millis();
// mengirim data
esp_now_send(mac_addr_tujuan, (uint8_t *) &data_ku, sizeof(data_ku));
delay(2000);
}

Kode ESP32 Slave

#include <WiFi.h>
#include <esp_now.h>
// mac address tujuan
uint8_t mac_addr_tujuan[] = {0xF0, 0x08, 0xD1, 0x62, 0xD6, 0xE8};
// struktur data yang diterima
typedef struct struct_message {
unsigned long waktu;
} struct_message;
struct_message data_ku;
// variabel peerInfo
esp_now_peer_info_t peerInfo;
// callback Jika data terkirim
void cb_kirim(const uint8_t *mac_addr, esp_now_send_status_t status) {
Serial.print("Status Pengiriman: ");
if(status == ESP_NOW_SEND_SUCCESS){
Serial.println("Sukses");
}
else{
Serial.println("Gagal");
}
}
// callback jika menerima data
void cb_terima(const uint8_t *mac_addr, const uint8_t *dataDiterima, int panjang) {
memcpy(&data_ku, dataDiterima, sizeof(data_ku));
esp_now_send(mac_addr_tujuan, (uint8_t *) &data_ku, sizeof(data_ku));
Serial.print("Bytes diterima: ");
Serial.println(panjang);
Serial.print("Waktu: ");
Serial.println(data_ku.waktu);
Serial.println();
// esp_now_send(mac_/addr_tujuan, (uint8_t *) &data_ku, sizeof(data_ku));
}
void setup() {
Serial.begin(115200);
// mengatur esp ke mode station
WiFi.mode(WIFI_STA);
// inisialisasi espnow
if (esp_now_init() != ESP_OK) {
Serial.println("Gagal Inisialisasi espnow");
return;
}
// mendaftarkan fungsi callback
esp_now_register_send_cb(cb_kirim);
// Mendata Peer / Kawan
memcpy(peerInfo.peer_addr, mac_addr_tujuan, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
// Menambahkan Peer / Kawan
if (esp_now_add_peer(&peerInfo) != ESP_OK){
Serial.println("Gagal Menambah Peer");
return;
}
// mendaftarkan fungsi callback
esp_now_register_recv_cb(cb_terima);
}
void loop() {
}


Video

 

Kerjasama Robotik ID

https://linktr.ee/robotikid

Youtube: https://www.youtube.com/robotikid
Instagram: https://www.instagram.com/robotikid/
Facebook: https://www.facebook.com/RobotikID/
Website: https://www.robotikindonesia.com/
Tokopedia: http://tokopedia.com/instrumentrobot

Post a Comment

0 Comments