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, tek yönlü ve çok yönlü iletişime olanak sağlar.
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.
#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);
}
#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.