Агуулгын хүснэгт:
- Хангамж
- Алхам 1: Board Mac хаягийг аваарай
- Алхам 2: ESP-NOW-ийг хэрхэн ажиллуулах вэ
- Алхам 3: ESP-NOW FUNCTIONS (ESP32)
- Алхам 4: ESP-NOW FUNCTIONS (ESP8266)
- Алхам 5: Нэг талын харилцаа холбоо (ESP32 илгээгчийн хувьд)
- Алхам 6: Нэг талын харилцаа холбоо (ESP8266 илгээгчийн хувьд)
- Алхам 7: ХОЁР АРГА ХАРИЛЦАА
- Алхам 8: АШИГЛАЛ
Видео: ESP32 болон ESP8266-ийг ашиглан ESP-NOW ашиглан олон ESP яриа хэрхэн хийх вэ: 8 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:01
Миний хэрэгжүүлж буй төсөл дээр чиглүүлэгчгүйгээр хоорондоо ярихын тулд надад олон ESP хэрэгтэй болно. Үүнийг хийхийн тулд би ESP-NOW ашиглан ESP дээр чиглүүлэгчгүйгээр хоорондоо утасгүй холбоо тогтоох боломжтой болно.
Хангамж
Миний ашигласан зүйлс:
ESP32 DEV модуль
NODEMCU 1.0 (ESP12E модуль)
Алхам 1: Board Mac хаягийг аваарай
ESP-now-ээр дамжуулан ESP төхөөрөмжүүд хоорондоо ярилцаж, өгөгдлийг өвөрмөц хаягаар илгээж, одоо esp-ийг нэвтрүүлэх замаар нэвтрэх дотоод сүлжээнд холбогдсон байна.. Тиймээс төхөөрөмж бүрийн MAC хаягийг тодорхойлно уу. Миний ESP32 ба ESP8266 самбарын тохиргоо хавсаргасан болно
ESP32 -ийн хувьд
#"WiFi.h" -ийг оруулна уу // ESP32 WIFI -ийн чадавхид хандахын тулд
void setup () {Serial.begin (115200); Serial.print ("ESP32 Board MAC хаяг:"); Serial.println (WiFi.macAddress ()); // өөрийн MAC хаягийг хэвлэнэ} void loop () {}
ESP8266 -ийн хувьд
#include // ESP8266 WIFI -ийн чадавхид хандахын тулд ашигладаг номын сан
void setup () {Serial.begin (115200); Serial.println (); Serial.print ("ESP8266 Board MAC хаяг:"); Serial.println (WiFi.macAddress ()); // өөрийн MAC хаягийг хэвлэнэ} void loop () {}
Миний MAC ХАЯГ:
- ESP32 - 30: AE: A4: F5: 03: A4
- ESP8266: A4: CF: 12: C7: 9C: 77
Алхам 2: ESP-NOW-ийг хэрхэн ажиллуулах вэ
Үүнийг хэрхэн яаж хийх талаархи тоймыг энд харуулав.
- Одоо esp болон wifi номын санг оруулах
- Хүлээн авагчийн ESP -ийн mac хаягийг хадгална уу
- Илгээсэн/хүлээн авсан мессежийн мэдээллийн бүтцийг тодорхойлох
- Тохиргоон дээр wifi -ийг станцын горимд тохируулна уу
- Esp_now -ийг эхлүүлэх
- өгөгдөл илгээх, хүлээн авсны дараа дуудлага хийх функцийг хийж бүртгэх
- Esp8266 -ийн хувьд түүний үүргийг тодорхойл
- үе тэнгийн эсвэл хүлээн авагчийг бүртгүүлэх esp
- Өгөгдөл илгээх
Алхам 3: ESP-NOW FUNCTIONS (ESP32)
esp_now_init (хүчингүй)
Буцах:
- ESP_OK: амжилтанд хүрнэ
- ESP_ERR_ESPNOW_INTERNAL: Дотоод алдаа
Тодорхойлолт:
ESPNOW функцийг эхлүүлэх
esp_now_register_send_cb (cb)
Буцах:
- ESP_OK: амжилтанд хүрнэ
- ESP_ERR_ESPNOW_NOT_INIT: ESPNOW -г эхлүүлээгүй байна
- ESP_ERR_ESPNOW_INTERNAL: дотоод алдаа
Параметрүүд:
-
cb: ESPNOW өгөгдлийг энэ параметрээр илгээсэний дараа буцааж залгах функцын нэр:
-
хүчингүй cb (const uint8_t *mac_addr, esp_now_send_status_t төлөв)
- mac_addr: хүлээн авагчийн mac хаяг
-
байдал:
- 1 = амжилт
- 0 = амжилтгүй болсон
-
Тодорхойлолт:
ESPNOW өгөгдлийг илгээсэний дараа OnDataSent функцийг дуудаарай
esp_now_add_peerconst esp_now_peer_info_t *үе тэнгийнхэн)
Буцах:
- ESP_OK: амжилтанд хүрнэ
- ESP_ERR_ESPNOW_NOT_INIT: ESPNOW -г эхлүүлээгүй байна
- ESP_ERR_ESPNOW_ARG: хүчин төгөлдөр бус аргумент
- ESP_ERR_ESPNOW_FULL: үе тэнгийн жагсаалт дүүрэн байна
- ESP_ERR_ESPNOW_NO_MEM: санах ой дутагдаж байна
- ESP_ERR_ESPNOW_EXIST: үе тэнгийнхэн байсан
Параметрүүд:
-
үе тэнгийнхэн: дараахь мэдээллийг агуулсан үе тэнгийнхний мэдээлэл:
-
uint8_t
peer_addr [ESP_NOW_ETH_ALEN]; ESPNOW -ийн үе тэнгийн MAC хаяг нь станц эсвэл програмын MAC хаяг юм
-
uint8_t lmk [ESP_NOW_KEY_LEN]
ESPNOW нь өгөгдлийг шифрлэхэд ашигладаг орон нутгийн мастер түлхүүр юм
-
uint8_t суваг
ESPNOW өгөгдлийг илгээх/хүлээн авахад үе тэнгийнхэн ашигладаг Wi-Fi суваг. Хэрэв утга нь 0 бол аль суваг эсвэл програм хангамж асаалттай байгаа сувгийг ашиглана уу. Үгүй бол үүнийг станц эсвэл програм хангамж асаалттай байгаа сувгаар тохируулах ёстой
-
wifi_interface_t ifidx
ESPNOW өгөгдлийг илгээх/хүлээн авахад үе тэнгийнхэн ашигладаг Wi-Fi интерфейс
-
bool шифрлэх
Энэ үе тэнгийн илгээсэн/хүлээн авсан ESPNOW өгөгдөл шифрлэгдсэн эсвэл шифрлэгдээгүй байна
-
void *priv
Хувийн мэдээллийг ESPNOW хийнэ үү
-
Тодорхойлолт:
Үе тэнгийнхнийхээ жагсаалтад үе тэнгийнхэн нэмэх
esp_now_send (const uint8_t *peer_addr, const uint8_t *өгөгдөл, size_t len)
Буцах:
- ESP_OK: амжилтанд хүрнэ
- ESP_ERR_ESPNOW_NOT_INIT: ESPNOW -г эхлүүлээгүй байна
- ESP_ERR_ESPNOW_ARG: хүчин төгөлдөр бус аргумент
- ESP_ERR_ESPNOW_INTERNAL: дотоод алдаа
- ESP_ERR_ESPNOW_NO_MEM: санах ой дутагдаж байна
- ESP_ERR_ESPNOW_NOT_FOUND: үе тэнгийнхэн олдсонгүй
- ESP_ERR_ESPNOW_IF: одоогийн WiFi интерфэйс нь үе тэнгийнхэнтэйгээ таарахгүй байна
Параметрүүд:
- peer_addr: үе тэнгийн MAC хаяг
- өгөгдөл: илгээх өгөгдөл
- len: өгөгдлийн урт
Тодорхойлолт:
ESPNOW өгөгдлийг илгээх. Зарим тохиолдолд ийм зүйл тохиолддог.
- Хэрэв peer_addr нь NULL биш бол MAC хаяг нь peer_addr -тай тохирч байгаа үе тэнгийнхэн рүү өгөгдөл илгээнэ үү.
- Хэрэв peer_addr NULL бол үе тэнгийн жагсаалтад нэмэгдсэн бүх үе тэнгийнхэн рүү өгөгдөл илгээнэ үү
- Өгөгдлийн хамгийн их урт нь ESP_NOW_MAX_DATA_LEN -с бага байх ёстой
- Өгөгдлийн аргументаар зааж өгсөн буфер нь esp_now_send буцсаны дараа хүчинтэй байх шаардлагагүй
esp_now_register_recv_cb (cb)
Буцах:
- ESP_OK: амжилтанд хүрнэ
- ESP_ERR_ESPNOW_NOT_INIT: ESPNOW -г эхлүүлээгүй байна
- ESP_ERR_ESPNOW_INTERNAL: дотоод алдаа
Параметрүүд:
-
cb: ESPNOW өгөгдлийг хүлээн авах дуудлага хийх функц
-
хүчингүй cb (const uint8_t *mac_addr, const uint8_t *өгөгдөл, int data_len)
-
mac_addr:
хүлээн авагчийн mac хаяг
-
*өгөгдөл:
өгөгдөл хүлээн авах
-
data_len
өгөгдлийн байтын урт
-
-
Тодорхойлолт:
ESPNOW өгөгдлийг хүлээн авсны дараа cb функцийг дуудаарай
Алхам 4: ESP-NOW FUNCTIONS (ESP8266)
FUNCTIONS DESCRIPTION ESP32 ESP8266
int esp_now_init (хүчингүй)
Буцах:
- 1 = амжилт
- 0 = амжилтгүй болсон
Тодорхойлолт
ESPNOW функцийг эхлүүлэх
int esp_now_set_self_role (u8 үүрэг)
Параметрүүд:
- ESP_NOW_ROLE_IDLE: өгөгдөл дамжуулахыг зөвшөөрдөггүй.
- ESP_NOW_ROLE_CONTROLLER: Sation интерфэйсийг нэн тэргүүнд тавьдаг
- ESP_NOW_ROLE_SLAVE: SoftAP интерфэйсийг нэн тэргүүнд тавьдаг
- ESP_NOW_ROLE_COMBO: SoftAPinterface -д тэргүүлэх ач холбогдол өгдөг
Тодорхойлолт
Төхөөрөмжийн үүргийг тохируулна
int esp_now_register_send_cb (cb)
Буцах:
- 1 = амжилт
- 0 = амжилтгүй болсон
Параметрүүд:
-
cb: энэ параметр бүхий ESPNOW өгөгдлийг илгээсэний дараа буцааж залгах функцын нэр:
-
хүчингүй cb (const uint8_t *mac_addr, esp_now_send_status_t төлөв)
- mac_addr: хүлээн авагчийн mac хаяг
-
байдал:
- 1 = амжилт
- 0 = амжилтгүй болсон
-
Тодорхойлолт
ESPNOW өгөгдлийг илгээсэний дараа OnDataSent функцийг дуудаарай
int esp_now_add_peer (u8 *mac_addr, u8 үүрэг, u8 суваг, u8 *түлхүүр, u8 key_len)
Буцах:
- 1 = амжилт
- 0 = амжилтгүй болсон
Параметрүүд:
-
mac_addr
үе тэнгийнхний Mac хаяг
- үүрэг
-
суваг
Хэрэв утга нь 0 бол аль суваг эсвэл програм хангамж асаалттай байгаа сувгийг ашиглана уу. Үгүй бол үүнийг станц эсвэл програм хангамж асаалттай байгаа сувгаар тохируулах ёстой
-
*түлхүүр
шифрлэх түлхүүр
-
key_len
түлхүүрийн урт
Тодорхойлолт:
Үе тэнгийнхний жагсаалтад үе тэнгийн нөхөд нэмэх
int esp_now_send (const uint8_t *peer_addr, const uint8_t *өгөгдөл, size_t len)
Буцах:
- 1 = Амжилт
- 0 = амжилтгүй
Параметрүүд:
- peer_addr: үе тэнгийн MAC хаяг
- өгөгдөл: илгээх өгөгдөл
- len: өгөгдлийн урт
Тодорхойлолт:
ESPNOW өгөгдлийг илгээх. Зарим тохиолдолд ийм зүйл тохиолддог.
- Хэрэв peer_addr нь NULL биш бол MAC хаяг нь peer_addr -тай тохирч байгаа үе тэнгийнхэн рүү өгөгдөл илгээнэ үү.
- Хэрэв peer_addr нь NULL бол үе тэнгийн жагсаалтад нэмэгдсэн бүх үе тэнгийнхэн рүү өгөгдлийг илгээнэ үү
- Өгөгдлийн хамгийн их урт нь ESP_NOW_MAX_DATA_LEN -с бага байх ёстой
- Өгөгдлийн аргументээр заасан буфер нь esp_now_send буцсаны дараа хүчинтэй байх шаардлагагүй
int esp_now_register_recv_cb (cb)
Буцах:
- 1 = Амжилт
- 0 = амжилтгүй
Параметрүүд:
-
cb: ESPNOW өгөгдлийг хүлээн авах дуудлага хийх функц
-
хүчингүй cb (const uint8_t *mac_addr, const uint8_t *өгөгдөл, int data_len)
-
mac_addr:
хүлээн авагчийн mac хаяг
-
*өгөгдөл:
өгөгдөл хүлээн авах
-
data_len
өгөгдлийн байтын урт
-
-
Тодорхойлолт:
ESPNOW өгөгдлийг хүлээн авсны дараа cb функцийг дуудаарай
Алхам 5: Нэг талын харилцаа холбоо (ESP32 илгээгчийн хувьд)
ESP32 нь өгөгдлийг ESP8266 руу илгээдэг. энэ кодоор. BroadAddress хаягийг тохируулагч хүлээн авагчийн mac хаягаар солино уу. Минийх A4: CF: 12: C7: 9C: 77 байсан
// Шаардлагатай номын санг нэмнэ үү
#include // esp -ийн одоо ажиллаж буй функцэд хандахын тулд #include // ESP32 дээр Wifi чадамж нэмэхийн тулд // MAC хаягийг өргөн нэвтрүүлгийн хаяг гэсэн массивт хадгална уу; uint8_t yayımAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // Миний хүлээн авагчийн MAC хаяг/*олон хувьсагчийн өгөгдлийн төрлийг тодорхойлж, бүгдийг нь struct_message гэж нэрлэсэн*/typedef struct struct_message {char a [32]; int b; хөвөх в; Мөр d; bool e; } бүтэц_мессеж; // myData struct_message нэртэй бүтэц_мессеж үүсгэх myData; // статусыг хүчингүй болгох OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t status) -ийг хэвлэхээр өгөгдөл илгээх үед дууддаг функц {Serial.print ("\ r / nСүүлийн пакет илгээх байдал: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Хүргэлтийн амжилт": "Хүргэлт амжилтгүй болсон"); } void setup () {// ESP Serial.begin (115200) -тэй цуваа холболт хийх дамжуулалтын хурдыг тохируулах; // Төхөөрөмжийг Wi-Fi станцын WiFi.mode (WIFI_STA) болгон тохируулах; // wifi-ийг эхлүүлнэ // ESP-NOW-ийг эхлүүлж, хэрэв (esp_now_init ()! = ESP_OK) {Serial.println ("ESP-ийг эхлүүлэхэд алдаа гарвал -ОДОО "); буцах; } // ESPNOW өгөгдлийг esp_now_register_send_cb (OnDataSent) илгээсэний дараа OnDataSent функцийг дуудах; // peer esp_now_peer_info_t peerInfo бүртгүүлэх; // үе тэнгийнхний мэдээллийг addres memcpy (peerInfo.peer_addr,roadAddress, 6) руу заагч болгон эхлүүлж, оноох; // өргөн нэвтрүүлгийн хаягийн утгыг 6 байтаар peerInfo.peer_addr peerInfo.channel = 0 рүү хуулах; // esp -ийн ярьж буй суваг. 0 гэдэг нь тодорхойгүй гэсэн үг бөгөөд өгөгдлийг одоогийн суваг руу илгээх болно. 1-14 нь хүчинтэй сувгууд бөгөөд энэ нь peerInfo.encrypt локал төхөөрөмжтэй ижил байна; // шифрлэгдээгүй // Төхөөрөмжийг хосолсон төхөөрөмжийн жагсаалтад нэмнэ үү, хэрэв (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Хамтрагч нэмж чадсангүй"); буцах; }} void loop () {// strcpy илгээх утгыг тохируулах (myData.a, "Энэ бол ЧАР"); // "THIS IS A CHAR" -ийг өмнө нь тодорхойлсон миний "өгөгдлийн" a хувьсагч руу хадгалах myData.b = random (1, 20); // санамсаргүй утгыг хадгалах myData.c = 1.2; // float хадгалах myData.d = "Сайн байна уу"; // мөрийг хадгалах myData.e = false; // bool хадгалах // ESP-NOW-ээр 250 байтаас бага эсвэл тэнцүү өгөгдөл илгээх ба түүний статусыг буцаана esp_err_t result = esp_now_send (yayımAddress, (uint8_t *) & myData, sizeof (myData)); if (үр дүн == ESP_OK) {Serial.println ("Амжилттай илгээсэн"); } өөр {Serial.println ("Өгөгдөл илгээх алдаа"); } саатал (2000); }
ESP8266 нь энэхүү кодыг ашиглан ESP32 -аас өгөгдөл хүлээн авдаг.
// Шаардлагатай номын санг нэмнэ үү
#include // ESP32 дээр Wifi чадамж нэмэхийн тулд #include // esp -д одоо хандахын тулд функцууд /*бүтэцлэгдсэн олон хувьсагчийн өгөгдлийн төрлийг тодорхойлж, бүгдийг нь struct_message* /typedef struct struct_message {char a [32]; int b; хөвөх в; Мөр d; bool e; } бүтэц_мессеж; // myData struct_message нэртэй хувьсах бүтэц_мессеж үүсгэх myData; // өгөгдлийг хүлээн авч хэвлэх үед дуудагддаг функц OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Байт хүлээн авсан:"); 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) -тай цуваа холболт хийх дамжуулалтын хурдыг тохируулах; // Төхөөрөмжийг Wi-Fi станцын WiFi.mode (WIFI_STA) болгон тохируулах; // wifi-ийг эхлүүлнэ // ESP-NOW-ийг эхлүүлж, статусыг нь буцаана уу (esp_now_init ()! = 0) {Serial.println ("ESP-NOW-ийг эхлүүлэхэд алдаа гарсан"); буцах; } esp_now_set_self_role (ESP_NOW_ROLE_SLAVE); // Энэ esp esp_now_register_recv_cb (OnDataRecv) -ийн үүргийг тодорхойлдог; // ESPNOW өгөгдлийг хүлээн авсны дараа OnDataRecv функцийг дуудах} void loop () {}
Алхам 6: Нэг талын харилцаа холбоо (ESP8266 илгээгчийн хувьд)
ESP8266 нь өгөгдлийг ESP32 руу илгээдэг. энэ кодоор. BroadAddress хаягийг тохируулагч хүлээн авагчийн mac хаяг болгон өөрчилнө үү. Миний esp32 хаяг 30: AE: A4: F5: 03: A4. Esp8266 -ийн бусад функцийг эндээс үзнэ үү
// Шаардлагатай номын санг нэмнэ үү
#include // ESP32 дээр Wifi чадамж нэмэхийн тулд #include // esp -ийн одоо ажиллаж байгаа функцуудад хандахын тулд // MAC хаягийг өргөн нэвтрүүлгийн хаягаар хадгална уу; uint8_t yayımAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*олон хувьсагчийн өгөгдлийн төрлийг тодорхойлж, бүгдийг нь struct_message гэж нэрлэсэн*/ typedef struct struct_message {char a [32]; int b; хөвөх в; Мөр d; bool e; } бүтэц_мессеж; // myData struct_message myData нэртэй бүтэцлэгдсэн хувьсагч үүсгэх; // өгөгдөл илгээгдэж, статусаа хүчингүй болгох OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) хэвлэх үед дууддаг функц {Serial.print ("\ r / nСүүлийн пакет илгээх байдал: / t"); Serial.println (sendStatus == 1? "Хүргэлтийн амжилт": "Хүргэлт амжилтгүй болсон"); } void setup () {// ESP Serial.begin (115200) -тай цуваа холболт хийх дамжуулалтын хурдыг тохируулах; // Төхөөрөмжийг Wi-Fi станцын WiFi.mode (WIFI_STA) болгон тохируулах; // wifi-ийг эхлүүлнэ // ESP-NOW-ийг эхлүүлж, (esp_now_init ()) {Serial.println ("ESP-NOW-ийг эхлүүлэхэд алдаа гарвал") статусыг буцаана.); буцах; } esp_now_register_send_cb (OnDataSent); // ESPNOW өгөгдлийг илгээсэний дараа OnDataSent функцийг дуудаарай // Төхөөрөмжийг хосолсон төхөөрөмжийн жагсаалтад нэмнэ үү (esp_now_add_peer (yayımAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)) {Serial.println ("үе тэнгийнхнийг нэмж чадсангүй"); буцах; }} void loop () {// strcpy илгээх утгыг тохируулах (myData.a, "Энэ бол ЧАР"); // "THIS IS A CHAR" -г өмнө нь тодорхойлсон миний "өгөгдлийн" a хувьсагч руу хадгалах myData.b = random (1, 20); // санамсаргүй утгыг хадгалах myData.c = 1.2; // хөвөгч файлыг хадгалах myData.d = "SP8266"; // тэмдэгт мөрийг хадгалах myData.e = false; // bool хадгалах // ESP-NOW-ээр 250 байтаас бага буюу тэнцүү өгөгдөл илгээх ба түүний статусыг буцаана int result = esp_now_send (yayımAddress, (uint8_t *) & myData, sizeof (myData)); if (esp_now_init ()! = 0) {Serial.println ("Амжилттай илгээсэн"); } өөр {Serial.println ("Өгөгдөл илгээх алдаа"); } саатал (2000); }
ESP32 нь ESP8266 -аас өгөгдөл хүлээн авдаг. энэ кодоор. Бусад функцийг энд шүүнэ үү
// Шаардлагатай номын санг нэмнэ үү
#include // esp -ийн одоо ажиллаж буй функцүүдэд хандахын тулд #include // ESP32 дээр Wifi чадамж нэмэх /*олон хувьсагчийн өгөгдлийн төрлийг тодорхойлж, бүгдийг нь struct_message* /typedef struct struct_message {char a [32] гэж нэрлэсэн. int b; хөвөх в; Мөр d; bool e; } бүтэц_мессеж; // myData struct_message нэртэй хувьсах бүтэц_мессеж үүсгэх myData; // өгөгдлийг хүлээн авч хэвлэх үед дууддаг функц OnDataRecv (const uint8_t * mac, const uint8_t * incomingData, int len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Байт хүлээн авсан:"); 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) -тай цуваа холболт хийх дамжуулалтын хурдыг тохируулах; // Төхөөрөмжийг Wi-Fi станцын WiFi.mode (WIFI_STA) болгон тохируулах; // wifi-ийг эхлүүлнэ // ESP-NOW-ийг эхлүүлж, статусыг нь буцаана уу (esp_now_init ()! = 0) {Serial.println ("ESP-NOW-ийг эхлүүлэхэд алдаа гарсан"); буцах; } esp_now_register_recv_cb (OnDataRecv); // ESPNOW өгөгдлийг хүлээн авсны дараа OnDataRecv функцийг дуудах} void loop () {}
Алхам 7: ХОЁР АРГА ХАРИЛЦАА
ESP32 нь эхлүүлэх талаархи мэдээллийг ESP8266 руу илгээдэг. ESP8266 нь хүлээн авсан мессежийг хэвлээд дараа нь хариуг нь ESP32 цуваа дэлгэц дээрээ хэвлэнэ.
ESP32 КОД
// Шаардлагатай номын санг нэмнэ үү
#include // esp -ийн одоо ажиллаж буй функцуудад хандахын тулд #include // ESP32 дээр Wifi -ийн чадавхийг нэмэхийн тулд // MAC хаягийг radioAddress нэртэй массивт хадгална уу; uint8_t yayımAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // Миний хүлээн авагчийн MAC хаяг/*олон хувьсагчийн өгөгдлийн төрлийг тодорхойлж, бүгдийг нь struct_message гэж нэрлэсэн*/typedef struct struct_message {char a [32]; int b; хөвөх в; Мөр d; bool e; } бүтэц_мессеж; // myData struct_message нэртэй бүтэц_мессеж үүсгэх myData; // статусыг хүчингүй болгох OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t status) -ийг хэвлэхээр өгөгдөл илгээх үед дууддаг функц {Serial.print ("\ r / nСүүлийн пакет илгээх байдал: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Хүргэлтийн амжилт": "Хүргэлт амжилтгүй болсон"); if (status! = ESP_NOW_SEND_SUCCESS) {send_data ();}} OnDataRecv (const uint8_t * mac, const uint8_t * incomingData, int len) {memcpy (& myData, incomingData, sizeof (myData)) хүчингүй болно; Serial.print ("Байт хүлээн авсан:"); 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) -тай цуваа холболт хийх дамжуулалтын хурдыг тохируулах; // Төхөөрөмжийг Wi-Fi станцын WiFi.mode (WIFI_STA) болгон тохируулах; // wifi-г эхлүүлнэ // ESP-NOW-ийг эхлүүлж, (esp_now_init ()! = ESP_OK) {Serial.println ("ESP-ийг эхлүүлэхэд алдаа гарлаа -ОДОО "); буцах; } // ESPNOW өгөгдлийг esp_now_register_send_cb (OnDataSent) илгээсэний дараа OnDataSent функцийг дуудах; // peer esp_now_peer_info_t peerInfo бүртгүүлэх; // үе тэнгийнхний мэдээллийг addres memcpy (peerInfo.peer_addr,roadAddress, 6) руу заагч болгон эхлүүлж, оноох; // өргөн нэвтрүүлгийн хаягийн утгыг 6 байтаар peerInfo.peer_addr peerInfo.channel = 0 рүү хуулах; // esp -ийн ярьж буй суваг. 0 гэдэг нь тодорхойгүй гэсэн үг бөгөөд өгөгдлийг одоогийн суваг руу илгээх болно.1-14 нь хүчинтэй сувгууд бөгөөд энэ нь peerInfo.encrypt локал төхөөрөмжтэй ижил байна; // шифрлэгдээгүй // Төхөөрөмжийг хосолсон төхөөрөмжийн жагсаалтад нэмнэ үү, хэрэв (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Хамтрагч нэмж чадсангүй"); буцах; } esp_now_register_recv_cb (OnDataRecv); // ESPNOW өгөгдлийг send_data () хүлээн авсны дараа OnDataRecv функцийг дуудах; } void loop () {} void send_data () {Serial.println ("Илгээх"); // strcpy илгээх утгыг тохируулах (myData.a, "Энэ бол ЧАР"); // "THIS IS A CHAR" -г өмнө нь тодорхойлсон миний "өгөгдлийн" a хувьсагч руу хадгалах myData.b = random (1, 20); // санамсаргүй утгыг хадгалах myData.c = 1.2; // хөвөгч файлыг хадгалах myData.d = "ESP32"; // тэмдэгт мөрийг хадгалах myData.e = false; // bool хадгалах // ESP-NOW-ээр 250 байтаас бага эсвэл тэнцүү өгөгдөл илгээх ба түүний статусыг буцаана esp_err_t result = esp_now_send (yayımAddress, (uint8_t *) & myData, sizeof (myData)); if (үр дүн == ESP_OK) {Serial.println ("Амжилттай илгээсэн");} өөр {Serial.println ("Өгөгдлийг илгээхэд алдаа гарсан"); }}
ESP8266 код
// Шаардлагатай номын санг нэмнэ үү
#include // ESP32 дээр Wifi чадамж нэмэхийн тулд #include // esp -ийн одоо ажиллаж байгаа функцуудад хандахын тулд // MAC хаягийг өргөн нэвтрүүлгийн хаягаар хадгална уу; uint8_t yayımAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*олон хувьсагчийн өгөгдлийн төрлийг тодорхойлж, бүгдийг нь struct_message гэж нэрлэсэн*/ typedef struct struct_message {char a [32]; int b; хөвөх в; Мөр d; bool e; } бүтэц_мессеж; // myData struct_message нэртэй хувьсах бүтэц_мессеж үүсгэх myData; // өгөгдлийг хүлээн авч хэвлэх үед дуудагддаг функц OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Байт хүлээн авсан:"); 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 (); } хүчингүй OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nСүүлийн пакет илгээх байдал: / t"); Serial.println (sendStatus == 1? "Хүргэлтийн амжилт": "Хүргэлт амжилтгүй болсон"); if (sendStatus! = 1) {send_data (); }} void send_data () {// strcpy илгээх утгыг тохируулах (myData.a, "Энэ бол ЧАР"); // "THIS IS A CHAR" -г өмнө нь тодорхойлсон миний "өгөгдлийн" a хувьсагч руу хадгалах myData.b = random (1, 20); // санамсаргүй утгыг хадгалах myData.c = 1.2; // хөвөгч файлыг хадгалах myData.d = "ESP8266"; // тэмдэгт мөрийг хадгалах myData.e = false; // bool -ийг хадгалах esp_now_send (yayımAddress, (uint8_t *) & myData, sizeof (myData)); } void setup () {// ESP Serial.begin (115200) -тай цуваа холболт хийх дамжуулалтын хурдыг тохируулах; // Төхөөрөмжийг Wi-Fi станцын WiFi.mode (WIFI_STA) болгон тохируулах; // wifi-ийг эхлүүлнэ // ESP-NOW-ийг эхлүүлж, статусыг нь буцаана уу (esp_now_init ()! = 0) {Serial.println ("ESP-NOW-ийг эхлүүлэхэд алдаа гарсан"); буцах; } if (esp_now_add_peer (radioAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0)) {Serial.println ("Үе тэнгийнхнээ нэмж чадсангүй"); буцах; } 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) -ийн үүргийг тодорхойлдог; // ESPNOW өгөгдлийг хүлээн авсны дараа OnDataRecv функцийг дуудах} void loop () {}
Алхам 8: АШИГЛАЛ
ESPNOW_32_Жишээ
ESPNOW_8266 Жишээ
WIFI.h
ESP8266WiFi.h
esp_now.h ESP8266 -ийн хувьд
esp_now.h ESP32 -ийн хувьд
esp_now албан ёсны баримт бичиг (функцийг илүү сайн тайлбарлах)
ESP-NOW албан ёсны гарын авлага
Зөвлөмж болгож буй:
Arduino болон DFPlayer Mini MP3 тоглуулагчийн модулийг ашиглан LCD ашиглан MP3 тоглуулагч хэрхэн хийх вэ: 6 алхам
Arduino болон DFPlayer Mini MP3 тоглуулагчийн модулийг ашиглан LCD тоглуулагчийг хэрхэн яаж хийх вэ: Өнөөдөр бид Arduino болон DFPlayer мини MP3 тоглуулагчийн модулийг ашиглан LCD тоглуулагч хийх болно. Төсөл нь SD карт дээрх MP3 файлуудыг уншиж, түр зогсоох боломжтой. мөн 10 жилийн өмнөх төхөөрөмжтэй адил тоглоорой. Мөн өмнөх дуу, дараагийн дуу нь хөгжилтэй байдаг
Google Speech API болон Python ашиглан яриа таних: 4 алхам
Google Speech API болон Python ашиглан яриа таних: Яриа таних Хэл яриа таних нь хиймэл оюун ухааны дэд талбар болох байгалийн хэлний боловсруулалтын нэг хэсэг юм. Энгийнээр хэлэхэд, яриа таних гэдэг нь компьютерийн програм хангамж нь ярианы хэл дээрх үг, хэллэгийг таних чадвар юм
Arduino UNO ашиглан дрон хэрхэн хийх вэ - Микроконтроллер ашиглан квадрокоптер хийх: 8 алхам (зурагтай)
Arduino UNO ашиглан дрон хэрхэн хийх вэ | Микроконтроллер ашиглан квадрокоптер хийх: Танилцуулга Миний Youtube сувагт зочлоорой Drone бол худалдан авахад маш үнэтэй хэрэгсэл юм. Энэ нийтлэлд би үүнийг хэрхэн хямд үнээр хийх талаар ярилцах болно. Та яаж ийм үнээр хямд үнээр өөрийн гараар хийх вэ … Энэтхэгт бүх материал (мотор, ESC
Тэмдэглэлийн дэвтэр болон бусад олон зүйлийг ашиглан тоглоом хийх: 10 алхам
Тэмдэглэлийн дэвтэр болон бусад олон зүйл дээр тоглоом хийх: Энэ бол миний анхны зааварчилгаа юм. Тиймээс хэрэв танд санал байвал сэтгэгдэл дээр бичээрэй. Бид бүгдээрээ notepad гэдэг үгийг сонссоныхоо дараа зарим зүйлийг уйтгартай ашиггүй програмуудын талаар санадаг. Notepad бол үүнээс хамаагүй илүү юм
N: Хувьсах гэрэлтүүлгийн түвшин бүхий олон давхар акрил болон LED баримлыг хэрхэн яаж хийх вэ: 11 алхам (зурагтай)
N: Хувьсах гэрэлтүүлгийн түвшингээр олон давхар акрил болон LED баримлыг хэрхэн яаж хийх вэ: Лапландын урлаг/дизайны бүлгэмийн зохион байгуулсан www.laplandscape.co.uk үзэсгэлэнгийн зориулалтаар өөрийгөө хэрхэн өөрийн болгохыг эндээс олж мэдэх боломжтой. Илүү олон зургийг flickr дээрээс үзэх боломжтой Энэхүү үзэсгэлэн нь 2008 оны 11 -р сарын 26 -ны Лхагва гарагаас 12 -р сарын 12 -ны Баасан хүртэл үргэлжлэх болно