Tartalomjegyzék:
- Kellékek
- 1. lépés: Szerezze be a Board Mac -címét
- 2. lépés: Az ESP-NOW működésének elősegítése
- 3. lépés: ESP-NOW FUNKCIÓK (ESP32)
- 4. lépés: ESP-NOW FUNKCIÓK (ESP8266)
- 5. lépés: Egyirányú kommunikáció (ESP32 küldőként)
- 6. lépés: Egyirányú kommunikáció (ESP8266 küldőként)
- 7. lépés: KETTŐS KOMMUNIKÁCIÓ
- 8. lépés: IRODALOM
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
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:40
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
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:
- Tartalmazza az esp most és a wifi könyvtárakat
- Mentse a címzett ESP mac -címét
- Határozza meg a küldött/fogadott üzenet adatszerkezetét
- A beállításnál állítsa a wifit állomás üzemmódba
- Inicializálja az esp_now parancsot
- az adatok küldése és fogadása után hívott visszahívási funkció létrehozása és regisztrálása
- Az Esp8266 esetében határozza meg a szerepét
- regisztrálja a társat vagy a címzettet, pl
- 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Ó
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:
Hívások kezdeményezése az Arduino segítségével - CoolPhone 1/2: 5 lépés
Hívások kezdeményezése az Arduino segítségével - CoolPhone 1/2: Nokia n97 - Valószínűleg ez volt az első mobiltelefonom. Zenehallgatásra és néha képek készítésére használtam, de leginkább hívásokhoz. Úgy döntöttem, hogy saját telefont készítek, amelyet csak hívások kezdeményezésére és fogadására használnak. Interaktív lesz
Több saláta termesztése kevesebb helyen, vagy Saláta termesztése az űrben, (több vagy kevesebb): 10 lépés
Több saláta termesztése kevesebb helyen, vagy … Saláta termesztése az űrben, (több vagy kevesebb) .: Ez egy professzionális benyújtás a Growing Beyond Earth, Maker Contest pályázathoz, amelyet az Instructables -en keresztül nyújtottak be. Nem izgathatnám jobban, hogy űrnövénytermesztésre tervezek, és közzéteszem az első Instructable -t. Kezdésként a verseny arra kért minket, hogy
Több mint 4 motor használata - Több motorpajzs egymásra rakása: 3 lépés
Több mint 4 motor használata - Több motorpajzs egymásra rakása: Utasítható vibrotactile szenzoros helyettesítő és növelő eszköz (https: //www.instructables.com/id/Vibrotactile-Sens …) bemutatja az érzékelést lefordító eszköz felépítésének módját bemenet a vibrációs ingerekbe. Ezek a vibrációs ingerek
Beszélgetés a Pick és mesterséges intelligencia csevegéssel a Cleverbot használatával: 14 lépés (képekkel)
Beszélgess a Pick -lel és a mesterséges intelligencia -csevegéssel a Cleverbot használatával: Itt nemcsak hangutasítással próbálkozom, hanem mesterséges intelligencia -csevegéssel is a számítógéppel a Cleverbot használatával. Valójában az ötlet akkor jött, amikor talált gyerekek keverik a színeket a színező dobozban, amikor egy színről a legközelebbi színre vesznek színt. De végre végre
Ingyenes telefonhívások kezdeményezése a Skype használatával: 4 lépés
Ingyenes telefonhívások kezdeményezése a Skype használatával: Nem tudom, miért teszem közzé ezt, kivéve azt a tényt, hogy emlékszem a tárcsázó régi szép időire és másokra a 2000 -es évek elején bekövetkezett technológiai összeomlás előtt. Korábban a világ legmenőbb dolga volt ingyenes távolsági hívásokat kezdeményezni bármelyik társulattól