ESP-NOW Haberleşme Protokolü

Bu yazımızda Espressif firması tarafından geliştirilen ESP32 kartının yepyeni haberleşme protokolü olan ESP-NOW protokolünden bahsedeceğiz. ESP-NOW protokolü, kablosuz olarak 2 ya da daha fazla ESP32 kartı arasında veri alışverişi yapabilen bir protokoldür.

Resmi geliştirici olan Espressif firmasının web sitesinde ESP-NOW protokolünün düşük güçlü 2,4 GHz kablosuz bağlantıya benzeyen bir yapı kullandığı belirtilmektedir. Cihazlar arasındaki eşleştirme iletişimden önce yalnızca bir kez yapılmalıdır. Eşleştirme sonrasında bağlantı güvenli hale gelir ve enerji kesintileri gibi sorunlar oluştuğunda, yeniden başlatma sonrası haberleşme kaldığı yerden devam edebilir.

ESP-NOW'un özellikleri şunlardır:

  • Şifreli ve şifresiz bir noktaya yayın iletişimi.
  • Karışık şifreli ve şifresiz eş cihazlar.
  • 250 byte'a kadar veri iletilmesi.
  • Verilerin sağlıklı şekilde iletilip iletilmediği hakkında geri çağırma işlevi.

ESP-NOW'un bazı kısıtlamaları ise şunlardır:

  • ESP-NOW ağında maksimum 20 cihaz bulunabilir.
  • En fazla 10 şifreli haberleşme yapılabilir.
  • Veri kapasitesi 250 byte ile sınırlıdır.

ESP-NOW, tek yönlü ve çok yönlü iletişime olanak sağlar.

Örnek Kullanım:

Aşağıdaki kodda, LM35 sensör değerini ölçüp diğer ESP32 kartına ESP-NOW haberleşme protokolü ile veri gönderme örneği mevcuttur.

Verici ESP32 Kodu:

#include <esp_now.h>
#include <WiFi.h>

const int LM35Pin = 34;
uint8_t alıcıMACAdresi[] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB};
float sıcaklık;

void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
pinMode(LM35Pin, INPUT);
if (esp_now_init() != ESP_OK) {
Serial.println("ESP-NOW başlatılamadı!");
return;
}
esp_now_peer_info_t alıcıInfo;
memcpy(alıcıInfo.peer_addr, alıcıMACAdresi, 6);
alıcıInfo.channel = 0;
alıcıInfo.encrypt = false;
if (esp_now_add_peer(&alıcıInfo) != ESP_OK){
Serial.println("Alıcı eklenemedi!");
return;
}
}

void loop() {
sıcaklık = analogRead(LM35Pin) * 0.48828125;
esp_err_t sonuç = esp_now_send(alıcıMACAdresi, (uint8_t *)&sıcaklık, sizeof(float));

if (sonuç == ESP_OK) {
Serial.print("Sıcaklık verisi: ");
Serial.println(sıcaklık);
Serial.println("Başarıyla gönderildi");
}
else {
Serial.println("Veri gönderme hatası");
}
delay(5000);
}

Alıcı ESP32 Kodu:

#include <esp_now.h>
#include <WiFi.h>

uint8_t alıcıMACAdresi[] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB};
float sıcaklık;

void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
if (esp_now_init() != ESP_OK) {
Serial.println("ESP-NOW başlatılamadı!");
return;
}
esp_now_peer_info_t alıcıInfo;
memcpy(alıcıInfo.peer_addr, alıcıMACAdresi, 6);
alıcıInfo.channel = 0;
alıcıInfo.encrypt = false;
if (esp_now_add_peer(&alıcıInfo) != ESP_OK){
Serial.println("Alıcı eklenemedi!");
return;
}
esp_now_register_recv_cb(VeriAlındığında);
}

void loop() {
delay(1000);
}

void VeriAlındığında(const uint8_t * gönderenMAC, const uint8_t * veri, int boyut) {
memcpy(&sıcaklık, veri, sizeof(float));
Serial.print("Alınan sıcaklık değeri: ");
Serial.println(sıcaklık);
}

Bu kodlarda, bir ESP32 kartı LM35 sensöründen sıcaklık verisi okur ve diğer ESP32 kartına ESP-NOW protokolü aracılığıyla bu veriyi gönderir. Alıcı ESP32 kartı bu veriyi alır ve seri monitöre yazdırır.

Benzer Konular