İçindekiler:

ESP32 ve ESP8266 Kullanılarak ESP-NOW Üzerinden Çoklu ESP Konuşması Nasıl Yapılır: 8 Adım
ESP32 ve ESP8266 Kullanılarak ESP-NOW Üzerinden Çoklu ESP Konuşması Nasıl Yapılır: 8 Adım

Video: ESP32 ve ESP8266 Kullanılarak ESP-NOW Üzerinden Çoklu ESP Konuşması Nasıl Yapılır: 8 Adım

Video: ESP32 ve ESP8266 Kullanılarak ESP-NOW Üzerinden Çoklu ESP Konuşması Nasıl Yapılır: 8 Adım
Video: Nesnelerin Interneti IoT Temel Seviye Ders 2: 2024, Temmuz
Anonim
ESP32 ve ESP8266 Kullanılarak ESP-NOW Üzerinden Çoklu ESP Konuşması Nasıl Yapılır
ESP32 ve ESP8266 Kullanılarak ESP-NOW Üzerinden Çoklu ESP Konuşması Nasıl Yapılır

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

Board Mac Adresini Alın
Board Mac Adresini Alın
Board Mac Adresini Alın
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ış:

  1. Şimdi esp ve wifi kitaplıklarını dahil edin
  2. Alıcı ESP'nin mac adresini kaydedin
  3. Gönderilen/alınan mesajın veri yapısını tanımlayın
  4. Kurulumda, wifi'yi istasyon moduna ayarlayın
  5. esp_now'u başlat
  6. veri gönderip aldıktan sonra çağrılan geri arama işlevini yapın ve kaydedin
  7. Esp8266 için rolünü tanımlayın
  8. eş veya alıcı esp'yi kaydedin
  9. 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

İKİ YÖNLÜ İLETİŞİM
İKİ YÖNLÜ İLETİŞİM
İKİ YÖNLÜ İLETİŞİM
İ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: