Πίνακας περιεχομένων:
- Προμήθειες
- Βήμα 1: Λάβετε τη διεύθυνση Mac του πίνακα
- Βήμα 2: Πώς να κάνετε το ESP-NOW να λειτουργεί
- Βήμα 3: ΛΕΙΤΟΥΡΓΙΕΣ ESP-NOW (ESP32)
- Βήμα 4: ΛΕΙΤΟΥΡΓΙΕΣ ESP-NOW (ESP8266)
- Βήμα 5: Επικοινωνία μονόδρομου (ESP32 ως αποστολέας)
- Βήμα 6: Επικοινωνία μονόδρομου (ESP8266 ως αποστολέας)
- Βήμα 7: ΕΠΙΚΟΙΝΩΝΙΑ ΔΥΟ ΤΡΟΠΩΝ
- Βήμα 8: ΑΝΑΦΟΡΕΣ
Βίντεο: Πώς να κάνετε πολλαπλή ομιλία ESP μέσω ESP-NOW χρησιμοποιώντας ESP32 και ESP8266: 8 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:33
Στο τρέχον έργο μου, χρειάζομαι πολλαπλά ESP για να μιλήσω μεταξύ τους χωρίς δρομολογητή. Για να γίνει αυτό, θα χρησιμοποιήσω το ESP-NOW για να κάνω ασύρματη επικοινωνία μεταξύ τους χωρίς δρομολογητή στο ESP.
Προμήθειες
Πράγματα που χρησιμοποίησα:
Ενότητα ESP32 DEV
NODEMCU 1.0 (μονάδα ESP12E)
Βήμα 1: Λάβετε τη διεύθυνση Mac του πίνακα
Μέσω του ESP-now, οι συσκευές ESP μιλούν μεταξύ τους στέλνοντας δεδομένα στη μοναδική τους διεύθυνση ενώ είναι συνδεδεμένες σε ένα εσωτερικό δίκτυο σημείων πρόσβασης, το οποίο έχει δημιουργηθεί με την εκκίνηση του esp τώρα. Το Έτσι, καθορίστε τη διεύθυνση MAC κάθε συσκευής. Επισυνάπτεται το ESP32 και το ESP8266 Board Settings
ΓΙΑ ESP32
#include "WiFi.h" // Για πρόσβαση στις δυνατότητες ESP32 WIFI
void setup () {Serial.begin (115200); Serial.print ("ESP32 Board MAC Address:"); Serial.println (WiFi.macAddress ()); // εκτυπώνει τη διεύθυνση MAC} void loop () {}
ΓΙΑ ESP8266
#include // Βιβλιοθήκη που χρησιμοποιείται για πρόσβαση στις δυνατότητες ESP8266 WIFI
void setup () {Serial.begin (115200); Serial.println (); Serial.print ("ESP8266 Board MAC Address:"); 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
- Αποθηκεύστε τη διεύθυνση mac του παραλήπτη ESP
- Ορίστε τη δομή δεδομένων του μηνύματος αποστολής/λήψης
- Κατά τη ρύθμιση, ρυθμίστε το wifi σε λειτουργία σταθμού
- Αρχικοποίηση esp_now
- πραγματοποιήστε και καταχωρίστε τη λειτουργία επανάκλησης που καλείται μετά την αποστολή και λήψη δεδομένων
- Για το Esp8266, καθορίστε το ρόλο του
- καταχωρίστε τον ομότιμο ή τον παραλήπτη esp
- Αποστολή δεδομένων
Βήμα 3: ΛΕΙΤΟΥΡΓΙΕΣ ESP-NOW (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 με αυτές τις παραμέτρους:
-
void cb (const uint8_t *mac_addr, esp_now_send_status_t status)
- mac_addr: διεύθυνση mac του δέκτη
-
κατάσταση:
- 1 = επιτυχία
- 0 = αποτυχία
-
Περιγραφή:
Καλέστε τη συνάρτηση OnDataSent μετά την αποστολή δεδομένων ESPNOW
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: υπάρχει ομότιμος
Παράμετροι:
-
ομότιμος: πληροφορίες ομότιμων με τα ακόλουθα δεδομένα:
-
uint8_t
peer_addr [ESP_NOW_ETH_ALEN]; ESPNOW ομότιμη διεύθυνση MAC που είναι επίσης η διεύθυνση MAC του σταθμού ή του λογισμικού
-
uint8_t lmk [ESP_NOW_KEY_LEN]
ESPNOW ομότιμο τοπικό κύριο κλειδί που χρησιμοποιείται για την κρυπτογράφηση δεδομένων
-
κανάλι uint8_t
Κανάλι Wi-Fi που χρησιμοποιεί ομότιμος για την αποστολή/λήψη δεδομένων ESPNOW. Εάν η τιμή είναι 0, χρησιμοποιήστε το τρέχον κανάλι στο οποίο βρίσκεται ο σταθμός ή το softap. Διαφορετικά, πρέπει να οριστεί ως το κανάλι στο οποίο είναι ενεργοποιημένος ο σταθμός ή το softap
-
wifi_interface_t ifidx
Διασύνδεση Wi-Fi που χρησιμοποιεί ομότιμος για την αποστολή/λήψη δεδομένων ESPNOW
-
κρυπτογράφηση bool
Τα δεδομένα ESPNOW που στέλνει/λαμβάνει αυτός ο ομότιμος είναι κρυπτογραφημένα ή όχι
-
άκυρο *ιδιωτικό
ESPNOW ιδιωτικά δεδομένα ομότιμων
-
Περιγραφή:
Προσθέστε μια ομότιμη στη λίστα ομότιμων
esp_now_send (const uint8_t *peer_addr, const uint8_t *data, 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
- Το buffer που επισημαίνεται από το όρισμα δεδομένων δεν χρειάζεται να είναι έγκυρο μετά την επιστροφή του esp_now_send
esp_now_register_recv_cb (cb)
Επιστροφές:
- ESP_OK: πετύχετε
- ESP_ERR_ESPNOW_NOT_INIT: Το ESPNOW δεν έχει αρχικοποιηθεί
- ESP_ERR_ESPNOW_INTERNAL: εσωτερικό σφάλμα
Παράμετροι:
-
cb: λειτουργία επανάκλησης για λήψη δεδομένων ESPNOW
-
void cb (const uint8_t *mac_addr, const uint8_t *data, int data_len)
-
mac_addr:
διεύθυνση mac του δέκτη
-
*δεδομένα:
λήψη δεδομένων
-
data_len
μήκος byte δεδομένων
-
-
Περιγραφή:
Καλέστε τη συνάρτηση cb μετά τη λήψη δεδομένων ESPNOW
Βήμα 4: ΛΕΙΤΟΥΡΓΙΕΣ ESP-NOW (ESP8266)
ΛΕΙΤΟΥΡΓΙΕΣ ΠΕΡΙΓΡΑΦΗ 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 με αυτές τις παραμέτρους:
-
void cb (const uint8_t *mac_addr, esp_now_send_status_t status)
- mac_addr: διεύθυνση mac του δέκτη
-
κατάσταση:
- 1 = επιτυχία
- 0 = αποτυχία
-
Περιγραφή
Καλέστε τη συνάρτηση OnDataSent μετά την αποστολή δεδομένων ESPNOW
int esp_now_add_peer (u8 *mac_addr, ρόλος u8, κανάλι u8, πλήκτρο u8 *, u8 key_len)
Επιστροφές:
- 1 = επιτυχία
- 0 = αποτυχία
Παράμετροι:
-
mac_addr
mac διεύθυνση ομότιμου
- ρόλος
-
Κανάλι
Εάν η τιμή είναι 0, χρησιμοποιήστε το τρέχον κανάλι στο οποίο είναι ενεργοποιημένος ο σταθμός ή το softap. Διαφορετικά, πρέπει να οριστεί ως το κανάλι στο οποίο είναι ενεργοποιημένος ο σταθμός ή το softap
-
*κλειδί
κλειδί για κρυπτογράφηση
-
key_len
μήκος κλειδιού
Περιγραφή:
Προσθέστε μια ομότιμη στη λίστα ομότιμων
int esp_now_send (const uint8_t *peer_addr, const uint8_t *data, size_t len)
Επιστροφές:
- 1 = Επιτυχία
- 0 = Αποτυχία
Παράμετροι:
- peer_addr: διεύθυνση MAC ομότιμων
- δεδομένα: δεδομένα προς αποστολή
- len: μήκος δεδομένων
Περιγραφή:
Αποστολή δεδομένων ESPNOW. Σε ορισμένες περιπτώσεις, αυτό συμβαίνει:
- Εάν το peer_addr δεν είναι NULL, στείλτε δεδομένα στον ομότιμο του οποίου η διεύθυνση MAC ταιριάζει με peer_addr
- Εάν το peer_addr είναι NULL, στείλτε δεδομένα σε όλους τους ομότιμους που προστίθενται στη λίστα ομότιμων
- Το μέγιστο μήκος δεδομένων πρέπει να είναι μικρότερο από ESP_NOW_MAX_DATA_LEN
- Το buffer που επισημαίνεται από το όρισμα δεδομένων δεν χρειάζεται να είναι έγκυρο μετά την επιστροφή του esp_now_send
int esp_now_register_recv_cb (cb)
Επιστροφές:
- 1 = Επιτυχία
- 0 = Αποτυχία
Παράμετροι:
-
cb: λειτουργία επανάκλησης για λήψη δεδομένων ESPNOW
-
void cb (const uint8_t *mac_addr, const uint8_t *data, int data_len)
-
mac_addr:
διεύθυνση mac του δέκτη
-
*δεδομένα:
λήψη δεδομένων
-
data_len
μήκος byte δεδομένων
-
-
Περιγραφή:
Καλέστε τη συνάρτηση cb μετά τη λήψη δεδομένων ESPNOW
Βήμα 5: Επικοινωνία μονόδρομου (ESP32 ως αποστολέας)
Το ESP32 στέλνει δεδομένα σε ένα ESP8266. με αυτόν τον κωδικό. Αλλάξτε το broadcastAddress στη διεύθυνση mac του αντίστοιχου δέκτη. Το δικό μου ήταν A4: CF: 12: C7: 9C: 77
// Προσθέστε τις απαραίτητες βιβλιοθήκες
#include // Για να αποκτήσετε πρόσβαση στο esp τώρα λειτουργεί #include // Για να προσθέσετε δυνατότητες Wifi στο ESP32 // αποθηκεύστε τη διεύθυνση MAC σε έναν πίνακα που ονομάζεται broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // Η διεύθυνση MAC του δέκτη μου/*ορίζει τους τύπους δεδομένων των πολλαπλών μεταβλητών που έχουν δομηθεί και μετονομάστηκαν σε δομή και μηνύματα σε σχήμα int β? float c? Συμβολοσειρά d; bool e? } struct_message; // Δημιουργήστε ένα struct_message που ονομάζεται myData struct_message myData; // συνάρτηση που καλείται όταν τα δεδομένα αποστέλλονται για εκτύπωση της κατάστασής τους άκυρο OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t status) {Serial.print ("\ r / nΤελευταία κατάσταση αποστολής πακέτου: / t"); Serial.println (κατάσταση == ESP_NOW_SEND_SUCCESS; "Επιτυχία παράδοσης": "Αποτυχία παράδοσης"); } void setup () {// Ορίστε το ρυθμό baud για σειριακή επικοινωνία με ESP Serial.begin (115200); // Ορισμός συσκευής ως Wi-Fi Station WiFi.mode (WIFI_STA); // Ξεκινά το wifi // Init ESP-NOW και επιστρέφει την κατάστασή του εάν (esp_now_init ()! = ESP_OK) {Serial.println ("Σφάλμα αρχικοποίησης ESP -ΤΩΡΑ"); ΕΠΙΣΤΡΟΦΗ; } // καλέστε τη συνάρτηση OnDataSent μετά την αποστολή δεδομένων ESPNOW esp_now_register_send_cb (OnDataSent); // Εγγραφή peer esp_now_peer_info_t peerInfo; // αρχικοποίηση και εκχώρηση των πληροφοριών ομότιμων ως δείκτη σε μια διεύθυνση αποστολής (peerInfo.peer_addr, broadcastAddress, 6). // αντιγράψτε την τιμή του broadcastAddress με 6 byte στο 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" σε μεταβλητή a των "δεδομένων" μου που ορίστηκαν νωρίτερα myData.b = τυχαία (1, 20); // αποθηκεύστε μια τυχαία τιμή myData.c = 1,2; // αποθήκευση float myData.d = "Γεια"; // αποθηκεύστε μια συμβολοσειρά myData.e = false; // αποθήκευση bool // Αποστολή δεδομένων μικρότερο ή ίσο με 250 byte μέσω ESP-NOW και επιστρέφει την κατάστασή του esp_err_t result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (αποτέλεσμα == ESP_OK) {Serial.println ("Στάλθηκε με επιτυχία"); } else {Serial.println ("Σφάλμα αποστολής δεδομένων"); } καθυστέρηση (2000). }
Το ESP8266 λαμβάνει δεδομένα από το ESP32 χρησιμοποιώντας αυτόν τον κωδικό.
// Προσθέστε τις απαραίτητες βιβλιοθήκες
#include // Για να προσθέσετε δυνατότητες Wifi στο ESP32 #include // Για να αποκτήσετε πρόσβαση στο esp, οι συναρτήσεις /*ορίστε τους τύπους δεδομένων των πολλαπλών μεταβλητών δομημένων και μετονομασμένων όλων αυτών σε struct_message* /typedef struct struct_message {char a [32]; int β? float c? Συμβολοσειρά d; bool e? } struct_message; // Δημιουργήστε μια μεταβλητή struct_message που ονομάζεται myData struct_message myData; // συνάρτηση που καλείται όταν λαμβάνονται τα δεδομένα και τα εκτυπώνει άκυρα OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Ελήφθησαν τα Bytes:"); 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 () {// Ορίστε το ρυθμό baud για σειριακή επικοινωνία με ESP Serial.begin (115200); // Ορισμός συσκευής ως Wi-Fi Station WiFi.mode (WIFI_STA). // Ξεκινά το wifi // Init 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). // καλέστε τη συνάρτηση OnDataRecv μετά τη λήψη δεδομένων ESPNOW} void loop () {}
Βήμα 6: Επικοινωνία μονόδρομου (ESP8266 ως αποστολέας)
Το ESP8266 στέλνει δεδομένα σε ένα ESP32. με αυτόν τον κωδικό. Αλλάξτε το broadcastAddress στη διεύθυνση mac του αντίστοιχου δέκτη. Η διεύθυνση esp32 μου είναι 30: AE: A4: F5: 03: A4. Για άλλες λειτουργίες για το esp8266, μεταβείτε εδώ
// Προσθέστε τις απαραίτητες βιβλιοθήκες
#include // Για να προσθέσετε δυνατότητες Wifi στο ESP32 #include // Για να αποκτήσετε πρόσβαση στις λειτουργίες esp now // αποθηκεύστε τη διεύθυνση MAC σε έναν πίνακα που ονομάζεται broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*ορίστε τους τύπους δεδομένων των πολλαπλών μεταβλητών δομημένων και μετονομασμένων όλων αυτών σε struct_message*/ typedef struct struct_message {char a [32]; int β? float 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 () {// Ορίστε το ρυθμό baud για σειριακή επικοινωνία με ESP Serial.begin (115200); // Ορισμός συσκευής ως Wi-Fi Station WiFi.mode (WIFI_STA); // Ξεκινά το wifi // Init ESP-NOW και επιστρέφει την κατάστασή του εάν (esp_now_init ()) {Serial.println ("Σφάλμα αρχικοποίησης ESP-NOW"); ΕΠΙΣΤΡΟΦΗ; } esp_now_register_send_cb (OnDataSent); // κλήση της συνάρτησης OnDataSent μετά την αποστολή δεδομένων ESPNOW // Προσθήκη της συσκευής στη συζευγμένη λίστα συσκευών εάν (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)) {Serial.println ("Αποτυχία προσθήκης ομότιμης"); ΕΠΙΣΤΡΟΦΗ; }} void loop () {// Ορίστε τιμές για αποστολή strcpy (myData.a, "THIS IS A CHAR"); // αποθήκευση "THIS IS A CHAR" σε μεταβλητή a των "δεδομένων" μου που ορίστηκαν νωρίτερα myData.b = τυχαία (1, 20); // αποθηκεύστε μια τυχαία τιμή myData.c = 1,2; // αποθήκευση float myData.d = "SP8266"; // αποθηκεύστε μια συμβολοσειρά myData.e = false; // αποθήκευση bool // Αποστολή δεδομένων μικρότερο ή ίσο με 250 byte μέσω ESP-NOW και επιστρέφει την κατάσταση int αποτέλεσμα = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (esp_now_init ()! = 0) {Serial.println ("Στάλθηκε με επιτυχία"); } else {Serial.println ("Σφάλμα αποστολής δεδομένων"); } καθυστέρηση (2000). }
Το ESP32 λαμβάνει δεδομένα από ένα ESP8266. με αυτόν τον κωδικό. Για άλλες λειτουργίες ανατρέξτε εδώ
// Προσθέστε τις απαραίτητες βιβλιοθήκες
#include // Για να αποκτήσετε πρόσβαση στις λειτουργίες του esp τώρα #include // Για να προσθέσετε δυνατότητες Wifi στο ESP32 /*ορίστε τους τύπους δεδομένων των πολλαπλών μεταβλητών δομημένων και μετονομασμένων όλων αυτών σε struct_message* /typedef struct struct_message {char a [32]; int β? float c? Συμβολοσειρά d; bool e? } struct_message; // Δημιουργήστε μια μεταβλητή struct_message που ονομάζεται myData struct_message myData; // συνάρτηση που καλείται όταν λαμβάνονται τα δεδομένα και τα εκτυπώνει άκυρα OnDataRecv (const uint8_t * mac, const uint8_t * incomingData, int len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Ελήφθησαν τα Bytes:"); 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 () {// Ορίστε το ρυθμό baud για σειριακή επικοινωνία με ESP Serial.begin (115200); // Ορίστε τη συσκευή ως Wi-Fi Station WiFi.mode (WIFI_STA). // Ξεκινά το wifi // Init ESP-NOW και επιστρέφει την κατάστασή του εάν (esp_now_init ()! = 0) {Serial.println ("Σφάλμα αρχικοποίησης ESP-NOW"); ΕΠΙΣΤΡΟΦΗ; } esp_now_register_recv_cb (OnDataRecv); // καλέστε τη συνάρτηση OnDataRecv μετά τη λήψη δεδομένων ESPNOW} void loop () {}
Βήμα 7: ΕΠΙΚΟΙΝΩΝΙΑ ΔΥΟ ΤΡΟΠΩΝ
Το ESP32 στέλνει δεδομένα κατά την εκκίνηση στο ESP8266. Το ESP8266 εκτυπώνει το ληφθέν μήνυμα και στη συνέχεια απαντά στο οποίο το ESP32 εκτυπώνει στη σειριακή οθόνη του.
ESP32 ΚΩΔ
// Προσθέστε τις απαραίτητες βιβλιοθήκες
#include // Για να αποκτήσετε πρόσβαση στο esp τώρα λειτουργεί #include // Για να προσθέσετε δυνατότητες Wifi στο ESP32 // αποθηκεύστε τη διεύθυνση MAC σε έναν πίνακα που ονομάζεται broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // Η διεύθυνση MAC του δέκτη μου/*ορίζει τους τύπους δεδομένων των πολλαπλών μεταβλητών που έχουν δομηθεί και μετονομάστηκαν σε δομή και μηνύματα σε σχήμα int β? float c? Συμβολοσειρά d; bool e? } struct_message; // Δημιουργήστε ένα struct_message που ονομάζεται myData struct_message myData; // συνάρτηση που καλείται όταν τα δεδομένα αποστέλλονται για εκτύπωση της κατάστασής τους άκυρο OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t status) {Serial.print ("\ r / nΤελευταία κατάσταση αποστολής πακέτου: / t"); Serial.println (κατάσταση == ESP_NOW_SEND_SUCCESS; "Επιτυχία παράδοσης": "Αποτυχία παράδοσης"); if (κατάσταση! = ESP_NOW_SEND_SUCCESS) {send_data ();}} void OnDataRecv (const uint8_t * mac, const uint8_t * incomingData, int len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Ελήφθησαν τα Bytes:"); 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 () {// Ορίστε το ρυθμό baud για σειριακή επικοινωνία με ESP Serial.begin (115200); // Ορισμός συσκευής ως Wi-Fi Station WiFi.mode (WIFI_STA); // Ξεκινά το wifi // Init ESP-NOW και επιστρέφει την κατάστασή του εάν (esp_now_init ()! = ESP_OK) {Serial.println ("Σφάλμα αρχικοποίησης ESP -ΤΩΡΑ"); ΕΠΙΣΤΡΟΦΗ; } // καλέστε τη συνάρτηση OnDataSent μετά την αποστολή δεδομένων ESPNOW esp_now_register_send_cb (OnDataSent); // Εγγραφή peer esp_now_peer_info_t peerInfo; // αρχικοποίηση και εκχώρηση των πληροφοριών ομότιμων ως δείκτη σε μια διεύθυνση αποστολής (peerInfo.peer_addr, broadcastAddress, 6). // αντιγράψτε την τιμή του broadcastAddress με 6 byte στο 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); // καλέστε τη συνάρτηση OnDataRecv μετά τη λήψη δεδομένων ESPNOW send_data (); } void loop () {} void send_data () {Serial.println ("Αποστολή"); // Ορίστε τιμές για αποστολή strcpy (myData.a, "THIS IS A CHAR"); // αποθήκευση "THIS IS A CHAR" σε μεταβλητή a των "δεδομένων" μου που ορίστηκαν νωρίτερα myData.b = τυχαία (1, 20); // αποθηκεύστε μια τυχαία τιμή myData.c = 1,2; // αποθήκευση float myData.d = "ESP32"; // αποθηκεύστε μια συμβολοσειρά myData.e = false; // αποθήκευση bool // Αποστολή δεδομένων μικρότερο ή ίσο με 250 byte μέσω ESP-NOW και επιστρέφει την κατάστασή του esp_err_t result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (αποτέλεσμα == ESP_OK) {Serial.println ("Στάλθηκε με επιτυχία");} else {Serial.println ("Σφάλμα αποστολής των δεδομένων"); }}
ESP8266 ΚΩΔ
// Προσθέστε τις απαραίτητες βιβλιοθήκες
#include // Για να προσθέσετε δυνατότητες Wifi στο ESP32 #include // Για να αποκτήσετε πρόσβαση στις λειτουργίες esp now // αποθηκεύστε τη διεύθυνση MAC σε έναν πίνακα που ονομάζεται broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*ορίστε τους τύπους δεδομένων των πολλαπλών μεταβλητών δομημένων και μετονομασμένων όλων αυτών σε struct_message*/ typedef struct struct_message {char a [32]; int β? float c? Συμβολοσειρά d; bool e? } struct_message; // Δημιουργήστε μια μεταβλητή struct_message που ονομάζεται myData struct_message myData; // συνάρτηση που καλείται όταν λαμβάνονται τα δεδομένα και τα εκτυπώνει άκυρα OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Ελήφθησαν τα Bytes:"); 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; "Επιτυχία παράδοσης": "Αποτυχία παράδοσης"); εάν (sendStatus! = 1) {send_data (); }} void send_data () {// Ορίστε τιμές για αποστολή strcpy (myData.a, "THIS IS A CHAR"); // αποθήκευση "THIS IS A CHAR" σε μεταβλητή a των "δεδομένων" μου που ορίστηκαν νωρίτερα myData.b = τυχαία (1, 20); // αποθηκεύστε μια τυχαία τιμή myData.c = 1,2; // αποθήκευση float myData.d = "ESP8266"; // αποθηκεύστε μια συμβολοσειρά myData.e = false; // αποθήκευση bool esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); } void setup () {// Ορίστε το ρυθμό baud για σειριακή επικοινωνία με ESP Serial.begin (115200); // Ορίστε τη συσκευή ως Wi-Fi Station WiFi.mode (WIFI_STA). // Ξεκινά το wifi // Init ESP-NOW και επιστρέφει την κατάστασή του εάν (esp_now_init ()! = 0) {Serial.println ("Σφάλμα αρχικοποίησης ESP-NOW"); ΕΠΙΣΤΡΟΦΗ; } if (esp_now_add_peer (broadcastAddress, 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). // καλέστε τη συνάρτηση OnDataRecv μετά τη λήψη δεδομένων ESPNOW} void loop () {}
Βήμα 8: ΑΝΑΦΟΡΕΣ
ESPNOW_32_Παράδειγμα
ESPNOW_8266 Παράδειγμα
WIFI.h
ESP8266WiFi.h
esp_now.h για ESP8266
esp_now.h για ESP32
esp_now επίσημο έγγραφο (Καλύτερη εξήγηση λειτουργιών)
Επίσημος οδηγός ESP-NOW
Συνιστάται:
Έλεγχος μέσω της εφαρμογής Blynk χρησιμοποιώντας το Nodemcu μέσω Internet: 5 βήματα
Έλεγχος μέσω της εφαρμογής Blynk χρησιμοποιώντας το Nodemcu μέσω Διαδικτύου: Γεια σε όλους σήμερα, θα σας δείξουμε πώς μπορείτε να ελέγξετε ένα LED χρησιμοποιώντας ένα smartphone μέσω Διαδικτύου
M5STACK Πώς να εμφανίσετε τη θερμοκρασία, την υγρασία και την πίεση στο M5StickC ESP32 χρησιμοποιώντας το Visuino - Εύκολο να το κάνετε: 6 βήματα
M5STACK Πώς να εμφανίζεται η θερμοκρασία, η υγρασία και η πίεση στο M5StickC ESP32 χρησιμοποιώντας Visuino - Εύκολο να το κάνετε: Σε αυτό το σεμινάριο θα μάθουμε πώς να προγραμματίζουμε το ESP32 M5Stack StickC με Arduino IDE και Visuino για την εμφάνιση θερμοκρασίας, υγρασίας και πίεσης χρησιμοποιώντας αισθητήρα ENV (DHT12, BMP280, BMM150)
Πώς να κάνετε Flash ή να προγραμματίσετε το ESP8266 AT Firmware χρησιμοποιώντας το ESP8266 Flasher και Programmer, IOT Wifi Module: 6 Βήματα
Πώς να φλας ή να προγραμματίσετε το ESP8266 AT Firmware χρησιμοποιώντας το ESP8266 Flasher και Programmer, IOT Wifi Module: Περιγραφή: Αυτή η μονάδα είναι προσαρμογέας /προγραμματιστής USB για μονάδες ESP8266 τύπου ESP-01 ή ESP-01S. Είναι βολικά εξοπλισμένο με γυναικεία κεφαλίδα 2x4P 2,54mm για να συνδέσετε το ESP01. Επίσης, σπάει όλες τις ακίδες του ESP-01 μέσω αρσενικού 2x4P 2,54mm
Πώς να κάνετε τηλεχειριζόμενο αυτοκίνητο μέσω κινητού μέσω Bluetooth: 4 βήματα
Πώς να φτιάξετε κινητό τηλεχειριζόμενο αυτοκίνητο μέσω Bluetooth: Πώς να φτιάξετε κινητό τηλεχειριζόμενο αυτοκίνητο μέσω Bluetooth | Ινδικός LifeHacker
Πώς να χτίσετε έναν μετεωρολογικό σταθμό χρησιμοποιώντας το XinaBox και το Ubidots μέσω HTTP: 7 βήματα
Πώς να φτιάξετε έναν μετεωρολογικό σταθμό χρησιμοποιώντας το XinaBox και το Ubidots μέσω HTTP: Μάθετε πώς να φτιάξετε τον δικό σας Μετεωρολογικό Σταθμό στο Ubidots, χρησιμοποιώντας το XinaBox xChips (IP01, CW01 και SW01) Η μονάδα ESP8266 Core και Wi-Fi (xChip CW01) επιτρέπει στους χρήστες να στέλνουν δεδομένα από τα αρθρωτά xChips της XinaBox στο cloud. Αυτά τα δεδομένα μπορούν να παρακολουθούνται από απόσταση