Tartalomjegyzék:

Több ESP beszélgetés kezdeményezése az ESP-NOW segítségével az ESP32 és az ESP8266 használatával: 8 lépés
Több ESP beszélgetés kezdeményezése az ESP-NOW segítségével az ESP32 és az ESP8266 használatával: 8 lépés

Videó: Több ESP beszélgetés kezdeményezése az ESP-NOW segítségével az ESP32 és az ESP8266 használatával: 8 lépés

Videó: Több ESP beszélgetés kezdeményezése az ESP-NOW segítségével az ESP32 és az ESP8266 használatával: 8 lépés
Videó: Аризона, лето 2004 г. | Полный фильм | приключения, семейный, комедия 2024, November
Anonim
Hogyan lehet több ESP beszélgetést kezdeményezni az ESP-NOW segítségével az ESP32 és ESP8266 használatával
Hogyan lehet több ESP beszélgetést kezdeményezni az ESP-NOW segítségével az ESP32 és ESP8266 használatával

Folyamatban lévő projektem során több ESP -re van szükségem, hogy útválasztó nélkül beszélhessünk egymással. Ehhez az ESP-NOW-t használom a vezeték nélküli kommunikációra egymással az ESP útválasztója nélkül.

Kellékek

Amiket használtam:

ESP32 DEV modul

NODEMCU 1.0 (ESP12E modul)

1. lépés: Szerezze be a Board Mac -címét

Szerezd meg a Board Mac -címét
Szerezd meg a Board Mac -címét
Szerezze meg a Board Mac -címét
Szerezze meg a Board Mac -címét

Az ESP-now segítségével az ESP-eszközök úgy beszélnek egymással, hogy adatokat küldnek egyedi címükre, miközben csatlakoznak egy belső hozzáférési ponthálózathoz, amelyet az esp mostanában végeztek.. Így határozza meg az egyes eszközök MAC -címét. A csatolt ESP32 és ESP8266 kártya beállítások

ESP32 esetén

#include "WiFi.h" // Az ESP32 WIFI képességeinek elérése

void setup () {Serial.begin (115200); Serial.print ("ESP32 Board MAC Address:"); Serial.println (WiFi.macAddress ()); // kinyomtatja a MAC -címét} void loop () {}

ESP8266 esetén

#include // Az ESP8266 WIFI képességeinek eléréséhez használt könyvtár

void setup () {Serial.begin (115200); Sorozat.println (); Serial.print ("ESP8266 Board MAC Address:"); Serial.println (WiFi.macAddress ()); // kinyomtatja a MAC -címét} void loop () {}

A MAC -CÍMEim:

  • ESP32 - 30: AE: A4: F5: 03: A4
  • ESP8266: A4: CF: 12: C7: 9C: 77

2. lépés: Az ESP-NOW működésének elősegítése

Íme egy áttekintés a működéséről:

  1. Tartalmazza az esp most és a wifi könyvtárakat
  2. Mentse a címzett ESP mac -címét
  3. Határozza meg a küldött/fogadott üzenet adatszerkezetét
  4. A beállításnál állítsa a wifit állomás üzemmódba
  5. Inicializálja az esp_now parancsot
  6. az adatok küldése és fogadása után hívott visszahívási funkció létrehozása és regisztrálása
  7. Az Esp8266 esetében határozza meg a szerepét
  8. regisztrálja a társat vagy a címzettet, pl
  9. Adatok küldése

3. lépés: ESP-NOW FUNKCIÓK (ESP32)

esp_now_init (érvénytelen)

Visszatérés:

  • ESP_OK: sikeres
  • ESP_ERR_ESPNOW_INTERNAL: Belső hiba

Leírás:

Inicializálja az ESPNOW funkciót

esp_now_register_send_cb (cb)

Visszatérések:

  • ESP_OK: sikeres
  • ESP_ERR_ESPNOW_NOT_INIT: Az ESPNOW nincs inicializálva
  • ESP_ERR_ESPNOW_INTERNAL: belső hiba

Paraméterek:

  • cb: visszahívási funkció neve ESPNOW adatok elküldése után a következő paraméterekkel:

    • void cb (const uint8_t *mac_addr, esp_now_send_status_t állapot)

      • mac_addr: a vevő mac címe
      • állapot:

        • 1 = siker
        • 0 = nem

Leírás:

Hívja meg az OnDataSent függvényt az ESPNOW adatok elküldése után

esp_now_add_peerconst esp_now_peer_info_t *társ)

Visszatérések:

  • ESP_OK: sikeres
  • ESP_ERR_ESPNOW_NOT_INIT: Az ESPNOW nincs inicializálva
  • ESP_ERR_ESPNOW_ARG: érvénytelen érv
  • ESP_ERR_ESPNOW_FULL: a társak listája megtelt
  • ESP_ERR_ESPNOW_NO_MEM: elfogyott a memória
  • ESP_ERR_ESPNOW_EXIST: társ létezik

Paraméterek:

  • peer: társadatok a következő adatokkal:

    • uint8_t

      peer_addr [ESP_NOW_ETH_ALEN]; ESPNOW társ MAC cím, amely egyben az állomás vagy a softap MAC címe

    • uint8_t lmk [ESP_NOW_KEY_LEN]

      Az ESPNOW hasonló helyi mesterkulcs, amely az adatok titkosítására szolgál

    • uint8_t csatorna

      Wi-Fi csatorna, amelyet a társ használ ESPNOW adatok küldésére/fogadására. Ha az érték 0, akkor használja az aktuális csatornát, amelyik állomás vagy softap be van kapcsolva. Ellenkező esetben azt a csatornát kell beállítani, amelyen az állomás vagy a hangszóró be van kapcsolva

    • wifi_interface_t ifidx

      Wi-Fi interfész, amelyet a társak használnak az ESPNOW adatok küldésére/fogadására

    • bool titkosított

      Az ESPNOW adatok, amelyeket ez a partner küld/fogad, titkosítva vannak, vagy sem

    • semmis *priv

      Az ESPNOW társadatok

Leírás:

Peer hozzáadása a peer listához

esp_now_send (const uint8_t *peer_addr, const uint8_t *adatok, size_t len)

Visszatérések:

  • ESP_OK: sikeres
  • ESP_ERR_ESPNOW_NOT_INIT: Az ESPNOW nincs inicializálva
  • ESP_ERR_ESPNOW_ARG: érvénytelen érv
  • ESP_ERR_ESPNOW_INTERNAL: belső hiba
  • ESP_ERR_ESPNOW_NO_MEM: elfogyott a memória
  • ESP_ERR_ESPNOW_NOT_FOUND: a társ nem található
  • ESP_ERR_ESPNOW_IF: a jelenlegi WiFi interfész nem egyezik a társaival

Paraméterek:

  • peer_addr: társ MAC -cím
  • adatok: küldendő adatok
  • len: az adatok hossza

Leírás:

ESPNOW adatok küldése. Bizonyos esetekben ez történik:

  • Ha a peer_addr nem NULL, küldjön adatokat annak a társnak, amelynek MAC -címe megegyezik a peer_addr
  • Ha a peer_addr NULL, küldjön adatokat a társlistához hozzáadott összes társnak
  • Az adatok maximális hossza kisebb lehet, mint ESP_NOW_MAX_DATA_LEN
  • Az adat argumentum által mutatott puffernek nem kell érvényesnek lennie az esp_now_send visszatérése után

esp_now_register_recv_cb (cb)

Visszatérések:

  • ESP_OK: sikeres
  • ESP_ERR_ESPNOW_NOT_INIT: Az ESPNOW nincs inicializálva
  • ESP_ERR_ESPNOW_INTERNAL: belső hiba

Paraméterek:

  • cb: visszahívási funkció ESPNOW adatok fogadására
    • void cb (const uint8_t *mac_addr, const uint8_t *data, int data_len)

      • mac_addr:

        a vevő mac címe

      • *adat:

        adatok fogadása

      • data_len

        adat bájt hossza

Leírás:

Az ESPNOW adatok fogadása után hívja fel a cb függvényt

4. lépés: ESP-NOW FUNKCIÓK (ESP8266)

FUNKCIÓK LEÍRÁSA ESP32 ESP8266

int esp_now_init (érvénytelen)

Visszatérések:

  • 1 = siker
  • 0 = nem

Leírás

Inicializálja az ESPNOW funkciót

int esp_now_set_self_role (u8 szerep)

Paraméterek:

  • ESP_NOW_ROLE_IDLE: adatátvitel nem engedélyezett.
  • ESP_NOW_ROLE_CONTROLLER: elsőbbséget élvez a Sation interfész
  • ESP_NOW_ROLE_SLAVE: elsőbbséget élvez a SoftAP interfész
  • ESP_NOW_ROLE_COMBO: a SoftAPinterface elsőbbséget élvez

Leírás

Beállítja az eszköz szerepét

int esp_now_register_send_cb (cb)

Visszatérések:

  • 1 = siker
  • 0 = nem

Paraméterek:

  • cb: visszahívási funkció neve ESPNOW adatok elküldése után a következő paraméterekkel:

    • void cb (const uint8_t *mac_addr, esp_now_send_status_t állapot)

      • mac_addr: a vevő mac címe
      • állapot:

        • 1 = siker
        • 0 = nem

Leírás

Hívja meg az OnDataSent függvényt az ESPNOW adatok elküldése után

int esp_now_add_peer (u8 *mac_addr, u8 szerep, u8 csatorna, u8 *kulcs, u8 kulcs_len)

Visszatérések:

  • 1 = siker
  • 0 = nem

Paraméterek:

  • mac_addr

    társa mac címe

  • szerep
  • csatorna

    Ha az érték 0, akkor használja az aktuális csatornát, amelyik állomás vagy softap be van kapcsolva. Ellenkező esetben azt a csatornát kell beállítani, amelyen az állomás vagy a hangszóró be van kapcsolva

  • *kulcs

    kulcs a titkosításhoz

  • kulcs_lencse

    kulcs hossza

Leírás:

Peer hozzáadása a peer listához

int esp_now_send (const uint8_t *peer_addr, const uint8_t *adatok, size_t len)

Visszatérések:

  • 1 = siker
  • 0 = Nem

Paraméterek:

  • peer_addr: társ MAC -cím
  • adatok: küldendő adatok
  • len: az adatok hossza

Leírás:

ESPNOW adatok küldése. Bizonyos esetekben ez történik:

  • Ha a peer_addr nem NULL, küldjön adatokat annak a társnak, amelynek MAC -címe megegyezik a peer_addr
  • Ha a peer_addr NULL, küldjön adatokat a társlistához hozzáadott összes társnak
  • Az adatok maximális hossza kisebb lehet, mint ESP_NOW_MAX_DATA_LEN
  • Az adat argumentum által mutatott puffernek nem kell érvényesnek lennie az esp_now_send visszatérése után

int esp_now_register_recv_cb (cb)

Visszatérések:

  • 1 = siker
  • 0 = Nem

Paraméterek:

  • cb: visszahívási funkció ESPNOW adatok fogadására
    • void cb (const uint8_t *mac_addr, const uint8_t *data, int data_len)

      • mac_addr:

        a vevő mac címe

      • *adat:

        adatok fogadása

      • data_len

        adat bájt hossza

Leírás:

Az ESPNOW adatok fogadása után hívja fel a cb függvényt

5. lépés: Egyirányú kommunikáció (ESP32 küldőként)

Az ESP32 adatokat küld az ESP8266 készülékre. ezzel a kóddal. Változtassa meg a broadcastAddress címet a megfelelő vevő Mac -címére. Az enyém A4: CF: 12: C7: 9C: 77 volt

// Szükséges könyvtárak hozzáadása

#include // Az esp most funkciók eléréséhez #include // Wifi képességek hozzáadása az ESP32 -hez // a MAC -cím mentése a broadcastAddress nevű tömbbe; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // A vevőm MAC -címe/*határozza meg a több változó adattípusait, amelyek mindegyike strukturált és átnevezett szerkezet_üzenet*/typedef szerkezet struktúra_üzenet {char a [32]; int b; úszó c; D karakterlánc; bool e; } structure_message; // Hozzon létre egy struktúr_üzenetet, amelyet myData -nak hívnak. // függvény, amelyet az adatok küldésekor hívnak meg, hogy kinyomtassa állapotát void OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t állapot) {Serial.print ("\ r / nLate Packet Send Status: / t"); Serial.println (állapot == ESP_NOW_SEND_SUCCESS? "Szállítási siker": "Kézbesítési hiba"); } void setup () {// Adja meg az átviteli sebességet az ESP Serial.begin (115200) soros kommunikációjához; // Az eszköz beállítása Wi-Fi állomásnak WiFi.mode (WIFI_STA); // Indítja a wifit // Init ESP-NOW és visszaadja állapotát, ha (esp_now_init ()! = ESP_OK) {Serial.println ("Hiba az ESP inicializálásakor -MOST"); Visszatérés; } // hívja meg az OnDataSent függvényt az ESPNOW adatok elküldése után esp_now_register_send_cb (OnDataSent); // peer regisztrálása esp_now_peer_info_t peerInfo; // inicializálja és hozzárendeli a társadatokat mutatóként egy memrescímhez (peerInfo.peer_addr, broadcastAddress, 6); // másolja a broadcastAddress értékét 6 bájttal a peerInfo.peer_addr peerInfo.channel = 0; // csatorna, amelyen az esp beszél. A 0 azt jelenti, hogy nem definiált, és adatokat küld az aktuális csatornán. 1-14 érvényes csatorna, amely megegyezik a helyi eszközzel peerInfo.encrypt = false; // nincs titkosítva // Add hozzá az eszközt a párosított eszközök listájához, ha (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Nem sikerült hozzáadni a társat"); Visszatérés; }} void loop () {// Állítsa be az értékeket az strcpy küldéséhez (myData.a, "THIS IS A CHAR"); // a "THIS IS A CHAR" mentése a myData által korábban meghatározott "data" változójába. b = random (1, 20); // véletlenszerű érték mentése myData.c = 1.2; // float mentése myData.d = "Hello"; // karakterlánc mentése myData.e = false; // bool mentése // 250 bájtnál kisebb vagy egyenlő adatok küldése az ESP-NOW segítségével, és visszaadja állapotát esp_err_t result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (eredmény == ESP_OK) {Serial.println ("Sikeresen elküldve"); } else {Serial.println ("Hiba az adatok küldésekor"); } késleltetés (2000); }

Az ESP8266 ezt a kódot használva fogad adatokat az ESP32 -től.

// Szükséges könyvtárak hozzáadása

#include // Wifi képességek hozzáadása az ESP32 -hez #include // Az esp now függvények eléréséhez /*határozza meg a több változó adattípusait, amelyek mindegyike strukturált és átnevezett szerkezet_üzenet* /typedef strukturál_üzenet {char a [32]; int b; úszó c; D karakterlánc; bool e; } structure_message; // Hozzon létre egy változót a struk_message nevű myData -nak. Struk_message myData; // függvény, amelyet az adatok fogadásakor hívnak meg, és érvénytelenül nyomtatja ki OnDataRecv (uint8_t * mac, uint8_t * bejövő adatok, uint8_t len) {memcpy (& saját adatok, bejövő adatok, sizeof (saját adatok)); Serial.print ("Bájtok fogadva:"); Soros.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); Sorozat.println (); } void setup () {// Adja meg az átviteli sebességet az ESP Serial.begin (115200) soros kommunikációjához; // Az eszköz beállítása Wi-Fi állomásnak WiFi.mode (WIFI_STA); // Elindítja a wifit // Init ESP-NOW, és visszaadja állapotát, ha (esp_now_init ()! = 0) {Serial.println ("Hiba az ESP-NOW inicializálásakor"); Visszatérés; } esp_now_set_self_role (ESP_NOW_ROLE_SLAVE); // Meghatározza ennek az esp szerepét esp_now_register_recv_cb (OnDataRecv); // hívja meg az OnDataRecv függvényt az ESPNOW adatok fogadása után} void loop () {}

6. lépés: Egyirányú kommunikáció (ESP8266 küldőként)

Az ESP8266 adatokat küld egy ESP32 -nek. ezzel a kóddal. Változtassa meg a broadcastAddress címet a megfelelő vevő Mac -címére. Az esp32 címem 30: AE: A4: F5: 03: A4. Az esp8266 egyéb funkcióihoz látogasson el ide

// Szükséges könyvtárak hozzáadása

#include // Wifi képességek hozzáadása az ESP32 -hez #include // Az esp now funkciók eléréséhez // mentse a MAC -címet egy broadcastAddress nevű tömbbe; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*definiálja a több változó adattípusait, amelyek mindegyike strukturált és átnevezett szerkezet_üzenet*/ typedef strukturál_üzenet {char a [32]; int b; úszó c; D karakterlánc; bool e; } structure_message; // Hozzon létre egy strukturált változót, amelyet myData -nak hívnak. // függvény, amelyet az adatok küldésekor hívnak meg, és kinyomtatja állapotát void OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nLate Packet Send Status: / t"); Serial.println (sendStatus == 1? "Delivery Success": "Delivery Fail"); } void setup () {// Adja meg az adatátviteli sebességet az ESP Serial.begin (115200) soros kommunikációjához; // Az eszköz beállítása Wi-Fi állomásnak WiFi.mode (WIFI_STA); // Indítja a wifit // Init ESP-NOW és visszaadja állapotát, ha (esp_now_init ()) {Serial.println ("Hiba az ESP-NOW inicializálásakor"); Visszatérés; } esp_now_register_send_cb (OnDataSent); // hívja meg az OnDataSent függvényt az ESPNOW adatok elküldése után // Adja hozzá az eszközt a párosított eszközök listájához, ha (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)) {Serial.println ("Nem sikerült hozzáadni a társat"); Visszatérés; }} void loop () {// Állítsa be az értékeket az strcpy küldéséhez (myData.a, "THIS IS A CHAR"); // a "THIS IS CHAR" mentése a myData által korábban meghatározott "data" változójába. b = random (1, 20); // véletlenszerű érték mentése myData.c = 1.2; // úszó mentése myData.d = "SP8266"; // karakterlánc mentése myData.e = false; // bool mentése // 250 bájtnál kisebb vagy egyenlő adatok küldése az ESP-NOW segítségével, és visszaadja állapotát int result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (esp_now_init ()! = 0) {Serial.println ("Sikeresen elküldve"); } else {Serial.println ("Hiba az adatok küldésekor"); } késleltetés (2000); }

Az ESP32 adatokat fogad egy ESP8266 készülékről. ezzel a kóddal. A többi funkcióról itt olvashat

// Szükséges könyvtárak hozzáadása

#include // Az esp most funkciók eléréséhez #include // Wifi képességek hozzáadása az ESP32 -n /*határozza meg a több változó adattípusait, amelyek mindegyike strukturált és átnevezett szerkezet_üzenet* /typedef struktúra_üzenet {char a [32]; int b; úszó c; D karakterlánc; bool e; } structure_message; // Hozzon létre egy változót a struk_message nevű myData -nak. Struk_message myData; // függvény, amelyet az adatok fogadásakor hívnak meg, és érvénytelenül kinyomtatja OnDataRecv (const uint8_t * mac, const uint8_t * bejövő adatok, int len) {memcpy (& saját adatok, bejövő adatok, sizeof (saját adatok)); Serial.print ("Bájtok fogadva:"); 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); Sorozat.println (); } void setup () {// Adja meg az átviteli sebességet az ESP Serial.begin (115200) soros kommunikációjához; // Az eszköz beállítása Wi-Fi állomásnak WiFi.mode (WIFI_STA); // Elindítja a wifit // Init ESP-NOW, és visszaadja állapotát, ha (esp_now_init ()! = 0) {Serial.println ("Hiba az ESP-NOW inicializálásakor"); Visszatérés; } esp_now_register_recv_cb (OnDataRecv); // hívja meg az OnDataRecv függvényt az ESPNOW adatok fogadása után} void loop () {}

7. lépés: KETTŐS KOMMUNIKÁCIÓ

KETTŐS KOMMUNIKÁCIÓ
KETTŐS KOMMUNIKÁCIÓ
KETTŐS KOMMUNIKÁCIÓ
KETTŐS KOMMUNIKÁCIÓ

Az ESP32 indításkor adatokat küld az ESP8266 készüléknek. Az ESP8266 kinyomtatja a fogadott üzenetet, majd válaszol, amelyre az ESP32 nyomtat a soros monitoron.

ESP32 KÓD

// Szükséges könyvtárak hozzáadása

#include // Az esp most funkciók eléréséhez #include // Wifi képességek hozzáadása az ESP32 -hez // a MAC -cím mentése a broadcastAddress nevű tömbbe; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // A vevőm MAC -címe/*határozza meg a több változó adattípusait, amelyek mindegyike strukturált és átnevezett szerkezet_üzenet*/typedef szerkezet struktúra_üzenet {char a [32]; int b; úszó c; D karakterlánc; bool e; } structure_message; // Hozzon létre struktúraüzenetet myData néven struktúr_üzenet myData; // függvény, amelyet az adatok elküldésekor hívnak meg, hogy kiírja állapotukat void OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t állapot) {Serial.print ("\ r / nLate Packet Send Status: / t"); Serial.println (állapot == ESP_NOW_SEND_SUCCESS? "Szállítási siker": "Kézbesítési hiba"); if (állapot! = ESP_NOW_SEND_SUCCESS) {send_data ();}} void OnDataRecv (const uint8_t * mac, const uint8_t * bejövő adatok, int len) {memcpy (& myData, bejövő adatok, sizeof (myData)); Serial.print ("Bájtok fogadva:"); Soros.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); Sorozat.println (); } void setup () {// Adja meg az átviteli sebességet az ESP Serial.begin (115200) soros kommunikációjához; // Az eszköz beállítása Wi-Fi állomásnak WiFi.mode (WIFI_STA); // Indítja a wifit // Init ESP-NOW és visszaadja állapotát, ha (esp_now_init ()! = ESP_OK) {Serial.println ("Hiba az ESP inicializálásakor -MOST"); Visszatérés; } // hívja meg az OnDataSent függvényt az ESPNOW adatok elküldése után esp_now_register_send_cb (OnDataSent); // peer regisztrálása esp_now_peer_info_t peerInfo; // inicializálja és hozzárendeli a társadatokat mutatóként egy memrescímhez (peerInfo.peer_addr, broadcastAddress, 6); // másolja a broadcastAddress értékét 6 bájttal a peerInfo.peer_addr peerInfo.channel = 0; // csatorna, amelyen az esp beszél. A 0 azt jelenti, hogy nem definiált, és adatokat küld az aktuális csatornán.1-14 érvényes csatorna, amely megegyezik a helyi eszközzel peerInfo.encrypt = false; // nincs titkosítva // Add hozzá az eszközt a párosított eszközök listájához, ha (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Nem sikerült hozzáadni a társat"); Visszatérés; } esp_now_register_recv_cb (OnDataRecv); // hívja meg az OnDataRecv függvényt az ESPNOW adatok fogadása után send_data (); } void loop () {} void send_data () {Serial.println ("Küldés"); // Állítsa be az értékeket az strcpy küldéséhez (myData.a, "THIS IS A CHAR"); // a "THIS IS CHAR" mentése a myData által korábban meghatározott "data" változójába. b = random (1, 20); // véletlenszerű érték mentése myData.c = 1.2; // úszó mentése myData.d = "ESP32"; // karakterlánc mentése myData.e = false; // bool mentése // 250 bájtnál kisebb vagy egyenlő adatok küldése az ESP-NOW segítségével, és visszaadja állapotát esp_err_t result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (eredmény == ESP_OK) {Serial.println ("Sikeresen elküldve");} else {Serial.println ("Hiba az adatok küldésekor"); }}

ESP8266 KÓD

// Szükséges könyvtárak hozzáadása

#include // Wifi képességek hozzáadása az ESP32 -hez #include // Az esp now funkciók eléréséhez // mentse a MAC -címet egy broadcastAddress nevű tömbbe; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*definiálja a több változó adattípusait, amelyek mindegyike strukturált és átnevezett szerkezet_üzenet*/ typedef strukturál_üzenet {char a [32]; int b; úszó c; D karakterlánc; bool e; } structure_message; // Hozzon létre egy változót a struk_message nevű myData -nak. Struk_message myData; // függvény, amelyet az adatok fogadásakor hívnak meg, és érvénytelenül nyomtatja ki OnDataRecv (uint8_t * mac, uint8_t * bejövő adatok, uint8_t len) {memcpy (& saját adatok, bejövő adatok, sizeof (saját adatok)); Serial.print ("Bájtok fogadva:"); Soros.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); Sorozat.println (); send_data (); } void OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nLate Packet Send Status: / t"); Serial.println (sendStatus == 1? "Delivery Success": "Delivery Fail"); if (sendStatus! = 1) {send_data (); }} void send_data () {// Állítsa be az értékeket a strcpy küldéséhez (myData.a, "THIS IS A CHAR"); // a "THIS IS CHAR" mentése a myData által korábban meghatározott "data" változójába. b = random (1, 20); // véletlenszerű érték mentése myData.c = 1.2; // úszó mentése myData.d = "ESP8266"; // karakterlánc mentése myData.e = false; // mentés egy bool esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); } void setup () {// Adja meg az átviteli sebességet az ESP Serial.begin (115200) soros kommunikációjához; // Az eszköz beállítása Wi-Fi állomásnak WiFi.mode (WIFI_STA); // Elindítja a wifit // Init ESP-NOW, és visszaadja állapotát, ha (esp_now_init ()! = 0) {Serial.println ("Hiba az ESP-NOW inicializálásakor"); Visszatérés; } if (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0)) {Serial.println ("Nem sikerült a társ hozzáadása"); Visszatérés; } esp_now_set_self_role (ESP_NOW_ROLE_COMBO); esp_now_register_send_cb (OnDataSent); esp_now_set_self_role (ESP_NOW_ROLE_COMBO); // Meghatározza ennek az esp szerepét esp_now_register_recv_cb (OnDataRecv); // hívja meg az OnDataRecv függvényt az ESPNOW adatok fogadása után} void loop () {}

8. lépés: IRODALOM

ESPNOW_32_Példa

ESPNOW_8266 Példa

WIFI.h

ESP8266WiFi.h

esp_now.h ESP8266 esetén

esp_now.h ESP32 esetén

esp_now hivatalos dokumentum (A funkciók jobb magyarázata)

ESP-NOW hivatalos útmutató

Ajánlott: