Mündəricat:
- Təchizat
- Addım 1: Board Mac ünvanını əldə edin
- Addım 2: ESP-NOW-u necə işə salmaq olar
- Addım 3: ESP-NOW FUNKSİYALARI (ESP32)
- Addım 4: ESP-NOW FUNKSİYALARI (ESP8266)
- Addım 5: Bir Yönlü Əlaqə (Göndərən ESP32)
- Addım 6: Bir Yönlü Əlaqə (ESP8266 Göndərən Olaraq)
- Addım 7: İKİ YOLLU ƏLAQƏ
- Addım 8: ƏDƏBİYYATLAR
Video: ESP32 və ESP8266 istifadə edərək ESP-NOW vasitəsilə birdən çox ESP Söhbəti necə aparılır: 8 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:44
Davam edən layihəmdə, router olmadan bir -birimizlə danışmaq üçün birdən çox ESP lazımdır. Bunu etmək üçün, ESP-də bir router olmadan bir-birimizlə simsiz əlaqə qurmaq üçün ESP-NOW istifadə edəcəyəm.
Təchizat
İstifadə etdiyim şeylər:
ESP32 DEV modulu
NODEMCU 1.0 (ESP12E Modulu)
Addım 1: Board Mac ünvanını əldə edin
ESP-now vasitəsi ilə, ESP cihazları, özəl ünvanına məlumat göndərməklə bir-biriylə danışır və eyni zamanda esp-in intilizasiyasına əsaslanan daxili giriş nöqtəsi şəbəkəsinə qoşulur.. Beləliklə, hər cihazın MAC ünvanını təyin edin. ESP32 və ESP8266 lövhə parametrlərimə əlavə olunur
ESP32 üçün
#"WiFi.h" daxil edin // ESP32 WIFI imkanlarına daxil olmaq üçün
void setup () {Serial.begin (115200); Serial.print ("ESP32 Board MAC Ünvanı:"); Serial.println (WiFi.macAddress ()); // öz MAC ünvanını yazır} void loop () {}
ESP8266 üçün
#include // ESP8266 WIFI imkanlarına daxil olmaq üçün istifadə olunan kitabxana
void setup () {Serial.begin (115200); Serial.println (); Serial.print ("ESP8266 Board MAC Ünvanı:"); Serial.println (WiFi.macAddress ()); // öz MAC ünvanını yazır} void loop () {}
MAC adresim bunlardır:
- ESP32 - 30: AE: A4: F5: 03: A4
- ESP8266: A4: CF: 12: C7: 9C: 77
Addım 2: ESP-NOW-u necə işə salmaq olar
İşin necə aparılacağına dair ümumi bir fikir:
- İndi esp və wifi kitabxanalarını daxil edin
- Alıcının ESP -nin mac ünvanını qeyd edin
- Göndərilən/alınan mesajın məlumat quruluşunu təyin edin
- Quraşdırmada wifi stansiya rejiminə qoyun
- Esp_now -u işə salın
- məlumatları göndərdikdən və aldıqdan sonra çağırılan geri çağırma funksiyasını qeyd edin
- Esp8266 üçün rolunu təyin edin
- həmyaşıdını və ya alıcısını qeyd edin esp
- Məlumat göndərin
Addım 3: ESP-NOW FUNKSİYALARI (ESP32)
esp_now_init (etibarsız)
Qayıdış:
- ESP_OK: uğur qazanın
- ESP_ERR_ESPNOW_INTERNAL: Daxili xəta
Təsvir:
ESPNOW funksiyasını işə salın
esp_now_register_send_cb (cb)
Qayıdışlar:
- ESP_OK: uğur qazanın
- ESP_ERR_ESPNOW_NOT_INIT: ESPNOW işə salınmır
- ESP_ERR_ESPNOW_INTERNAL: daxili səhv
Parametrlər:
-
cb: bu parametrlərlə ESPNOW məlumatlarını göndərdikdən sonra geri çağırma funksiyası adı:
-
boş cb (const uint8_t *mac_addr, esp_now_send_status_t statusu)
- mac_addr: alıcının mac ünvanı
-
status:
- 1 = uğur
- 0 = uğursuz
-
Təsvir:
ESPNOW məlumatlarını göndərdikdən sonra OnDataSent funksiyasına zəng edin
esp_now_add_peerconst esp_now_peer_info_t *peer)
Qayıdışlar:
- ESP_OK: uğur qazanın
- ESP_ERR_ESPNOW_NOT_INIT: ESPNOW işə salınmır
- ESP_ERR_ESPNOW_ARG: etibarsız arqument
- ESP_ERR_ESPNOW_FULL: həmyaşıdların siyahısı doludur
- ESP_ERR_ESPNOW_NO_MEM: yaddaş bitib
- ESP_ERR_ESPNOW_EXIST: peer mövcuddur
Parametrlər:
-
peer: peer məlumatları aşağıdakı məlumatlarla:
-
uint8_t
peer_addr [ESP_NOW_ETH_ALEN]; ESPNOW peer MAC ünvanı, eyni zamanda stansiyanın və ya proqramın MAC ünvanıdır
-
uint8_t lmk [ESP_NOW_KEY_LEN]
ESPNOW, məlumatları şifrələmək üçün istifadə olunan yerli master açarıdır
-
uint8_t kanalı
ESPNOW məlumatlarını göndərmək/almaq üçün həmyaşıdlarının istifadə etdiyi Wi-Fi kanalı. Dəyər 0 olarsa, stansiyanın və ya proqramın işlədiyi kanaldan istifadə edin. Əks təqdirdə, stansiyanın və ya proqramın işlədiyi kanal olaraq təyin olunmalıdır
-
wifi_interface_t ifidx
ESPNOW məlumatlarını göndərmək/almaq üçün həmyaşıdlarının istifadə etdiyi Wi-Fi interfeysi
-
bool şifrələyin
Bu həmyaşıdının göndərdiyi/aldığı ESPNOW məlumatları şifrələnir və ya şifrələnmir
-
void *şəxsi
Şəxsi məlumatları nəzərdən keçirin
-
Təsvir:
Həmyaşıdlar siyahısına həmyaşıd əlavə edin
esp_now_send (const uint8_t *peer_addr, const uint8_t *data, size_t len)
Qayıdışlar:
- ESP_OK: uğur qazanın
- ESP_ERR_ESPNOW_NOT_INIT: ESPNOW işə salınmır
- ESP_ERR_ESPNOW_ARG: etibarsız arqument
- ESP_ERR_ESPNOW_INTERNAL: daxili səhv
- ESP_ERR_ESPNOW_NO_MEM: yaddaş bitib
- ESP_ERR_ESPNOW_NOT_FOUND: peer tapılmadı
- ESP_ERR_ESPNOW_IF: mövcud WiFi interfeysi həmyaşıdları ilə uyğun gəlmir
Parametrlər:
- peer_addr: peer MAC ünvanı
- məlumat: göndəriləcək məlumatlar
- len: məlumatların uzunluğu
Təsvir:
ESPNOW məlumatlarını göndərin. Bəzi hallarda bu baş verir:
- Peer_addr NULL deyilsə, MAC ünvanı peer_addr ilə uyğun olan həmyaşıdına məlumat göndərin
- Peer_addr NULL olarsa, məlumatları siyahıya əlavə olunan bütün həmyaşıdlarına göndərin
- Maksimum məlumat uzunluğu ESP_NOW_MAX_DATA_LEN -dən az olmalıdır
- Məlumat arqumentinin göstərdiyi tamponun esp_now_send qaytarılmasından sonra etibarlı olmasına ehtiyac yoxdur
esp_now_register_recv_cb (cb)
Qayıdışlar:
- ESP_OK: uğur qazanın
- ESP_ERR_ESPNOW_NOT_INIT: ESPNOW işə salınmır
- ESP_ERR_ESPNOW_INTERNAL: daxili xəta
Parametrlər:
-
cb: ESPNOW məlumatlarını qəbul etmək üçün geri çağırma funksiyası
-
boş cb (const uint8_t *mac_addr, const uint8_t *data, int data_len)
-
mac_addr:
alıcının mac ünvanı
-
*məlumat:
məlumatların qəbulu
-
data_len
məlumat bayt uzunluğu
-
-
Təsvir:
ESPNOW məlumatlarını aldıqdan sonra cb funksiyasına zəng edin
Addım 4: ESP-NOW FUNKSİYALARI (ESP8266)
FUNKSİYALARIN TƏSVİRİ ESP32 ESP8266
int esp_now_init (boş)
Qayıdışlar:
- 1 = uğur
- 0 = uğursuz
Təsvir
ESPNOW funksiyasını işə salın
int esp_now_set_self_role (u8 rolu)
Parametrlər:
- ESP_NOW_ROLE_IDLE: məlumat ötürülməsinə icazə verilmir.
- ESP_NOW_ROLE_CONTROLLER: Sation interfeysinə üstünlük verilir
- ESP_NOW_ROLE_SLAVE: prioritet SoftAP interfeysinə verilir
- ESP_NOW_ROLE_COMBO: SoftAPinterface -ə üstünlük verilir
Təsvir
Cihazın Rolunu təyin edir
int esp_now_register_send_cb (cb)
Qayıdışlar:
- 1 = uğur
- 0 = uğursuz
Parametrlər:
-
cb: bu parametrlərlə ESPNOW məlumatlarını göndərdikdən sonra geri çağırma funksiyası adı:
-
boş cb (const uint8_t *mac_addr, esp_now_send_status_t statusu)
- mac_addr: alıcının mac ünvanı
-
status:
- 1 = uğur
- 0 = uğursuz
-
Təsvir
ESPNOW məlumatlarını göndərdikdən sonra OnDataSent funksiyasına zəng edin
int esp_now_add_peer (u8 *mac_addr, u8 rolu, u8 kanalı, u8 *düyməsi, u8 key_len)
Qayıdışlar:
- 1 = uğur
- 0 = uğursuz
Parametrlər:
-
mac_addr
həmyaşıdının mac ünvanı
- rolu
-
kanal
Dəyər 0 olarsa, stansiyanın və ya proqramın işlədiyi kanaldan istifadə edin. Əks təqdirdə, stansiyanın və ya proqramın işlədiyi kanal olaraq təyin olunmalıdır
-
*açar
şifrələmə üçün açar
-
key_len
açarın uzunluğu
Təsvir:
Həmyaşıdlar siyahısına həmyaşıd əlavə edin
int esp_now_send (const uint8_t *peer_addr, const uint8_t *data, size_t len)
Qayıdışlar:
- 1 = Uğur
- 0 = Uğursuz
Parametrlər:
- peer_addr: peer MAC ünvanı
- məlumat: göndəriləcək məlumatlar
- len: məlumatların uzunluğu
Təsvir:
ESPNOW məlumatlarını göndərin. Bəzi hallarda bu baş verir:
- Peer_addr NULL deyilsə, MAC ünvanı peer_addr ilə uyğun olan həmyaşıdına məlumat göndərin
- Peer_addr NULL olarsa, məlumatları siyahıya əlavə olunan bütün həmyaşıdlarına göndərin
- Maksimum məlumat uzunluğu ESP_NOW_MAX_DATA_LEN -dən az olmalıdır
- Məlumat arqumentinin göstərdiyi tamponun esp_now_send qaytarılmasından sonra etibarlı olmasına ehtiyac yoxdur
int esp_now_register_recv_cb (cb)
Qayıdışlar:
- 1 = Uğur
- 0 = Uğursuz
Parametrlər:
-
cb: ESPNOW məlumatlarını qəbul etmək üçün geri çağırma funksiyası
-
boş cb (const uint8_t *mac_addr, const uint8_t *data, int data_len)
-
mac_addr:
alıcının mac ünvanı
-
*məlumat:
məlumatların qəbulu
-
data_len
məlumat bayt uzunluğu
-
-
Təsvir:
ESPNOW məlumatlarını aldıqdan sonra cb funksiyasına zəng edin
Addım 5: Bir Yönlü Əlaqə (Göndərən ESP32)
ESP32 məlumatları bir ESP8266 -ya göndərir. bu kodla. Yayım ünvanını düzəldici qəbuledicinizin mac ünvanına dəyişin. Mənimki A4: CF: 12: C7: 9C: 77 idi
// Lazımi kitabxanaları əlavə edin
#include // esp funksiyalarına daxil olmaq üçün #include // ESP32 -də Wifi İmkanları əlavə etmək üçün // MAC ünvanını yayınAddress adlı bir massivdə qeyd edin; uint8_t yayımAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // Alıcımın MAC ünvanı/*çoxsaylı dəyişənlərin məlumat növlərini qurdu və hamısını struct_message*/typedef struct struct_message {char a [32] olaraq dəyişdirdi; int b; üzmək c; String d; bool e; } struktur_message; // myData adlı bir struct_message yaradın struct_message myData; // statusu boş olan OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t status) çap etmək üçün məlumatlar göndərildikdə // funksiyası çağırılır {Serial.print ("\ r / nSon Paket Göndərmə Vəziyyəti: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Çatdırılma Müvəffəqiyyəti": "Çatdırılmadı"); } void setup () {// ESP Serial.begin (115200) ilə serial ünsiyyət üçün baud sürətini təyin edin; // Cihazı Wi-Fi Station WiFi.mode (WIFI_STA) olaraq təyin edin; // wifi-ni işə salır // ESP-NOW-ı işə salın və (esp_now_init ()! = ESP_OK) {Serial.println ("ESP-ni işə salmaqda səhv -İNDİ"); qayıtmaq; } // ESPNOW məlumatlarını esp_now_register_send_cb (OnDataSent) göndərdikdən sonra OnDataSent funksiyasına zəng edin; // peer esp_now_peer_info_t peerInfo -da qeydiyyatdan keçin; // həmyaşıd məlumatlarını bir addres memcpy üçün göstərici olaraq işə salın və təyin edin (peerInfo.peer_addr, yayımAddress, 6); // 6 baytlıq yayımAddress dəyərini peerInfo.peer_addr peerInfo.channel = 0 -a kopyalayın; // espin danışdığı kanal. 0, təyin olunmamış deməkdir və məlumatlar cari kanalda göndəriləcək. 1-14 yerli peerInfo.encrypt = false ilə eyni olan etibarlı kanallardır; // şifrələnməyib // Cihazı cütləşdirilmiş cihaz siyahısına əlavə edin, əgər (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Peer əlavə olunmadı"); qayıtmaq; }} void loop () {// Strcpy göndərmək üçün dəyərləri təyin edin (myData.a, "BU BİR CHARDIR"); // "THIS IS A CHAR" ı əvvəllər təyin etdiyim "data" dəyişəninə saxlamaq myData.b = təsadüfi (1, 20); // təsadüfi bir dəyər saxla myData.c = 1.2; // bir float saxlamaq myData.d = "Salam"; // bir sətir saxla myData.e = false; // bool saxlamaq // ESP-NOW vasitəsilə 250 baytdan az və ya bərabər məlumat göndərin və statusunu qaytarır esp_err_t result = esp_now_send (yayımAddress, (uint8_t *) & myData, sizeof (myData)); if (nəticə == ESP_OK) {Serial.println ("Uğurla göndərildi"); } başqa {Serial.println ("Məlumat göndərərkən xəta"); } gecikmə (2000); }
ESP8266 bu kodu istifadə edərək ESP32 -dən məlumat alır.
// Lazımi kitabxanaları əlavə edin
#include // ESP32 -də Wifi İmkanları Əlavə etmək üçün #include // esp -ə daxil olmaq üçün artıq funksiyaları yerinə yetirmək üçün**strukturlaşdırılmış və hamısını struct_message* /typedef struct struct_message {char a [32] olaraq adlandırmaqla çoxlu dəyişənlərin məlumat növlərini təyin etmək; int b; üzmək c; String d; bool e; } struktur_message; // myData adlı bir dəyişən struct_message yaradın struct_message myData; // məlumat alındıqda və onu çap edəndə çağırılan funksiya OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Baytlar alındı:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Üzmək:"); Serial.println (myData.c); Serial.print ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// ESP Serial.begin (115200) ilə ardıcıl ünsiyyət üçün baud sürətini təyin edin; // Cihazı Wi-Fi Station WiFi.mode (WIFI_STA) olaraq təyin edin; // wifi-ni işə salır // ESP-NOW-ı işə salın və əgər vəziyyətini qaytararsa (esp_now_init ()! = 0) {Serial.println ("ESP-NOW başlatma xətası"); qayıtmaq; } esp_now_set_self_role (ESP_NOW_ROLE_SLAVE); // Bu esp esp_now_register_recv_cb (OnDataRecv) rolunu müəyyən edir; // ESPNOW məlumatlarını aldıqdan sonra OnDataRecv funksiyasına zəng edin} void loop () {}
Addım 6: Bir Yönlü Əlaqə (ESP8266 Göndərən Olaraq)
ESP8266 məlumatları bir ESP32 -ə göndərir. bu kodla. Yayım ünvanını düzəldici qəbuledicinizin mac ünvanına dəyişin. Mənim esp32 ünvanım 30: AE: A4: F5: 03: A4. Esp8266 üçün digər funksiyalar üçün bura daxil olun
// Lazımi kitabxanaları əlavə edin
#include // ESP32 -də Wifi İmkanlarını Əlavə etmək üçün #include // esp -in indi funksiyalarına daxil olmaq üçün // MAC ünvanını yayınAddress adlı bir massivdə qeyd edin; uint8_t yayımAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*çoxsaylı dəyişənlərin məlumat növlərini qurmaq və hamısını struct_message adlandırmaq*/ typedef struct struct_message {char a [32]; int b; üzmək c; String d; bool e; } struktur_message; // myData adlı strukturlaşdırılmış bir dəyişən yaradın struct_message myData; // məlumat göndərildikdə və statusunun boş olduğu OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) çap edildikdə // funksiyası çağırılır {Serial.print ("\ r / nSon Paket Göndərmə Vəziyyəti: / t"); Serial.println (sendStatus == 1? "Çatdırılma Müvəffəqiyyəti": "Çatdırılmadı"); } void setup () {// ESP Serial.begin (115200) ilə ardıcıl ünsiyyət üçün baud sürətini təyin edin; // Cihazı Wi-Fi Stansiyası WiFi.mode (WIFI_STA) olaraq təyin edin; // wifi-ni işə salır // ESP-NOW-ı işə salın və (esp_now_init ()) {Serial.println ("ESP-NOW başlatma xətası") olduqda statusunu qaytarır.); qayıtmaq; } esp_now_register_send_cb (OnDataSent); // ESPNOW məlumatlarını göndərdikdən sonra OnDataSent funksiyasına zəng edin // Cihazı qoşalaşmış cihaz siyahısına əlavə edin, əgər (esp_now_add_peer (yayımAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)) {Serial.println ("Həmyaşıd əlavə olunmadı"); qayıtmaq; }} void loop () {// Strcpy göndərmək üçün dəyərləri təyin edin (myData.a, "BU BİR CHARDIR"); // "THIS IS A CHAR" ı əvvəllər təyin etdiyim "data" dəyişəninə saxlamaq myData.b = təsadüfi (1, 20); // təsadüfi bir dəyər saxla myData.c = 1.2; // bir float saxlamaq myData.d = "SP8266"; // bir sətir saxla myData.e = false; // bool saxlamaq // ESP-NOW vasitəsilə 250 baytdan az və ya bərabər məlumat göndərin və statusunu qaytarır int result = esp_now_send (yayımAddress, (uint8_t *) & myData, sizeof (myData)); if (esp_now_init ()! = 0) {Serial.println ("Uğurla göndərildi"); } başqa {Serial.println ("Məlumat göndərərkən xəta"); } gecikmə (2000); }
ESP32, bir ESP8266 -dan məlumat alır. bu kodla. Digər funksiyalar üçün burada hakimlik edin
// Lazımi kitabxanaları əlavə edin
#include // esp funksiyalarına daxil olmaq üçün #include // ESP32 -də Wifi İmkanları əlavə etmək üçün**strukturlaşdırılmış və hamısının struktur_message* /typedef struct struct_message {char a [32] olaraq adlandırılan çoxsaylı dəyişənlərin məlumat növlərini təyin edin; int b; üzmək c; String d; bool e; } struktur_message; // myData adlı bir dəyişən struct_message yaradın struct_message myData; // məlumat alındıqda və onu yazdırmadıqda çağırılan funksiya OnDataRecv (const uint8_t * mac, const uint8_t * incomingData, int len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Baytlar alındı:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Üzmək:"); Serial.println (myData.c); Serial.print ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// ESP Serial.begin (115200) ilə serial ünsiyyət üçün baud sürətini təyin edin; // Cihazı Wi-Fi Station WiFi.mode (WIFI_STA) olaraq təyin edin; // wifi-ni işə salır // ESP-NOW-ı işə salın və əgər vəziyyətini qaytararsa (esp_now_init ()! = 0) {Serial.println ("ESP-NOW başlatma xətası"); qayıtmaq; } esp_now_register_recv_cb (OnDataRecv); // ESPNOW məlumatlarını aldıqdan sonra OnDataRecv funksiyasına zəng edin} void loop () {}
Addım 7: İKİ YOLLU ƏLAQƏ
ESP32, başlanğıc haqqında məlumatları ESP8266 -ya göndərir. ESP8266 alınan mesajı çap edir və sonra cavablarını ESP32 seriyalı monitorunda çap edir.
ESP32 KODU
// Lazımi kitabxanaları əlavə edin
#include // esp -in indi funksiyalarına daxil olmaq üçün #include // ESP32 -də Wifi İmkanları əlavə etmək üçün // MAC ünvanını yayınAddress adlı bir massivdə qeyd edin; uint8_t yayımAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // Alıcımın MAC ünvanı/*çoxsaylı dəyişənlərin məlumat növlərini təyin edir və hamısını struct_message*/typedef struct struct_message {char a [32] olaraq dəyişir; int b; üzmək c; String d; bool e; } struktur_message; // myData adlı bir struct_message yaradın struct_message myData; // statusu boş olan OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t status) çap etmək üçün məlumatlar göndərildikdə // funksiyası çağırılır {Serial.print ("\ r / nSon Paket Göndərmə Vəziyyəti: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Çatdırılma Müvəffəqiyyəti": "Çatdırılmadı"); if (status! = ESP_NOW_SEND_SUCCESS) {send_data ();}} OnDataRecv (const uint8_t * mac, const uint8_t * incomingData, int len) {memcpy (& myData, incomingData, sizeof (myData)) etibarsızdır; Serial.print ("Baytlar alındı:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Üzmək:"); Serial.println (myData.c); Serial.print ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// ESP Serial.begin (115200) ilə serial ünsiyyət üçün baud sürətini təyin edin; // Cihazı Wi-Fi Station WiFi.mode (WIFI_STA) olaraq təyin edin; // wifi-ni işə salır // ESP-NOW-ı işə salın və (esp_now_init ()! = ESP_OK) {Serial.println ("ESP-ni işə salmaqda səhv -İNDİ"); qayıtmaq; } // ESPNOW məlumatlarını esp_now_register_send_cb (OnDataSent) göndərdikdən sonra OnDataSent funksiyasına zəng edin; // peer esp_now_peer_info_t peerInfo -da qeydiyyatdan keçin; // həmyaşıd məlumatlarını bir addres memcpy üçün göstərici olaraq işə salın və təyin edin (peerInfo.peer_addr, yayımAddress, 6); // 6 baytlıq yayımAddress dəyərini peerInfo.peer_addr peerInfo.channel = 0 -a kopyalayın; // espin danışdığı kanal. 0, təyin olunmamış deməkdir və məlumatlar cari kanalda göndəriləcək.1-14 yerli peerInfo.encrypt = false ilə eyni olan etibarlı kanallardır; // şifrələnməyib // Cihazı cütləşdirilmiş cihaz siyahısına əlavə edin, əgər (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Peer əlavə olunmadı"); qayıtmaq; } esp_now_register_recv_cb (OnDataRecv); // ESPNOW məlumatlarını göndərdikdən sonra OnDataRecv funksiyasını çağırın send_data (); } void loop () {} void send_data () {Serial.println ("Göndərilir"); // Strcpy göndərmək üçün dəyərlər təyin edin (myData.a, "BU BİR CHAR"); // "THIS IS A CHAR" ı əvvəllər təyin etdiyim "data" dəyişəninə saxlamaq myData.b = təsadüfi (1, 20); // təsadüfi bir dəyər saxla myData.c = 1.2; // bir float saxlamaq myData.d = "ESP32"; // bir sətir saxla myData.e = false; // bool saxlamaq // ESP-NOW vasitəsilə 250 baytdan az və ya bərabər məlumat göndərin və statusunu qaytarır esp_err_t result = esp_now_send (yayımAddress, (uint8_t *) & myData, sizeof (myData)); if (nəticə == ESP_OK) {Serial.println ("Uğurla göndərildi");} başqa {Serial.println ("Məlumat göndərmə xətası"); }}
ESP8266 KODU
// Lazımi kitabxanaları əlavə edin
#include // ESP32 -də Wifi İmkanlarını Əlavə etmək üçün #include // esp -in indi funksiyalarına daxil olmaq üçün // MAC ünvanını yayınAddress adlı bir massivdə qeyd edin; uint8_t yayımAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*çoxsaylı dəyişənlərin məlumat növlərini qurmaq və hamısını struct_message adlandırmaq*/ typedef struct struct_message {char a [32]; int b; üzmək c; String d; bool e; } struktur_message; // myData adlı bir dəyişən struct_message yaradın struct_message myData; // məlumat alındıqda və onu çap edəndə çağırılan funksiya OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Baytlar alındı:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Üzmək:"); Serial.println (myData.c); Serial.print ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); send_data (); } etibarsız OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nSon Paket Göndərmə Vəziyyəti: / t"); Serial.println (sendStatus == 1? "Çatdırılma Müvəffəqiyyəti": "Çatdırılmadı"); if (sendStatus! = 1) {send_data (); }} void send_data () {// Strcpy göndərmək üçün dəyərləri təyin edin (myData.a, "BU BİR CHARDIR"); // "THIS IS A CHAR" ı əvvəllər təyin etdiyim "data" dəyişəninə saxlamaq myData.b = təsadüfi (1, 20); // təsadüfi bir dəyər saxla myData.c = 1.2; // bir float saxlamaq myData.d = "ESP8266"; // bir sətir saxla myData.e = false; // bir bool saxlamaq esp_now_send (yayımAddress, (uint8_t *) & myData, sizeof (myData)); } void setup () {// ESP Serial.begin (115200) ilə serial ünsiyyət üçün baud sürətini təyin edin; // Cihazı Wi-Fi Station WiFi.mode (WIFI_STA) olaraq təyin edin; // wifi-ni işə salır // ESP-NOW-ı işə salın və əgər vəziyyətini qaytararsa (esp_now_init ()! = 0) {Serial.println ("ESP-NOW başlatma xətası"); qayıtmaq; } if (esp_now_add_peer (yayımAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0)) {Serial.println ("Həmyaşıd əlavə etmək alınmadı"); qayıtmaq; } 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 esp_now_register_recv_cb (OnDataRecv) rolunu müəyyən edir; // ESPNOW məlumatlarını aldıqdan sonra OnDataRecv funksiyasına zəng edin} void loop () {}
Addım 8: ƏDƏBİYYATLAR
ESPNOW_32_Məsələn
ESPNOW_8266 Nümunəsi
WIFI.h
ESP8266WiFi.h
esp_now.h ESP8266 üçün
esp_now.h ESP32 üçün
esp_now rəsmi sənədi (Funksiyaların daha yaxşı izahı)
ESP-NOW Rəsmi Bələdçisi
Tövsiyə:
Photoshop 2020 -dən istifadə edərək birdən çox görüntünün fonunu silin: 5 addım
Photoshop 2020 -dən istifadə edərək birdən çox görüntünün arxa planını silin: şəkilin arxa planını silmək indi çox asandır! Sadə bir skript istifadə edərək çoxlu (toplu) şəkillərin arxa planını silmək üçün Adobe Photoshop 2020 -dən necə istifadə etmək olar
Bir Analog Pin istifadə edərək birdən çox Analog Dəyəri Oxumaq: 6 Addım (Şəkillərlə)
Bir Analog Pin istifadə edərək Birdən çox Analog Dəyəri Oxumaq: Bu təlimatda sizə yalnız bir analog giriş pinindən istifadə edərək birdən çox analoq dəyərin necə oxunacağını göstərəcəyəm
Təlimat: Arduino, TCA9548A I2C Multiplexer istifadə edərək birdən çox Eyni Ünvan Cihazına Necə Nəzarət Edir: 3 Addım
Təlimat: Arduino, TCA9548A I2C Multiplexer istifadə edərək Birdən çox Eyni Ünvan Cihazına Necə Nəzarət Edir: Təsvir: TCA9548A I2C Multiplexer Modulu eyni I2C ünvanlı (8 eyni ünvana qədər I2C) cihazları bir mikro nəzarətçiyə bağlamağı təmin etməkdir. Multiplexer, əmrləri seçilmiş dəstə bağlayaraq qapıçı kimi çıxış edir
4 -dən çox mühərrikdən istifadə - Birdən çox mühərrikin yığılması: 3 addım
4 -dən çox mühərrikdən istifadə etmək - Birdən çox mühərrik qalaqlamaq: Təlim olunan Vibrotaktil Həssas Dəyişdirmə və Artırma Cihazı (https: //www.instructables.com/id/Vibrotactile-Sens …), həssaslığı tərcümə edən bir qurğunun necə qurulacağını göstərir. vibrasiya stimullarına giriş. Bu titrəmə stimulları p
Ümumi Məlumat Xətindən istifadə edərək Arduino Uno -ya Birdən çox LCD Arayüzü: 5 Addım
Ümumi Məlumat Xətindən İstifadə Edilən Arduino Unoya Birdən çox LCD Arayüzü: Bu gün bu təlimatda sizə ümumi məlumat xəttindən istifadə edərək bir çox 16x2 LCD modulu arduino uno lövhəsi ilə necə əlaqələndirəcəyinizi göstərəcəyəm. Bu layihənin ən maraqlı tərəfi, ümumi məlumat xəttindən istifadə etməsi və fərqli məlumatları e