İçindekiler:
- Gereçler
- Adım 1: Board Mac Adresini Alın
- Adım 2: ESP-NOW Nasıl Çalışır?
- Adım 3: ESP-ŞİMDİ FONKSİYONLARI(ESP32)
- Adım 4: ESP-NOW FONKSİYONLARI(ESP8266)
- Adım 5: Tek Yönlü İletişim (Gönderen Olarak ESP32)
- Adım 6: Tek Yönlü İletişim (Gönderen Olarak ESP8266)
- Adım 7: İKİ YÖNLÜ İLETİŞİM
- Adım 8: REFERANSLAR
Video: ESP32 ve ESP8266 Kullanılarak ESP-NOW Üzerinden Çoklu ESP Konuşması Nasıl Yapılır: 8 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:17
Devam eden projemde, yönlendirici olmadan birbirleriyle konuşmak için birden fazla ESP'ye ihtiyacım var. Bunu yapmak için, ESP'de bir yönlendirici olmadan birbirleriyle kablosuz iletişim kurmak için ESP-NOW'u kullanacağım.
Gereçler
Kullandığım Şeyler:
ESP32 DEV Modülü
NODEMCU 1.0 (ESP12E Modülü)
Adım 1: Board Mac Adresini Alın
ESP-now ile ESP cihazları, esp'in intializasyonu üzerine yapılan dahili bir erişim noktası ağına bağlıyken, benzersiz adreslerine veri göndererek birbirleriyle konuşurlar.. Böylece her cihazın MAC adresini belirleyin. ESP32 ve ESP8266 Anakart Ayarlarım ektedir.
ESP32 İÇİN
#include "WiFi.h" //ESP32 WIFI özelliklerine erişmek için
geçersiz kurulum(){ Serial.begin(115200); Serial.print("ESP32 Kartı MAC Adresi: "); Serial.println(WiFi.macAddress()); // MAC Adresini yazdırır } void loop(){}
ESP8266 İÇİN
#include //ESP8266 WIFI özelliklerine erişmek için kullanılan kitaplık
geçersiz kurulum(){ Serial.begin(115200); Seri.println(); Serial.print("ESP8266 Kart MAC Adresi: "); Serial.println(WiFi.macAddress()); // MAC Adresini yazdırır } void loop(){}
MAC ADRESİM:
- ESP32 - 30:AE:A4:F5:03:A4
- ESP8266: A4:CF:12:C7:9C:77
Adım 2: ESP-NOW Nasıl Çalışır?
İşte nasıl çalıştırılacağına dair bir genel bakış:
- Şimdi esp ve wifi kitaplıklarını dahil edin
- Alıcı ESP'nin mac adresini kaydedin
- Gönderilen/alınan mesajın veri yapısını tanımlayın
- Kurulumda, wifi'yi istasyon moduna ayarlayın
- esp_now'u başlat
- veri gönderip aldıktan sonra çağrılan geri arama işlevini yapın ve kaydedin
- Esp8266 için rolünü tanımlayın
- eş veya alıcı esp'yi kaydedin
- Veri gönder
Adım 3: ESP-ŞİMDİ FONKSİYONLARI(ESP32)
esp_now_init(void)
Dönüş:
- ESP_OK: başarılı
- ESP_ERR_ESPNOW_INTERNAL: Dahili hata
Açıklama:
ESPNOW işlevini başlat
esp_now_register_send_cb(cb)
İadeler:
- ESP_OK: başarılı
- ESP_ERR_ESPNOW_NOT_INIT: ESPNOW başlatılmadı
- ESP_ERR_ESPNOW_INTERNAL: dahili hata
parametreler:
-
cb: ESPNOW verilerini bu parametrelerle gönderdikten sonra geri çağırma işlevi adı:
-
void cb (const uint8_t *mac_addr, esp_now_send_status_t durumu)
- mac_addr: alıcının mac adresi
-
durum:
- 1 = başarı
- 0 = başarısız
-
Açıklama:
ESPNOW verilerini gönderdikten sonra OnDataSent işlevini çağırın
esp_now_add_peerconst esp_now_peer_info_t *eş)
İadeler:
- ESP_OK: başarılı
- ESP_ERR_ESPNOW_NOT_INIT: ESPNOW başlatılmadı
- ESP_ERR_ESPNOW_ARG: geçersiz argüman
- ESP_ERR_ESPNOW_FULL: eş listesi dolu
- ESP_ERR_ESPNOW_NO_MEM: bellek yetersiz
- ESP_ERR_ESPNOW_EXIST: eş var
parametreler:
-
aşağıdaki verilerle eş:eş bilgileri:
-
uint8_t
peer_addr[ESP_NOW_ETH_ALEN]; Aynı zamanda istasyonun veya softap'ın MAC adresi olan ESPNOW eş MAC adresi
-
uint8_t lmk[ESP_NOW_KEY_LEN]
Verileri şifrelemek için kullanılan ESPNOW eş yerel ana anahtarı
-
uint8_t kanalı
Eşin ESPNOW verilerini göndermek/almak için kullandığı Wi-Fi kanalı. Değer 0 ise, hangi istasyonun veya softap'ın açık olduğu mevcut kanalı kullanın. Aksi takdirde, istasyonun veya softap'ın açık olduğu kanal olarak ayarlanmalıdır
-
wifi_interface_t ifidx
Eşlerin ESPNOW verilerini göndermek/almak için kullandığı Wi-Fi arayüzü
-
bool şifrelemek
Bu eşin gönderdiği/aldığı ESPNOW verileri şifrelenir veya şifrelenmez
-
geçersiz *özel
ESPNOW eş özel verileri
-
Açıklama:
Eşler arası liste ekleyin
esp_now_send(const uint8_t *peer_addr, const uint8_t *veri, size_t uzunluk)
İadeler:
- ESP_OK: başarılı
- ESP_ERR_ESPNOW_NOT_INIT: ESPNOW başlatılmadı
- ESP_ERR_ESPNOW_ARG: geçersiz argüman
- ESP_ERR_ESPNOW_INTERNAL: dahili hata
- ESP_ERR_ESPNOW_NO_MEM: bellek yetersiz
- ESP_ERR_ESPNOW_NOT_FOUND: eş bulunamadı
- ESP_ERR_ESPNOW_IF: mevcut WiFi arayüzü, emsalininkiyle eşleşmiyor
parametreler:
- peer_addr: eş MAC adresi
- veri: gönderilecek veri
- len: veri uzunluğu
Açıklama:
ESPNOW verilerini gönderin. Bazı durumlarda, bu olur:
- peer_addr NULL değilse, MAC adresi peer_addr ile eşleşen eşe veri gönderin
- peer_addr NULL ise, eşler listesine eklenen tüm eşlere veri gönderin
- Maksimum veri uzunluğu ESP_NOW_MAX_DATA_LEN değerinden az olmalıdır
- esp_now_send döndükten sonra data argümanının gösterdiği tamponun geçerli olması gerekmez
esp_now_register_recv_cb(cb)
İadeler:
- ESP_OK: başarılı
- ESP_ERR_ESPNOW_NOT_INIT: ESPNOW başlatılmadı
- ESP_ERR_ESPNOW_INTERNAL: dahili hata
parametreler:
-
cb: ESPNOW verilerini almak için geri arama işlevi
-
void cb (const uint8_t *mac_addr, const uint8_t *veri, int data_len)
-
mac_addr:
alıcının mac adresi
-
*veri:
veri alma
-
data_len
veri bayt uzunluğu
-
-
Açıklama:
ESPNOW verilerini aldıktan sonra cb işlevini çağırın
Adım 4: ESP-NOW FONKSİYONLARI(ESP8266)
FONKSİYONLAR AÇIKLAMA ESP32 ESP8266
int esp_now_init(void)
İadeler:
- 1 = başarı
- 0=başarısız
Açıklama
ESPNOW işlevini başlat
int esp_now_set_self_role(u8 rolü)
parametreler:
- ESP_NOW_ROLE_IDLE: veri aktarımına izin verilmiyor.
- ESP_NOW_ROLE_CONTROLLER: Sation arayüzüne öncelik verilir
- ESP_NOW_ROLE_SLAVE: SoftAP arayüzüne öncelik verilir
- ESP_NOW_ROLE_COMBO: SoftAPinterface'e öncelik verilir
Açıklama
Cihaz Rolünü ayarlar
int esp_now_register_send_cb(cb)
İadeler:
- 1 = başarı
- 0 = başarısız
parametreler:
-
cb: ESPNOW verilerini bu parametrelerle gönderdikten sonra geri çağırma işlevi adı:
-
void cb (const uint8_t *mac_addr, esp_now_send_status_t durumu)
- mac_addr: alıcının mac adresi
-
durum:
- 1 = başarı
- 0 = başarısız
-
Açıklama
ESPNOW verilerini gönderdikten sonra OnDataSent işlevini çağırın
int esp_now_add_peer(u8 *mac_addr, u8 rolü, u8 kanalı, u8 *key, u8 key_len)
İadeler:
- 1 = başarı
- 0 = başarısız
parametreler:
-
mac_addr
eşin mac adresi
- rol
-
kanal
Değer 0 ise, hangi istasyonun veya softap'ın açık olduğu mevcut kanalı kullanın. Aksi takdirde, istasyonun veya softap'ın açık olduğu kanal olarak ayarlanmalıdır
-
*anahtar
şifreleme anahtarı
-
key_len
anahtar uzunluğu
Açıklama:
Eşler arası liste ekleyin
int esp_now_send(const uint8_t *peer_addr, const uint8_t *veri, size_t uzunluk)
İadeler:
- 1 = Başarı
- 0 = Başarısız
parametreler:
- peer_addr: eş MAC adresi
- veri: gönderilecek veri
- len: veri uzunluğu
Açıklama:
ESPNOW verilerini gönderin. Bazı durumlarda, bu olur:
- peer_addr NULL değilse, MAC adresi peer_addr ile eşleşen eşe veri gönderin
- peer_addr NULL ise, eşler listesine eklenen tüm eşlere veri gönderin
- Maksimum veri uzunluğu ESP_NOW_MAX_DATA_LEN değerinden az olmalıdır
- esp_now_send döndükten sonra data argümanının gösterdiği tamponun geçerli olması gerekmez
int esp_now_register_recv_cb(cb)
İadeler:
- 1 = Başarı
- 0 = Başarısız
parametreler:
-
cb: ESPNOW verilerini almak için geri arama işlevi
-
void cb (const uint8_t *mac_addr, const uint8_t *veri, int data_len)
-
mac_addr:
alıcının mac adresi
-
*veri:
veri alma
-
data_len
veri bayt uzunluğu
-
-
Açıklama:
ESPNOW verilerini aldıktan sonra cb işlevini çağırın
Adım 5: Tek Yönlü İletişim (Gönderen Olarak ESP32)
ESP32, verileri bir ESP8266'ya gönderir. bu kod ile. YayınAdresi'ni karşılık gelen alıcı mac adresinizle değiştirin. Benimki A4:CF:12:C7:9C:77
//Gerekli kütüphaneleri ekle
#include //ess şimdi işlevlerine erişmek için #include //ESP32'ye Wifi Yetenekleri Eklemek için //MAC Adresini yayınAdresi adlı bir diziye kaydedin; uint8_t yayınAdresi = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; //Alıcımın MAC adresi /*yapılandırılmış çoklu değişkenlerin veri tiplerini tanımla ve hepsini struct_message*/ typedef struct struct_message { char a[32]; int b; yüzer c; dize d; bool e; } struct_message; // myData adında bir struct_message oluşturun struct_message myData; // durumunu yazdırmak için veri gönderildiğinde çağrılan işlev void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) { Serial.print("\r\nSon Paket Gönderme Durumu:\t"); Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Teslim Başarılı": "Teslim Başarısız"); } void setup() { //ESP Serial.begin(115200) ile seri iletişim için baud hızını ayarlayın; // Cihazı bir Wi-Fi İstasyonu olarak ayarla WiFi.mode(WIFI_STA);//Wifi'yı başlatır // ESP-NOW'u başlatır ve durumunu döndürür if (esp_now_init() != ESP_OK) { Serial.println("ESP başlatılırken hata oluştu -ŞİMDİ"); dönüş; } //ESPNOW verilerini gönderdikten sonra OnDataSent işlevini çağırın esp_now_register_send_cb(OnDataSent); // Eşi kaydet esp_now_peer_info_t peerInfo; //başlatın ve eş bilgilerini bir adrese işaretçi olarak atayın memcpy(peerInfo.peer_addr, yayınAdresi, 6); // yayınAdresi'nin değerini 6 baytlık peerInfo.peer_addr'e kopyalayın peerInfo.channel = 0; // esp'nin konuştuğu kanal. 0, tanımsız anlamına gelir ve veriler mevcut kanaldan gönderilir. 1-14, yerel aygıt ile aynı olan geçerli kanallardır peerInfo.encrypt = false; //şifrelenmemiş //Cihazı eşleştirilen cihaz listesine ekleyin if (esp_now_add_peer(&peerInfo) != ESP_OK){ Serial.println("Eş eklenemedi"); dönüş; } } void loop() { // Gönderilecek değerleri ayarlayın strcpy(myData.a, "BU BİR KARAKTERDİR"); //"BU BİR KARAKTER"i daha önce tanımlanan "verilerimin" a değişkenine kaydet myData.b = random(1, 20); //rastgele bir değer kaydet myData.c = 1.2; // bir kayan nokta kaydet myData.d = "Merhaba"; //bir dizeyi kaydet myData.e = false; //bir bool kaydet //ESP-NOW aracılığıyla 250 bayt veya daha küçük veri gönder ve durumunu döndürür esp_err_t sonuç = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData)); if (sonuç == ESP_OK) { Serial.println("Başarıyla gönderildi"); } else { Serial.println("Veri gönderilirken hata oluştu"); } gecikme(2000); }
ESP8266, bu kodu kullanarak ESP32'den veri alır.
//Gerekli kütüphaneleri ekle
#include //ESP32'ye Wifi Yetenekleri Eklemek İçin #include //esp'e şimdi erişmek için fonksiyonlar /*birden çok değişkenin veri tiplerini yapılandırıp tanımlayın ve hepsini struct_message*/ typedef struct struct_message { char a[32]; int b; yüzer c; dize d; bool e; } struct_message; // myData struct_message myData adında bir struct_message değişkeni oluşturun; // veri alındığında ve yazdırıldığında çağrılan işlev void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len) { memcpy(&myData, incomingData, sizeof(myData)); Serial.print("Alınan Bayt: "); Seri.println(len); Serial.print("Karakter: "); Serial.println(myData.a); Serial.print("Int: "); Serial.println(myData.b); Serial.print("Kayan: "); Serial.println(myData.c); Serial.print("Dize: "); Serial.println(myData.d); Serial.print("Bool: "); Serial.println(myData.e); Seri.println(); } void setup() { //ESP Serial.begin(115200) ile seri iletişim için baud hızını ayarlayın; // Cihazı bir Wi-Fi İstasyonu olarak ayarla WiFi.mode(WIFI_STA); //Wifi'yı başlatır // ESP-NOW'u başlatır ve durumunu döndürür if (esp_now_init() != 0) { Serial.println("ESP-NOW başlatılırken hata oluştu"); dönüş; } esp_now_set_self_role(ESP_NOW_ROLE_SLAVE); //Bu esp_now_register_recv_cb(OnDataRecv); //ESPNOW verilerini aldıktan sonra OnDataRecv işlevini çağırın } void loop() {}
Adım 6: Tek Yönlü İletişim (Gönderen Olarak ESP8266)
ESP8266, verileri bir ESP32'ye gönderir. bu kod ile. YayınAdresi'ni karşılık gelen alıcı mac adresinizle değiştirin. esp32 adresim 30:AE:A4:F5:03:A4. esp8266'nın diğer işlevleri için buraya gidin
//Gerekli kütüphaneleri ekle
#include //ESP32'ye Wifi Özellikleri Eklemek İçin #include //esp Now işlevlerine erişmek için //MAC Adresini yayınAdresi adlı bir diziye kaydedin; uint8_t yayınAdresi = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*yapılandırılmış çoklu değişkenlerin veri tiplerini tanımlayın ve hepsini struct_message olarak yeniden adlandırın*/ typedef struct struct_message { char a[32]; int b; yüzer c; dize d; bool e; } struct_message; // myData struct_message myData adında yapılandırılmış bir değişken oluşturun; // veri gönderildiğinde çağrılan ve durumunu yazdıran fonksiyon void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) { Serial.print("\r\nSon Paket Gönderme Durumu:\t"); Serial.println(sendStatus == 1 ? "Teslim Başarılı": "Teslim Başarısız"); } void setup() { //ESP Serial.begin(115200) ile seri iletişim için baud hızını ayarlayın; // Cihazı bir Wi-Fi İstasyonu olarak ayarla WiFi.mode(WIFI_STA);//Wifi'yi başlatır // ESP-NOW'u başlatır ve durumunu döndürür if (esp_now_init()) { Serial.println("ESP-NOW başlatılırken hata oluştu"); dönüş; } esp_now_register_send_cb(OnDataSent); //ESPNOW verilerini gönderdikten sonra OnDataSent işlevini çağırın //Cihazı eşleştirilen cihaz listesine ekleyin if (esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)){ Serial.println("Ekran eklenemedi"); dönüş; } } void loop() { // Gönderilecek değerleri ayarlayın strcpy(myData.a, "BU BİR KARAKTERDİR"); //"BU BİR KARAKTER"i daha önce tanımlanan "verilerimin" a değişkenine kaydet myData.b = random(1, 20); //rastgele bir değer kaydet myData.c = 1.2; // bir kayan nokta kaydet myData.d = "SP8266"; //bir dizeyi kaydet myData.e = false; //bir bool kaydet //ESP-NOW aracılığıyla 250 bayt veya daha küçük veri gönder ve durumunu döndürür int sonuç = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData)); if (esp_now_init() != 0) { Serial.println("Başarıyla gönderildi"); } else { Serial.println("Veri gönderilirken hata oluştu"); } gecikme(2000); }
ESP32, bir ESP8266'dan veri alır. bu kod ile. Diğer işlevler için buraya bakın
//Gerekli kütüphaneleri ekle
#include //esp'ye şimdi erişmek için fonksiyonlar #include //ESP32'de Wifi Yetenekleri Eklemek için /*yapılandırılmış ve hepsini yeniden adlandırılmış çoklu değişkenlerin veri türlerini tanımlayın struct_message*/ typedef struct struct_message { char a[32]; int b; yüzer c; dize d; bool e; } struct_mesaj; // myData struct_message myData adında bir struct_message değişkeni oluşturun; // veri alındığında işlev çağrılır ve yazdırılır void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) { memcpy(&myData, incomingData, sizeof(myData)); Serial.print("Alınan Bayt: "); Seri.println(len); Serial.print("Karakter: "); Serial.println(myData.a); Serial.print("Int: "); Serial.println(myData.b); Serial.print("Kayan: "); Serial.println(myData.c); Serial.print("Dize: "); Serial.println(myData.d); Serial.print("Bool: "); Serial.println(myData.e); Seri.println(); } void setup() { //ESP Serial.begin(115200) ile seri iletişim için baud hızını ayarlayın; // Cihazı bir Wi-Fi İstasyonu olarak ayarla WiFi.mode(WIFI_STA); //Wifi'ı başlatır // ESP-NOW'u başlatır ve durumunu döndürür if (esp_now_init() != 0) { Serial.println("ESP-NOW başlatılırken hata oluştu"); dönüş; } esp_now_register_recv_cb(OnDataRecv); //ESPNOW verilerini aldıktan sonra OnDataRecv işlevini çağırın } void loop() {}
Adım 7: İKİ YÖNLÜ İLETİŞİM
ESP32, başlangıçta verileri ESP8266'ya gönderir. ESP8266, alınan mesajı yazdırır ve ardından ESP32'nin seri monitöründe yazdırdığı yanıtları yazdırır.
ESP32 KODU
//Gerekli kütüphaneleri ekle
#include //esp işlevine şimdi erişmek için #include //ESP32'ye Wifi Yetenekleri Eklemek için //MAC Adresini yayınAdresi adlı bir diziye kaydedin; uint8_t yayınAdresi = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; //Alıcımın MAC adresi /*yapılandırılmış çoklu değişkenlerin veri tiplerini tanımla ve hepsini struct_message*/ typedef struct struct_message { char a[32]; int b; yüzer c; dize d; bool e; } struct_mesaj; // myData adında bir struct_message oluşturun struct_message myData; // durumunu yazdırmak için veri gönderildiğinde çağrılan işlev void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) { Serial.print("\r\nSon Paket Gönderme Durumu:\t"); Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Teslim Başarılı": "Teslim Başarısız"); if(status!=ESP_NOW_SEND_SUCCESS){send_data();} } void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) { memcpy(&myData, incomingData, sizeof(myData)); Serial.print("Alınan Bayt: "); Seri.println(len); Serial.print("Karakter: "); Serial.println(myData.a); Serial.print("Int: "); Serial.println(myData.b); Serial.print("Kayan: "); Serial.println(myData.c); Serial.print("Dize: "); Serial.println(myData.d); Serial.print("Bool: "); Serial.println(myData.e); Seri.println(); } void setup() { //ESP Serial.begin(115200) ile seri iletişim için baud hızını ayarlayın; // Cihazı bir Wi-Fi İstasyonu olarak ayarla WiFi.mode(WIFI_STA);//Wifi'yı başlatır // ESP-NOW'u başlatır ve durumunu döndürür if (esp_now_init() != ESP_OK) { Serial.println("ESP başlatılırken hata oluştu -ŞİMDİ"); dönüş; } //ESPNOW verilerini gönderdikten sonra OnDataSent işlevini çağırın esp_now_register_send_cb(OnDataSent); // Eşi kaydet esp_now_peer_info_t peerInfo; //başlatın ve eş bilgilerini bir adrese işaretçi olarak atayın memcpy(peerInfo.peer_addr, yayınAdresi, 6); // yayınAdresi değerini 6 baytlık peerInfo.peer_addr peerInfo.channel'a kopyalayın = 0; // esp'nin konuştuğu kanal. 0 tanımsız anlamına gelir ve veriler mevcut kanaldan gönderilir.1-14, yerel aygıt ile aynı olan geçerli kanallardır peerInfo.encrypt = false; //şifrelenmemiş //Cihazı eşleştirilen cihaz listesine ekleyin if (esp_now_add_peer(&peerInfo) != ESP_OK){ Serial.println("Eş eklenemedi"); dönüş; } esp_now_register_recv_cb(OnDataRecv); //ESPNOW verilerini aldıktan sonra OnDataRecv fonksiyonunu çağır send_data(); } void loop() {} void send_data(){ Serial.println("Gönderiliyor"); // Gönderilecek değerleri strcpy(myData.a, "BU BİR KARAKTERDİR"); //"BU BİR KARAKTER"i daha önce tanımlanan "verilerimin" a değişkenine kaydet myData.b = random(1, 20); //rastgele bir değer kaydet myData.c = 1.2; // bir kayan nokta kaydet myData.d = "ESP32"; //bir dizeyi kaydet myData.e = false; //bir bool kaydet //ESP-NOW aracılığıyla 250 bayt veya daha küçük veri gönder ve durumunu döndürür esp_err_t sonuç = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData)); if (sonuç == ESP_OK) { Serial.println("Başarıyla gönderildi");} else { Serial.println("Veri gönderilirken hata oluştu"); } }
ESP8266 KODU
//Gerekli kütüphaneleri ekle
#include //ESP32'ye Wifi Özellikleri Eklemek İçin #include //esp Now işlevlerine erişmek için //MAC Adresini yayınAdresi adlı bir diziye kaydedin; uint8_t yayınAdresi = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*yapılandırılmış çoklu değişkenlerin veri tiplerini tanımlayın ve hepsini struct_message olarak yeniden adlandırın*/ typedef struct struct_message { char a[32]; int b; yüzer c; dize d; bool e; } struct_mesaj; // myData struct_message myData adında bir struct_message değişkeni oluşturun; // veri alındığında ve yazdırıldığında çağrılan işlev void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len) { memcpy(&myData, incomingData, sizeof(myData)); Serial.print("Alınan Bayt: "); Seri.println(len); Serial.print("Karakter: "); Serial.println(myData.a); Serial.print("Int: "); Serial.println(myData.b); Serial.print("Kayan: "); Serial.println(myData.c); Serial.print("Dize: "); Serial.println(myData.d); Serial.print("Bool: "); Serial.println(myData.e); Seri.println(); send_data(); } void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) { Serial.print("\r\nSon Paket Gönderme Durumu:\t"); Serial.println(sendStatus == 1 ? "Teslim Başarılı": "Teslim Başarısız"); if(sendStatus !=1){ send_data(); } } void send_data(){ // Gönderilecek değerleri ayarlayın strcpy(myData.a, "BU BİR KARARDIR"); //"BU BİR KARAKTER"i daha önce tanımlanan "verilerimin" a değişkenine kaydet myData.b = random(1, 20); //rastgele bir değer kaydet myData.c = 1.2; // bir kayan nokta kaydet myData.d = "ESP8266"; //bir dizeyi kaydet myData.e = false; //bir bool kaydet esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData)); } void setup() { //ESP Serial.begin(115200) ile seri iletişim için baud hızını ayarlayın; // Cihazı bir Wi-Fi İstasyonu olarak ayarla WiFi.mode(WIFI_STA); //Wifi'ı başlatır // ESP-NOW'u başlatır ve durumunu döndürür if (esp_now_init() != 0) { Serial.println("ESP-NOW başlatılırken hata oluştu"); dönüş; } if (esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0)){ Serial.println("Eş eklenemedi"); dönüş; } esp_now_set_self_role(ESP_NOW_ROLE_COMBO); esp_now_register_send_cb(OnDataSent); esp_now_set_self_role(ESP_NOW_ROLE_COMBO); //Bu esp_now_register_recv_cb(OnDataRecv); //ESPNOW verilerini aldıktan sonra OnDataRecv işlevini çağırın } void loop() {}
Adım 8: REFERANSLAR
ESPNOW_32_Örnek
ESPNOW_8266 Örnek
WIFI.h
ESP8266WiFi.h
ESP8266 için esp_now.h
ESP32 için esp_now.h
esp_now resmi belgesi(İşlevlerin Daha İyi Açıklaması)
ESP-NOW Resmi Kılavuzu
Önerilen:
Bir Analog Pin Kullanılarak Çoklu Analog Değerler Nasıl Okunur: 6 Adım (Resimlerle)
Bir Analog Pin Kullanarak Çoklu Analog Değerler Nasıl Okunur: Bu derste, size sadece bir analog giriş pini kullanarak çoklu analog değerleri nasıl okuyacağınızı göstereceğim
Nasıl Yapılır - Esp-12F Mini WiFi Modülü ESP8266 18650 Nodemcu Pil 0.96” OLED DEMO Arduino GUI Üzerinden: 4 Adım
Nasıl Yapılır - Esp-12F Mini WiFi Modülü ESP8266 18650 Nodemcu Pil 0.96” OLED DEMO Arduino GUI Üzerinden: Hallo,hier möchte ich Euch zeigen wie Ihr das mit auf der Hauptplatine ayrıntılı OLED Ekran iyi. Um es möglichst einfach zu halten, benutze ich die ARDUINO GUI zum schreiben des CODEs und zum hochladen der Firmwa
Z44N MOSFET Kullanılarak Aşırı Su Akış Alarm Devresi Nasıl Yapılır: 7 Adım
Z44N MOSFET Kullanarak Su Üstü Debi Alarm Devresi Nasıl Yapılır : Merhaba arkadaşlar bugün bir devre taşma su alarmı yapacağım.Temel olarak bu devreyi su tankımızın aşırı debisini bilmek için kullanabiliriz. IRFZ44N MOSFET kullanan bu proje. Haydi başlayalım
Öğretici: MC-18 Manyetik Anahtar Sensörü Kullanılarak Kapı Alarmı Nasıl Yapılır: 3 Adım
Öğretici: MC-18 Manyetik Anahtar Sensörü Alarmını Kullanarak Kapı Alarmı Nasıl Yapılır: Merhaba arkadaşlar, normalde kapalı modda çalışan MC-18 Manyetik Anahtarlı Sensör Alarmı ile ilgili bir eğitim yapacağım.Ama önce size anlatayım. kısaca normalde yakın ne demek. Normalde açık ve normalde kapalı olmak üzere iki tür mod vardır
GPRS Üzerinden TCP/IP Bağlantısı: SIM900A Modülü Kullanılarak Sunucuya Nasıl Veri Gönderilir: 4 Adım
GPRS Üzerinden TCP/IP Bağlantısı: SIM900A Modülünü Kullanarak Sunucuya Nasıl Veri Gönderilir: Bu dersimizde sizlere sim900 modülü kullanılarak TCP sunucusuna nasıl veri gönderileceğini anlatacağım. Ayrıca sunucudan istemciye nasıl veri alabileceğimizi göreceğiz (GSM modülü)