Mundarija:
- Ta'minotlar
- 1 -qadam: Board Mac manzilini oling
- 2-qadam: ESP-NOW-ni qanday ishlash kerak
- 3-qadam: ESP-NOW FUNKSIYALARI (ESP32)
- 4-qadam: ESP-NOW FUNKSIYALARI (ESP8266)
- 5 -qadam: Bir tomonlama aloqa (ESP32 yuboruvchi sifatida)
- 6 -qadam: Bir tomonlama aloqa (ESP8266 yuboruvchi sifatida)
- 7 -qadam: Ikki xil aloqa
- 8 -qadam: MADANIYAT
Video: ESP32 va ESP8266 yordamida ESP-NOW orqali bir nechta ESP suhbatini qanday qilish kerak: 8 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:24
Mening davom etayotgan loyihamda bir -biri bilan yo'riqchisiz gaplashish uchun menga bir nechta ESP kerak. Buning uchun men ESP-NOW-dan foydalanib, ESP-da yo'riqchisiz bir-birim bilan simsiz aloqa o'rnataman.
Ta'minotlar
Men ishlatgan narsalar:
ESP32 DEV moduli
NODEMCU 1.0 (ESP12E moduli)
1 -qadam: Board Mac manzilini oling
ESP-hozir orqali ESP qurilmalari bir-birlari bilan ma'lumotni yagona manzilga jo'natish orqali gaplashadilar, shu bilan birga hozirda espni intila qilishda o'rnatilgan ichki kirish nuqtalari tarmog'iga ulangan.. Shunday qilib, har bir qurilmaning MAC manzilini aniqlang, mening ESP32 va ESP8266 karta sozlamalari biriktirilgan
ESP32 uchun
#"WiFi.h" ni qo'shing // ESP32 WIFI imkoniyatlaridan foydalanish uchun
void setup () {Serial.begin (115200); Serial.print ("ESP32 Board MAC manzili:"); Serial.println (WiFi.macAddress ()); // MAC manzilini} bo'sh joyini () {} chop etadi
ESP8266 uchun
#include // ESP8266 WIFI imkoniyatlariga kirish uchun ishlatiladigan kutubxona
void setup () {Serial.begin (115200); Serial.println (); Serial.print ("ESP8266 Board MAC manzili:"); Serial.println (WiFi.macAddress ()); // MAC manzilini} bo'sh joyini () {} chop etadi
Mening MAC manzilim:
- ESP32 - 30: AE: A4: F5: 03: A4
- ESP8266: A4: CF: 12: C7: 9C: 77
2-qadam: ESP-NOW-ni qanday ishlash kerak
Bu qanday ishlashi haqida qisqacha ma'lumot:
- Hozir esp va wifi kutubxonalarini qo'shing
- Qabul qiluvchining ESP mak manzilini saqlang
- Yuborilgan/qabul qilingan xabarning ma'lumotlar tuzilishini aniqlang
- O'rnatishda wifi -ni stantsiya rejimiga qo'ying
- Esp_now -ni ishga tushiring
- ma'lumotlarni yuborish va qabul qilishdan keyin chaqiriladigan qayta qo'ng'iroq qilish funktsiyasini amalga oshirish va ro'yxatdan o'tkazish
- Esp8266 uchun uning rolini aniqlang
- tengdoshni yoki qabul qiluvchini ro'yxatdan o'tkazing
- Ma'lumot yuborish
3-qadam: ESP-NOW FUNKSIYALARI (ESP32)
esp_now_init (bekor)
Qaytish:
- ESP_OK: muvaffaqiyat
- ESP_ERR_ESPNOW_INTERNAL: Ichki xato
Tavsif:
ESPNOW funktsiyasini ishga tushiring
esp_now_register_send_cb (cb)
Qaytadi:
- ESP_OK: muvaffaqiyat
- ESP_ERR_ESPNOW_NOT_INIT: ESPNOW ishga tushirilmagan
- ESP_ERR_ESPNOW_INTERNAL: ichki xato
Parametrlar:
-
cb: ushbu parametrlar bilan ESPNOW ma'lumotlarini yuborganidan keyin qayta qo'ng'iroq qilish funktsiyasi nomi:
-
vb cb (const uint8_t *mac_addr, esp_now_send_status_t holati)
- mac_addr: qabul qiluvchining Mac manzili
-
holat:
- 1 = muvaffaqiyat
- 0 = muvaffaqiyatsiz
-
Tavsif:
ESPNOW ma'lumotlarini yuborganingizdan so'ng OnDataSent funktsiyasini chaqiring
esp_now_add_peerconst esp_now_peer_info_t *tengdosh)
Qaytadi:
- ESP_OK: muvaffaqiyat
- ESP_ERR_ESPNOW_NOT_INIT: ESPNOW ishga tushirilmagan
- ESP_ERR_ESPNOW_ARG: yaroqsiz argument
- ESP_ERR_ESPNOW_FULL: tengdoshlar ro'yxati to'la
- ESP_ERR_ESPNOW_NO_MEM: xotira yo'q
- ESP_ERR_ESPNOW_EXIST: tengdosh mavjud
Parametrlar:
-
peer: tengdoshlari haqidagi ma'lumotlar quyidagi ma'lumotlar bilan:
-
uint8_t
peer_addr [ESP_NOW_ETH_ALEN]; ESPNOW peer MAC manzili, bu ham stansiya yoki dasturning MAC manzili
-
uint8_t lmk [ESP_NOW_KEY_LEN]
Ma'lumotni shifrlash uchun ishlatiladigan ESPNOW peer mahalliy asosiy kaliti
-
uint8_t kanali
ESPNOW ma'lumotlarini yuborish/qabul qilish uchun tengdoshlari foydalanadigan Wi-Fi kanali. Agar qiymat 0 bo'lsa, stantsiya yoki dastur yoqilgan kanaldan foydalaning. Aks holda, u stantsiya yoki dastur yoqilgan kanal sifatida o'rnatilishi kerak
-
wifi_interface_t ifidx
ESPNOW ma'lumotlarini yuborish/qabul qilishda tengdoshlari foydalanadigan Wi-Fi interfeysi
-
bool shifrlash
Bu tengdosh yuboradigan/qabul qiladigan ESPNOW ma'lumotlari shifrlangan yoki yo'q
-
void *priv
ESPNOW shaxsiy ma'lumotlari
-
Tavsif:
Tengdoshlar ro'yxatiga tengdosh qo'shing
esp_now_send (const uint8_t *peer_addr, const uint8_t *ma'lumotlar, size_t len)
Qaytadi:
- ESP_OK: muvaffaqiyat
- ESP_ERR_ESPNOW_NOT_INIT: ESPNOW ishga tushirilmagan
- ESP_ERR_ESPNOW_ARG: yaroqsiz argument
- ESP_ERR_ESPNOW_INTERNAL: ichki xato
- ESP_ERR_ESPNOW_NO_MEM: xotira yo'q
- ESP_ERR_ESPNOW_NOT_FOUND: tengdosh topilmadi
- ESP_ERR_ESPNOW_IF: joriy WiFi interfeysi tengdoshlarnikiga mos kelmaydi
Parametrlar:
- peer_addr: tengdoshlarning MAC manzili
- ma'lumotlar: yuboriladigan ma'lumotlar
- len: ma'lumotlar uzunligi
Tavsif:
ESPNOW ma'lumotlarini yuborish. Ba'zi hollarda, bu sodir bo'ladi:
- Agar peer_addr NULL bo'lmasa, ma'lumotlarni MAC manzili peer_addr ga mos keladigan tengdoshga yuboring
- Agar peer_addr NULL bo'lsa, tengdoshlar ro'yxatiga qo'shilgan barcha tengdoshlarga ma'lumotlarni yuboring
- Ma'lumotlarning maksimal uzunligi ESP_NOW_MAX_DATA_LENdan kichik bo'lishi kerak
- Ma'lumotlar argumenti ko'rsatgan bufer esp_now_send qaytganidan keyin haqiqiy bo'lishi shart emas
esp_now_register_recv_cb (cb)
Qaytadi:
- ESP_OK: muvaffaqiyat
- ESP_ERR_ESPNOW_NOT_INIT: ESPNOW ishga tushirilmagan
- ESP_ERR_ESPNOW_INTERNAL: ichki xato
Parametrlar:
-
cb: ESPNOW ma'lumotlarini qabul qilish uchun qayta qo'ng'iroq qilish funktsiyasi
-
vb cb (const uint8_t *mac_addr, const uint8_t *ma'lumotlar, int data_len)
-
mac_addr:
qabul qiluvchining Mac manzili
-
*ma'lumotlar:
ma'lumotlarni qabul qilish
-
data_len
ma'lumotlar baytining uzunligi
-
-
Tavsif:
ESPNOW ma'lumotlarini olgandan keyin cb funktsiyasiga qo'ng'iroq qiling
4-qadam: ESP-NOW FUNKSIYALARI (ESP8266)
FUNKSIYALAR TAVSIYASI ESP32 ESP8266
int esp_now_init (bekor)
Qaytadi:
- 1 = muvaffaqiyat
- 0 = muvaffaqiyatsiz
Tavsif
ESPNOW funktsiyasini ishga tushiring
int esp_now_set_self_role (u8 o'rni)
Parametrlar:
- ESP_NOW_ROLE_IDLE: ma'lumotlarni uzatishga ruxsat berilmagan.
- ESP_NOW_ROLE_CONTROLLER: ustuvorlik Sation interfeysiga beriladi
- ESP_NOW_ROLE_SLAVE: SoftAP interfeysiga ustuvorlik beriladi
- ESP_NOW_ROLE_COMBO: SoftAPinterface -ga ustuvorlik beriladi
Tavsif
Qurilmaning rolini belgilaydi
int esp_now_register_send_cb (cb)
Qaytadi:
- 1 = muvaffaqiyat
- 0 = muvaffaqiyatsiz
Parametrlar:
-
cb: ushbu parametrlar bilan ESPNOW ma'lumotlarini yuborganidan keyin qayta qo'ng'iroq qilish funktsiyasi nomi:
-
vb cb (const uint8_t *mac_addr, esp_now_send_status_t holati)
- mac_addr: qabul qiluvchining Mac manzili
-
holat:
- 1 = muvaffaqiyat
- 0 = muvaffaqiyatsiz
-
Tavsif
ESPNOW ma'lumotlarini yuborganingizdan so'ng OnDataSent funktsiyasini chaqiring
int esp_now_add_peer (u8 *mac_addr, u8 roli, u8 kanal, u8 *tugma, u8 key_len)
Qaytadi:
- 1 = muvaffaqiyat
- 0 = muvaffaqiyatsiz
Parametrlar:
-
mac_addr
tengdoshining Mac manzili
- rol
-
kanal
Agar qiymat 0 bo'lsa, stantsiya yoki dastur yoqilgan kanaldan foydalaning. Aks holda, u stantsiya yoki dastur yoqilgan kanal sifatida o'rnatilishi kerak
-
*kalit
shifrlash uchun kalit
-
key_len
kalit uzunligi
Tavsif:
Tengdoshlar ro'yxatiga tengdosh qo'shing
int esp_now_send (const uint8_t *peer_addr, const uint8_t *ma'lumotlar, size_t len)
Qaytadi:
- 1 = muvaffaqiyat
- 0 = muvaffaqiyatsiz
Parametrlar:
- peer_addr: tengdoshlarning MAC manzili
- ma'lumotlar: yuboriladigan ma'lumotlar
- len: ma'lumotlar uzunligi
Tavsif:
ESPNOW ma'lumotlarini yuborish. Ba'zi hollarda, bu sodir bo'ladi:
- Agar peer_addr NULL bo'lmasa, ma'lumotlarni MAC manzili peer_addr ga mos keladigan tengdoshga yuboring
- Agar peer_addr NULL bo'lsa, ma'lumotlarni tengdoshlar ro'yxatiga qo'shilgan barcha tengdoshlariga yuboring
- Ma'lumotlarning maksimal uzunligi ESP_NOW_MAX_DATA_LEN dan kichik bo'lishi kerak
- Ma'lumotlar argumenti ko'rsatgan bufer esp_now_send qaytganidan keyin haqiqiy bo'lishi shart emas
int esp_now_register_recv_cb (cb)
Qaytadi:
- 1 = muvaffaqiyat
- 0 = muvaffaqiyatsiz
Parametrlar:
-
cb: ESPNOW ma'lumotlarini qabul qilish uchun qayta qo'ng'iroq qilish funktsiyasi
-
vb cb (const uint8_t *mac_addr, const uint8_t *ma'lumotlar, int data_len)
-
mac_addr:
qabul qiluvchining Mac manzili
-
*ma'lumotlar:
ma'lumotlarni qabul qilish
-
data_len
ma'lumotlar baytining uzunligi
-
-
Tavsif:
ESPNOW ma'lumotlarini olgandan keyin cb funktsiyasini chaqiring
5 -qadam: Bir tomonlama aloqa (ESP32 yuboruvchi sifatida)
ESP32 ma'lumotlarni ESP8266 ga yuboradi. bu kod bilan. BroadcastAddress ni qabul qiluvchining qabul qiluvchi mak manziliga o'zgartiring. Meniki A4: CF: 12: C7: 9C: 77 edi
// Kerakli kutubxonalarni qo'shing
#include // esp funksiyalariga kirish uchun #include // ESP32 -ga Wi -Fi imkoniyatlarini qo'shish uchun // MAC manzilini yayınlarAddress nomli qatorda saqlang; uint8_t yayımAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // qabul qiluvchining MAC manzili/*bir nechta o'zgaruvchilarning ma'lumot turlarini tuzilgan va ularning barchasini struct_message*/typedef struct struct_message {char a [32] deb o'zgartirgan; int b; suzuvchi c; Satr d; bool e; } struktur_message; // myData nomli struct_message yarating struct_message myData; // funktsiyalari OnDataSent holatini bekor qilish uchun ma'lumotlar yuborilganda chaqiriladi (const uint8_t *mac_addr, esp_now_send_status_t status) {Serial.print ("\ r / nSo'nggi paket yuborish holati: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Yetkazib berish muvaffaqiyati": "Yetkazib berilmadi"); } void setup () {// ESP Serial.begin (115200) bilan ketma -ket aloqa uchun uzatiladigan tezlikni o'rnating; // Qurilmani Wi-Fi Station WiFi.mode (WIFI_STA) sifatida sozlash; // wifi-ni ishga tushiradi // ESP-NOW-ni ishga tushiring va agar holatini qaytarsa (esp_now_init ()! = ESP_OK) {Serial.println ("ESPni ishga tushirishda xato -Hozir "); qaytish; } // ESPNOW ma'lumotlarini esp_now_register_send_cb (OnDataSent) yuborganidan keyin OnDataSent funktsiyasini chaqiring; // tengdoshlar bilan ro'yxatdan o'ting esp_now_peer_info_t peerInfo; // tengdosh ma'lumotlarini addres memcpy uchun ko'rsatgich sifatida ishga tushirish va tayinlash (peerInfo.peer_addr, radioAddress, 6); // 6 baytlik radioAddress qiymatini peerInfo.peer_addr peerInfo.channel = 0 ga ko'chiring; // esp gapiradigan kanal. 0 aniqlanmagan degan ma'noni anglatadi va ma'lumotlar joriy kanalga yuboriladi. 1-14-bu mahalliy qurilma peerInfo.encrypt = false bilan bir xil bo'lgan to'g'ri kanallar; // shifrlanmagan // Qurilmani bog'langan qurilmalar ro'yxatiga qo'shing, agar (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Tengdosh qo'shilmadi"); qaytish; }} void loop () {// strcpy yuborish uchun qiymatlarni o'rnating (myData.a, "Bu CHAR IS"); // "THIS IS CHAR" saqlang, bu "myData.b = random" (a, 20) oldindan aniqlangan "ma'lumotlarim" ning o'zgaruvchisiga; // tasodifiy qiymatni saqlash myData.c = 1.2; // float saqlash myData.d = "Salom"; // mag'lubiyatni saqlash myData.e = false; // boolni saqlang // ESP-NOW orqali 250 baytdan kam yoki teng ma'lumotlarni yuboring va uning holatini qaytaradi esp_err_t result = esp_now_send (radioAddress, (uint8_t *) & myData, sizeof (myData)); if (natija == ESP_OK) {Serial.println ("Muvaffaqiyat bilan yuborilgan"); } else {Serial.println ("Ma'lumotlarni yuborishda xato"); } kechikish (2000); }
ESP8266 ushbu kod yordamida ESP32 ma'lumotlarini oladi.
// Kerakli kutubxonalarni qo'shing
#include // ESP32 -ga Wi -Fi imkoniyatlarini qo'shish uchun #include // esp -ga kirish uchun hozirda funktsiyalarni bajarish uchun**tuzilgan va o'zgargan barcha o'zgaruvchilarning ma'lumot turlarini aniqlab, ularning hammasini struct_message* /typedef struct struct_message {char a [32]; int b; suzuvchi c; Satr d; bool e; } struktur_message; // myData struct_message deb nomlangan o'zgarmaydigan struct_message yarating myData; // ma'lumotlar qabul qilinganda va uni bosib chiqarganda chaqiriladi OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Qabul qilingan baytlar:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Float:"); 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) bilan ketma -ket muloqot qilish uchun tezlik tezligini o'rnating; // Qurilmani Wi-Fi Station WiFi.mode (WIFI_STA) sifatida o'rnating; // Wi-Fi-ni ishga tushiradi // ESP-NOW ni ishga tushiring va uning holatini qaytaradi, agar (esp_now_init ()! = 0) {Serial.println ("ESP-NOW-ni ishga tushirishda xato"); qaytish; } esp_now_set_self_role (ESP_NOW_ROLE_SLAVE); // esp esp_now_register_recv_cb (OnDataRecv) rolini belgilaydi; // ESPNOW ma'lumotlarini olgandan keyin OnDataRecv funktsiyasini chaqiring} void loop () {}
6 -qadam: Bir tomonlama aloqa (ESP8266 yuboruvchi sifatida)
ESP8266 ma'lumotlarni ESP32 ga yuboradi. bu kod bilan. BroadcastAddress ni qabul qiluvchining qabul qiluvchi mak manziliga o'zgartiring. Mening esp32 manzilim 30: AE: A4: F5: 03: A4. Esp8266 uchun boshqa funktsiyalar uchun bu erga o'ting
// Kerakli kutubxonalarni qo'shing
#include // ESP32 -ga Wi -Fi imkoniyatlarini qo'shish uchun #include // esp -ning hozirgi funksiyalariga kirish uchun // MAC manzilini yayınlarAddress nomli qatorda saqlang; uint8_t yayımAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*bir nechta o'zgaruvchilarning ma'lumotlar turlarini tuzilgan va ularning hammasini struct_message deb o'zgartirgan*/ typedef struct struct_message {char a [32]; int b; suzuvchi c; Satr d; bool e; } struct_message; // myData struct_message myData deb nomlangan tuzilgan o'zgaruvchini yarating; // ma'lumotlar yuborilganda va uning holatini bekor qilishda chaqiriladi OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nSo'nggi paket yuborish holati: / t"); Serial.println (sendStatus == 1? "Yetkazib berish muvaffaqiyati": "Yetkazib berilmadi"); } void setup () {// ESP Serial.begin (115200) bilan ketma -ket aloqa uchun uzatiladigan tezlikni o'rnating; // Qurilmani Wi-Fi Station WiFi.mode (WIFI_STA) sifatida sozlash; // wifi-ni ishga tushiradi // ESP-NOW-ni ishga tushiring va agar holatini qaytarsa (esp_now_init ()) {Serial.println ("ESP-NOW-ni ishga tushirishda xato")); qaytish; } esp_now_register_send_cb (OnDataSent); // ESPNOW ma'lumotlarini yuborganidan so'ng, OnDataSent funktsiyasini chaqiring // Qurilmani bog'langan qurilmalar ro'yxatiga qo'shing, agar (esp_now_add_peer (yayımAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)) {Serial.println ("tengdosh qo'shib bo'lmadi"); qaytish; }} void loop () {// strcpy yuborish uchun qiymatlarni o'rnating (myData.a, "Bu CHAR IS"); // "THIS IS CHAR" saqlang, bu "myData.b = random" (1, 20) oldindan aniqlangan "ma'lumotlarim" ning o'zgaruvchisiga; // tasodifiy qiymatni saqlash myData.c = 1.2; // floatni saqlash myData.d = "SP8266"; // mag'lubiyatni saqlash myData.e = false; // boolni saqlang // ESP-NOW orqali 250 baytdan kam yoki unga teng ma'lumotlarni yuboring va uning holatini qaytaradi int result = esp_now_send (roadAddress, (uint8_t *) & myData, sizeof (myData)); if (esp_now_init ()! = 0) {Serial.println ("Muvaffaqiyat bilan yuborilgan"); } else {Serial.println ("Ma'lumotlarni yuborishda xato"); } kechikish (2000); }
ESP32 ESP8266 dan ma'lumotlarni oladi. bu kod bilan. Boshqa funktsiyalar uchun bu erda hakamlar
// Kerakli kutubxonalarni qo'shing
#include // esp funksiyalariga kirish uchun #include // ESP32 -ga Wi -Fi imkoniyatlarini qo'shish uchun**tuzilgan va o'zgargan barcha o'zgaruvchilarning ma'lumot turlarini aniqlab, ularning hammasini struct_message* /typedef struct struct_message {char a [32]; int b; suzuvchi c; Satr d; bool e; } struct_message; // myData struct_message deb nomlangan o'zgarmaydigan struct_message yarating myData; // ma'lumotlar qabul qilinganda va uni bosib chiqarganda chaqiriladi OnDataRecv (const uint8_t * mac, const uint8_t * incomingData, int len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Qabul qilingan baytlar:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Float:"); 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) bilan ketma -ket aloqa uchun uzatiladigan tezlikni o'rnating; // Qurilmani Wi-Fi Station WiFi.mode (WIFI_STA) sifatida o'rnating; // Wi-Fi-ni ishga tushiradi // ESP-NOW ni ishga tushiring va uning holatini qaytaradi, agar (esp_now_init ()! = 0) {Serial.println ("ESP-NOW-ni ishga tushirishda xato"); qaytish; } esp_now_register_recv_cb (OnDataRecv); // ESPNOW ma'lumotlarini olgandan keyin OnDataRecv funktsiyasini chaqiring} void loop () {}
7 -qadam: Ikki xil aloqa
ESP32 ishga tushirish haqidagi ma'lumotlarni ESP8266 ga yuboradi. ESP8266 qabul qilingan xabarni chop etadi, keyin javoblari ESP32 ketma -ket monitorida chop etiladi.
ESP32 kodi
// Kerakli kutubxonalarni qo'shing
#include // esp funksiyalariga kirish uchun #include // ESP32 -ga Wi -Fi imkoniyatlarini qo'shish uchun // MAC manzilini yayınlarAddress nomli qatorda saqlang; uint8_t yayımAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // qabul qiluvchining MAC manzili/*bir nechta o'zgaruvchilarning ma'lumot turlarini tuzilgan va ularning barchasini struct_message*/typedef struct struct_message {char a [32] deb o'zgartirgan; int b; suzuvchi c; Satr d; bool e; } struct_message; // myData nomli struct_message yarating struct_message myData; // funktsiyalari OnDataSent holatini bekor qilish uchun ma'lumotlar yuborilganda chaqiriladi (const uint8_t *mac_addr, esp_now_send_status_t status) {Serial.print ("\ r / nSo'nggi paket yuborish holati: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Yetkazib berish muvaffaqiyati": "Yetkazib berilmadi"); if (status! = ESP_NOW_SEND_SUCCESS) {send_data ();}} OnDataRecv bekor (const uint8_t * mac, const uint8_t * incomingData, int len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Qabul qilingan baytlar:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Float:"); 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) bilan ketma -ket aloqa uchun uzatiladigan tezlikni o'rnating; // Qurilmani Wi-Fi Station WiFi.mode (WIFI_STA) sifatida sozlash; // wifi-ni ishga tushiradi // ESP-NOW-ni ishga tushiring va agar holatini qaytarsa (esp_now_init ()! = ESP_OK) {Serial.println ("ESPni ishga tushirishda xato -Hozir "); qaytish; } // ESPNOW ma'lumotlarini esp_now_register_send_cb (OnDataSent) yuborganidan keyin OnDataSent funktsiyasini chaqiring; // tengdoshlar esp_now_peer_info_t peerInfo -da ro'yxatdan o'ting; // tengdosh ma'lumotlarini addres memcpy uchun ko'rsatgich sifatida ishga tushirish va tayinlash (peerInfo.peer_addr, radioAddress, 6); // 6 baytli radioAddress qiymatini peerInfo.peer_addr peerInfo.channel = 0 ga ko'chiring; // esp gapiradigan kanal. 0 aniqlanmagan degan ma'noni anglatadi va ma'lumotlar joriy kanalga yuboriladi.1-14-bu mahalliy qurilma peerInfo.encrypt = false bilan bir xil bo'lgan to'g'ri kanallar; // shifrlanmagan // Qurilmani bog'langan qurilmalar ro'yxatiga qo'shing, agar (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Tengdosh qo'shilmadi"); qaytish; } esp_now_register_recv_cb (OnDataRecv); // send_data () ESPNOW ma'lumotlarini olgandan keyin OnDataRecv funktsiyasini chaqiring; } void loop () {} void send_data () {Serial.println ("Yuborilmoqda"); // strcpy yuborish uchun qiymatlarni o'rnating (myData.a, "Bu CHAR IS"); // "THIS IS CHAR" saqlang, bu "myData.b = random" (1, 20) oldindan aniqlangan "ma'lumotlarim" ning o'zgaruvchisiga; // tasodifiy qiymatni saqlash myData.c = 1.2; // floatni saqlash myData.d = "ESP32"; // mag'lubiyatni saqlash myData.e = false; // boolni saqlang // ESP-NOW orqali 250 baytdan kam yoki teng ma'lumotlarni yuboring va uning holatini qaytaradi esp_err_t result = esp_now_send (radioAddress, (uint8_t *) & myData, sizeof (myData)); if (natija == ESP_OK) {Serial.println ("Muvaffaqiyat bilan yuborilgan");} else {Serial.println ("Ma'lumotlarni yuborishda xato"); }}
ESP8266 kodi
// Kerakli kutubxonalarni qo'shing
#include // ESP32 -ga Wi -Fi imkoniyatlarini qo'shish uchun #include // esp -ning hozirgi funksiyalariga kirish uchun // MAC manzilini yayınlarAddress nomli qatorda saqlang; uint8_t yayımAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*bir nechta o'zgaruvchilarning ma'lumotlar turlarini tuzilgan va ularning hammasini struct_message deb o'zgartirgan*/ typedef struct struct_message {char a [32]; int b; suzuvchi c; Satr d; bool e; } struct_message; // myData struct_message deb nomlangan o'zgarmaydigan struct_message yarating myData; // ma'lumotlar qabul qilinganda va uni bosib chiqarganda chaqiriladi OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Qabul qilingan baytlar:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Float:"); Serial.println (myData.c); Serial.print ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); send_data (); } void OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nSo'nggi paket yuborish holati: / t"); Serial.println (sendStatus == 1? "Yetkazib berish muvaffaqiyati": "Yetkazib berilmadi"); agar (sendStatus! = 1) {send_data (); }} void send_data () {// strcpy yuborish uchun qiymatlarni o'rnating (myData.a, "Bu CHAR IS"); // "THIS IS CHAR" saqlang, bu "myData.b = random" (1, 20) oldindan aniqlangan "ma'lumotlarim" ning o'zgaruvchisiga; // tasodifiy qiymatni saqlash myData.c = 1.2; // float saqlash myData.d = "ESP8266"; // mag'lubiyatni saqlash myData.e = false; // boolni saqlash esp_now_send (radioAddress, (uint8_t *) & myData, sizeof (myData)); } void setup () {// ESP Serial.begin (115200) bilan ketma -ket aloqa uchun uzatiladigan tezlikni o'rnating; // Qurilmani Wi-Fi Station WiFi.mode (WIFI_STA) sifatida o'rnating; // Wi-Fi-ni ishga tushiradi // ESP-NOW ni ishga tushiring va uning holatini qaytaradi, agar (esp_now_init ()! = 0) {Serial.println ("ESP-NOW-ni ishga tushirishda xato"); qaytish; } if (esp_now_add_peer (radioAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0)) {Serial.println ("Tengdosh qo'shilmadi"); qaytish; } esp_now_set_self_role (ESP_NOW_ROLE_COMBO); esp_now_register_send_cb (OnDataSent); esp_now_set_self_role (ESP_NOW_ROLE_COMBO); // esp esp_now_register_recv_cb (OnDataRecv) rolini belgilaydi; // ESPNOW ma'lumotlarini olgandan keyin OnDataRecv funktsiyasini chaqiring} void loop () {}
8 -qadam: MADANIYAT
ESPNOW_32_Masalan
ESPNOW_8266 Misol
WIFI.h
ESP8266WiFi.h
esp_now.h ESP8266 uchun
esp_now.h ESP32 uchun
esp_now rasmiy hujjati (funktsiyalarni yaxshiroq tushuntirish)
ESP-NOW rasmiy qo'llanmasi
Tavsiya:
Bir nechta BMP280 datchiklari Arduino Uno orqali SPI orqali: 6 qadam
Bir nechta BMP280 datchiklari Arduino Uno -da SPI orqali: Bu qo'llanmada biz uchta BMP280 -ni Arduino Uno -ga SPI orqali ulashamiz, lekin har bir sensor uchun nSS (Slave Select) sifatida D3 dan D10 raqamli portlari yordamida Uno -da sakkizta BMP280 -ni ulashingiz mumkin. B o'lchagan atmosfera bosimi namunalarining
LEDni Blynk orqali Wi -Fi orqali boshqarish uchun ESP32 -dan qanday foydalanish kerak: 7 qadam (rasmlar bilan)
LEDni Blynk orqali Wi -Fi orqali boshqarish uchun ESP32 -dan qanday foydalanish kerak: Ushbu qo'llanmada LED orqali WiFi orqali Blynk -ni boshqarish uchun ESP32 ishlab chiqish paneli ishlatiladi. Blynk - bu Internetda Arduino, Raspberry Pi va boshqalarni boshqarish uchun iOS va Android ilovalari o'rnatilgan platforma. Bu raqamli asboblar paneli, bu erda siz
USB orqali zaryadlanadigan har qanday IPod yoki boshqa qurilmalar uchun o'zingizning shaxsiy USB avtomobil zaryadlovchini qanday qilish kerak: 10 qadam (rasmlar bilan)
USB orqali zaryad oladigan har qanday IPod yoki boshqa qurilmalar uchun o'zingizning USB avtomobil zaryadlovchini qanday yasash mumkin: 5v va USB ulagichli vilkasini chiqaradigan avtomobil adapterini birlashtirib, USB orqali quvvat oladigan har qanday iPod yoki boshqa qurilma uchun USB zaryadlovchini yarating. Loyihaning eng muhim qismi - bu siz tanlagan avtomobil adapterining chiqishiga ishonch hosil qilish
Bir nechta mikrokontroldan bir nechta LEDni qanday chiqarish mumkin: 6 qadam (rasmlar bilan)
Bir nechta mikroto'lqinli pinlardan qanday qilib ko'p LEDlarni haydash mumkin: Ko'pgina mikrokontrolderlarning uch holatida (+V, GND yoki "yuqori impedansli") mavjudligidan foydalanib, siz N pinli N*(N-1) LEDlarni boshqarishingiz mumkin. Shunday qilib, PIC12Fxxx yoki ATtiny11 kabi 8pinli mikrokontroller beshta mavjud 20 ta LEDni boshqarishi mumkin
Linuxda bir nechta monitorni qanday o'rnatish kerak: 6 qadam
Linuxda bir nechta monitorni qanday o'rnatish kerak: bu qo'llanma sizga ko'p Linux tizimlarida, birinchi navbatda ubuntu-da ko'p boshli tizimni o'rnatishni ko'rsatadi. E'tibor bering, bu hali ham deyarli tugallanmagan