Мазмуну:

Кантип ESP32 менен ESP8266 аркылуу ESP-NOW аркылуу бир нече ESP сүйлөшүүлөрүн жасоо керек: 8 кадам
Кантип ESP32 менен ESP8266 аркылуу ESP-NOW аркылуу бир нече ESP сүйлөшүүлөрүн жасоо керек: 8 кадам

Video: Кантип ESP32 менен ESP8266 аркылуу ESP-NOW аркылуу бир нече ESP сүйлөшүүлөрүн жасоо керек: 8 кадам

Video: Кантип ESP32 менен ESP8266 аркылуу ESP-NOW аркылуу бир нече ESP сүйлөшүүлөрүн жасоо керек: 8 кадам
Video: ESP8266 Project: How to control 2 AC bulb or load using 2 Relay with NodeMCU and D1 Mini over WiFi 2024, Ноябрь
Anonim
Кантип ESP32 жана ESP8266 аркылуу ESP-NOW аркылуу бир нече ESP сүйлөшүү керек
Кантип ESP32 жана ESP8266 аркылуу ESP-NOW аркылуу бир нече ESP сүйлөшүү керек

Менин иштеп жаткан долбоорумда, роутерсиз бири -бири менен сүйлөшүү үчүн мага бир нече ESP керек. Бул үчүн мен ESP-NOW аркылуу ESP роутери жок бири-бири менен зымсыз байланыш түзүү үчүн колдонуп жатам.

Жабдуулар

Мен колдонгон нерселер:

ESP32 DEV модулу

NODEMCU 1.0 (ESP12E модулу)

1 -кадам: Board Mac дарегин алыңыз

Board Mac дарегин алыңыз
Board Mac дарегин алыңыз
Board Mac дарегин алыңыз
Board Mac дарегин алыңыз

ESP-now аркылуу, ESP түзмөктөрү өзүлөрүнүн уникалдуу даректерине маалыматтарды жөнөтүү аркылуу сүйлөшүп, учурда espти интиляциялоодо жасалган ички кирүү түйүнүнүн тармагына туташып турат.. Ошентип, ар бир түзмөктүн MAC дарегин аныктаңыз. Менин ESP32 жана ESP8266 такталарым орнотулган

ESP32 үчүн

#include "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 кантип иштейт

Бул жерде анын кантип иштээри жөнүндө жалпы маалымат:

  1. Азыр esp жана wifi китепканаларын кошуңуз
  2. Алуучунун ESPнин Mac дарегин сактаңыз
  3. Жөнөтүү/алуу билдирүүсүнүн маалымат структурасын аныктаңыз
  4. Орнотууда wifi'ны станция режимине коюңуз
  5. Esp_now баштоо
  6. маалыматтарды жөнөтүүдөн жана алгандан кийин чакырылган кайра чалуу функциясын жасоо жана каттоо
  7. Esp8266 үчүн анын ролун аныктаңыз
  8. теңтушту же алуучуну каттоо
  9. Дайындарды жөнөтүү

3-кадам: ESP-NOW ФУНКЦИЯЛАРЫ (ESP32)

esp_now_init (жараксыз)

Кайтуу:

  • ESP_OK: ийгиликтүү
  • ESP_ERR_ESPNOW_INTERNAL: Ички ката

Description:

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 = ийгиликсиз

Description:

ESPNOW маалыматын жөнөткөндөн кийин OnDataSent функциясын чакырыңыз

esp_now_add_peerconst esp_now_peer_info_t *peer)

Кайтаруулар:

  • 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: теңтуш бар

Параметрлер:

  • peer: peer маалыматы төмөнкү маалыматтар менен:

    • uint8_t

      peer_addr [ESP_NOW_ETH_ALEN]; ESPNOW peer MAC дареги, бул станциянын же softapтын MAC дареги

    • uint8_t lmk [ESP_NOW_KEY_LEN]

      ESPNOW маалыматты шифрлөө үчүн колдонулган жергиликтүү мастер ачкычы

    • uint8_t каналы

      ESPNOW дайындарын жөнөтүү/алуу үчүн теңтуштар колдонуучу Wi-Fi каналы. Эгерде мааниси 0 болсо, учурдагы каналды колдонуңуз, бул станция же программалык камсыздоо. Болбосо, ал станция же программалык камсыздоо иштеп жаткан канал катары коюлушу керек

    • wifi_interface_t ifidx

      Wi-Fi интерфейси ESPNOW маалыматын жөнөтүү/алуу үчүн колдонулат

    • bool шифрлөө

      Бул теңтуш жөнөткөн/алган ESPNOW маалыматы шифрленген же жок

    • void *priv

      ESPNOW жеке маалымат

Description:

Курдаштар тизмесине кошуу

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: peer MAC дареги
  • маалыматтар: жөнөтүү үчүн маалыматтар
  • len: маалыматтын узундугу

Description:

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

        маалыматтын байт узундугу

Description:

ESPNOW маалыматын алгандан кийин cb функциясын чакырыңыз

4-кадам: ESP-NOW ФУНКЦИЯЛАРЫ (ESP8266)

FUNCTIONS DESCRIPTION ESP32 ESP8266

int esp_now_init (жараксыз)

Кайтып келет:

  • 1 = ийгилик
  • 0 = ийгиликсиз

Description

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ке артыкчылык берилет

Description

Түзмөктүн ролун коет

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 = ийгиликсиз

Description

ESPNOW маалыматын жөнөткөндөн кийин OnDataSent функциясын чакырыңыз

int esp_now_add_peer (u8 *mac_addr, u8 ролу, u8 каналы, u8 *ачкычы, u8 key_len)

Кайтаруулар:

  • 1 = ийгилик
  • 0 = ийгиликсиз

Параметрлер:

  • mac_addr

    теңтушумдун Mac дареги

  • ролу
  • канал

    Эгерде мааниси 0 болсо, учурдагы каналды колдонуңуз, кайсы станция же программалык камсыздоо. Болбосо, ал станция же программалык камсыздоо иштеп жаткан канал катары коюлушу керек

  • *ачкыч

    шифрлөө үчүн ачкыч

  • key_len

    ачкычтын узундугу

Description:

Курдаштар тизмесине кошуу

int esp_now_send (const uint8_t *peer_addr, const uint8_t *маалыматтар, size_t len)

Кайтып келет:

  • 1 = Ийгилик
  • 0 = Fail

Параметрлер:

  • peer_addr: peer MAC дареги
  • маалыматтар: жөнөтүү үчүн маалыматтар
  • len: маалыматтын узундугу

Description:

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 = Fail

Параметрлер:

  • cb: ESPNOW маалыматын алуу үчүн кайра чалуу функциясы

    • жараксыз cb (const uint8_t *mac_addr, const uint8_t *маалыматтар, int data_len)

      • mac_addr:

        алуучунун Mac дареги

      • *маалыматтар:

        маалыматтарды алуу

      • data_len

        маалыматтын байт узундугу

Description:

ESPNOW маалыматын алгандан кийин cb функциясын чакырыңыз

5 -кадам: Бир тараптуу байланыш (ESP32 жөнөтүүчү катары)

ESP32 маалыматтарды ESP8266га жөнөтөт. бул код менен. RoadAddress дарегин түзөтүүчү кабыл алуучуңуздун Mac дарегине өзгөртүңүз. Меники A4: CF: 12: C7: 9C: 77 болчу

// Керектүү китепканаларды кошуу

#include // esp азыр функцияларына кирүү үчүн #include // WSP мүмкүнчүлүктөрүн ESP32ге кошуу үчүн // MAC дарегин yayınAddress аттуу массивде сактоо; uint8_t yayımAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // Менин кабыл алуучумдун MAC дареги/*бир нече өзгөрмөлөрдүн маалымат түрлөрүн аныктап, анын баарын struct_message*/typedef struct struct_message деп аташты {char a [32]; int b; сүзүү c; Сап d; бол; } struct_message; // myData аттуу struct_message түзүңүз 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 Station WiFi.mode (WIFI_STA) катары коюңуз; // wifi'ди баштайт // ESP-АЗЫР баштайт жана анын абалын кайтарат, эгерде (esp_now_init ()! = ESP_OK) {Serial.println ("ESPти баштоо катасы -ЭМИ "); кайтуу; } // ESPNOW дайындарын esp_now_register_send_cb (OnDataSent) жөнөткөндөн кийин OnDataSent функциясын чакырыңыз; // Теңтуш esp_now_peer_info_t peerInfo; // инициализациялоо жана теңтуш маалыматын addres memcpy үчүн көрсөткүч катары дайындоо (peerInfo.peer_addr,roadAddress, 6); // radioAddress маанисин 6 байт менен көчүрүү peerInfo.peer_addr peerInfo.channel = 0; // esp сүйлөгөн канал. 0 белгисиз дегенди билдирет жана маалыматтар учурдагы каналга жөнөтүлөт. 1-14 жергиликтүү peerInfo.encrypt = false менен бирдей болгон жарактуу каналдар; // шифрленген эмес // Түзмөктү жупташкан түзмөктөр тизмесине кошуу эгер (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Теңдешти кошуу ишке ашкан жок"); кайтуу; }} void loop () {// strcpy жөнөтүү үчүн маанилерди коюңуз (myData.a, "THIS IS A CHAR"); // "THIS IS A CHAR" сактоо 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 (roadAddress, (uint8_t *) & myData, sizeof (myData)); if (result == ESP_OK) {Serial.println ("Ийгилик менен жөнөтүлдү"); } else {Serial.println ("Маалыматтарды жөнөтүүдө ката кетти"); } delay (2000); }

ESP8266 бул кодду колдонуу менен ESP32ден маалыматтарды алат.

// Керектүү китепканаларды кошуу

#include // Wifi мүмкүнчүлүктөрүн ESP32ге кошуу үчүн #include // espке кирүү үчүн азыр функциялары /*структураланган көптөгөн өзгөрмөлөрдүн маалымат түрлөрүн аныктап, анын баарын struct_message* /typedef struct struct_message {char a [32]; int b; сүзүү c; Сап d; bool e; } struct_message; // myData аттуу struct_message өзгөрмөсүн түзүңүз 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 Station WiFi.mode (WIFI_STA) катары коюңуз; // wifi-ды баштайт // ESP-АЗЫР баштайт жана анын статусун кайтарат, эгерде (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ге маалыматтарды жөнөтөт. бул код менен. RoadAddress дарегин түзөтүүчү кабыл алуучуңуздун Mac дарегине өзгөртүңүз. Менин esp32 дарегим 30: AE: A4: F5: 03: A4. Esp8266 үчүн башка функциялар үчүн бул жерге өтүңүз

// Керектүү китепканаларды кошуу

#include // ESP32де Wifi мүмкүнчүлүктөрүн кошуу үчүн #include // espтин азыр функциясына кирүү үчүн // MAC дарегинroadAddress аттуу массивде сактоо; uint8_t yayımAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*структураланган бир нече өзгөрмөлөрдүн маалымат түрлөрүн аныктап, анын баарын struct_message деп өзгөрткөн*/ typedef struct struct_message {char a [32]; int b; сүзүү c; Сап d; bool e; } struct_message; // 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 Station 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"); // "THIS IS A CHAR" сактоо myData.b = random (1, 20) мурда аныкталган менин "маалыматтарымдын" а өзгөрмөсүнө. // кокус маанини сактоо myData.c = 1.2; // float сактоо myData.d = "SP8266"; // сапты сактоо myData.e = false; // bool сактоо // ESP-NOW аркылуу 250 байттан аз же барабар маалыматтарды жөнөтүү жана статусун кайтарат int result = esp_now_send (roadAddress, (uint8_t *) & myData, sizeof (myData)); if (esp_now_init ()! = 0) {Serial.println ("Ийгилик менен жөнөтүлдү"); } else {Serial.println ("Маалыматтарды жөнөтүүдө ката кетти"); } delay (2000); }

ESP32 ESP8266дан маалыматтарды алат. бул код менен. Башка функциялар үчүн бул жерде калыстык кылыңыз

// Керектүү китепканаларды кошуу

#include // espке азыр кирүү үчүн #include // ESP32ге Wifi мүмкүнчүлүктөрүн кошуу үчүн /*структураланган жана анын баарын struct_message* /typedef struct struct_message {char a [32] деп өзгөрткөн көптөгөн өзгөрмөлөрдүн маалымат түрлөрүн аныктаңыз. int b; сүзүү c; Сап d; bool e; } struct_message; // myData аттуу struct_message өзгөрмөсүн түзүңүз 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 Station WiFi.mode (WIFI_STA) катары коюу; // wifi-ды баштайт // ESP-АЗЫР баштайт жана анын статусун кайтарат, эгерде (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 дарегинroadAddress аттуу массивде сактоо; uint8_t yayımAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // Менин кабыл алуучумдун MAC дареги/*бир нече өзгөрмөлөрдүн маалымат түрлөрүн аныктап, анын баарын struct_message*/typedef struct struct_message деп аташты {char a [32]; int b; сүзүү c; Сап d; bool e; } struct_message; // myData аттуу struct_message түзүңүз 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 Station WiFi.mode (WIFI_STA) катары коюңуз; // wifi'ди баштайт // ESP-АЗЫР баштайт жана анын абалын кайтарат, эгерде (esp_now_init ()! = ESP_OK) {Serial.println ("ESPти баштоо катасы -ЭМИ "); кайтуу; } // ESPNOW дайындарын esp_now_register_send_cb (OnDataSent) жөнөткөндөн кийин OnDataSent функциясын чакырыңыз; // Каттоо esp_now_peer_info_t peerInfo; // инициализациялоо жана теңтуш маалыматын addres memcpy үчүн көрсөткүч катары дайындоо (peerInfo.peer_addr,roadAddress, 6); // radioAddress маанисин 6 байт менен көчүрүү peerInfo.peer_addr peerInfo.channel = 0; // esp сүйлөгөн канал. 0 белгисиз дегенди билдирет жана маалыматтар учурдагы каналга жөнөтүлөт.1-14 жергиликтүү peerInfo.encrypt = false менен бирдей болгон жарактуу каналдар; // шифрленген эмес // Түзмөктү жупташкан түзмөктөр тизмесине кошуу эгер (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Теңдешти кошуу ишке ашкан жок"); кайтуу; } esp_now_register_recv_cb (OnDataRecv); // ESPNOW маалыматтарын алгандан кийин OnDataRecv функциясына чалыңыз send_data (); } void loop () {} void send_data () {Serial.println ("Жөнөтүү"); // strcpy жөнөтүү үчүн маанилерди коюңуз (myData.a, "Бул БУЛ ЧАР"); // "THIS IS A CHAR" сактоо myData.b = random (1, 20) мурда аныкталган менин "маалыматтарымдын" а өзгөрмөсүнө. // кокус маанини сактоо myData.c = 1.2; // float сактоо myData.d = "ESP32"; // сапты сактоо myData.e = false; // bool сактоо // ESP-NOW аркылуу 250 байттан азыраак же барабар маалыматтарды жөнөтүү жана анын статусун кайтарат esp_err_t result = esp_now_send (roadAddress, (uint8_t *) & myData, sizeof (myData)); if (result == ESP_OK) {Serial.println ("Ийгилик менен жөнөтүлдү");} else {Serial.println ("Дайындарды жөнөтүүдө ката кетти"); }}

ESP8266 КОДУ

// Керектүү китепканаларды кошуу

#include // ESP32де Wifi мүмкүнчүлүктөрүн кошуу үчүн #include // espтин азыр функциясына кирүү үчүн // MAC дарегинroadAddress аттуу массивде сактоо; uint8_t yayımAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*структураланган бир нече өзгөрмөлөрдүн маалымат түрлөрүн аныктап, анын баарын struct_message деп өзгөрткөн*/ typedef struct struct_message {char a [32]; int b; сүзүү c; Сап d; bool e; } struct_message; // myData аттуу struct_message өзгөрмөсүн түзүңүз 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 (); } void 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" сактоо myData.b = random (1, 20) мурда аныкталган менин "маалыматтарымдын" а өзгөрмөсүнө. // кокус маанини сактоо myData.c = 1.2; // float сактоо myData.d = "ESP8266"; // сапты сактоо myData.e = false; // Save a bool esp_now_send (radioAddress, (uint8_t *) & myData, sizeof (myData)); } void setup () {// ESP Serial.begin (115200) менен сериялык байланыш үчүн бердин ылдамдыгын коюңуз; // Түзмөктү Wi-Fi Station WiFi.mode (WIFI_STA) катары коюу; // wifi-ды баштайт // ESP-АЗЫР баштайт жана анын статусун кайтарат, эгерде (esp_now_init ()! = 0) {Serial.println ("ESP-NOW баштоо катасы"); кайтуу; } if (esp_now_add_peer (roadAddress, 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_Example

ESPNOW_8266 Мисал

WIFI.h

ESP8266WiFi.h

esp_now.h ESP8266 үчүн

esp_now.h ESP32 үчүн

esp_now расмий документи (Функцияларды жакшыраак түшүндүрүү)

ESP-NOW расмий гид

Сунушталууда: