Πίνακας περιεχομένων:

Πώς να κάνετε πολλαπλή ομιλία ESP μέσω ESP-NOW χρησιμοποιώντας ESP32 και ESP8266: 8 βήματα
Πώς να κάνετε πολλαπλή ομιλία ESP μέσω ESP-NOW χρησιμοποιώντας ESP32 και ESP8266: 8 βήματα

Βίντεο: Πώς να κάνετε πολλαπλή ομιλία ESP μέσω ESP-NOW χρησιμοποιώντας ESP32 και ESP8266: 8 βήματα

Βίντεο: Πώς να κάνετε πολλαπλή ομιλία ESP μέσω ESP-NOW χρησιμοποιώντας ESP32 και ESP8266: 8 βήματα
Βίντεο: Psychic Phenomena: The Mystery of Levitation, the ‘Dark Psyche’, UFOs, & more w/ Michael Grosso, PhD 2024, Νοέμβριος
Anonim
Πώς να κάνετε πολλαπλή ομιλία ESP μέσω ESP-NOW χρησιμοποιώντας τα ESP32 και ESP8266
Πώς να κάνετε πολλαπλή ομιλία ESP μέσω ESP-NOW χρησιμοποιώντας τα ESP32 και ESP8266

Στο τρέχον έργο μου, χρειάζομαι πολλαπλά ESP για να μιλήσω μεταξύ τους χωρίς δρομολογητή. Για να γίνει αυτό, θα χρησιμοποιήσω το ESP-NOW για να κάνω ασύρματη επικοινωνία μεταξύ τους χωρίς δρομολογητή στο ESP.

Προμήθειες

Πράγματα που χρησιμοποίησα:

Ενότητα ESP32 DEV

NODEMCU 1.0 (μονάδα ESP12E)

Βήμα 1: Λάβετε τη διεύθυνση Mac του πίνακα

Λάβετε τη διεύθυνση Mac του πίνακα
Λάβετε τη διεύθυνση Mac του πίνακα
Λάβετε τη διεύθυνση Mac του πίνακα
Λάβετε τη διεύθυνση 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 να λειτουργεί

Ακολουθεί μια επισκόπηση του τρόπου λειτουργίας του:

  1. Συμπεριλάβετε βιβλιοθήκες esp τώρα και wifi
  2. Αποθηκεύστε τη διεύθυνση mac του παραλήπτη ESP
  3. Ορίστε τη δομή δεδομένων του μηνύματος αποστολής/λήψης
  4. Κατά τη ρύθμιση, ρυθμίστε το wifi σε λειτουργία σταθμού
  5. Αρχικοποίηση esp_now
  6. πραγματοποιήστε και καταχωρίστε τη λειτουργία επανάκλησης που καλείται μετά την αποστολή και λήψη δεδομένων
  7. Για το Esp8266, καθορίστε το ρόλο του
  8. καταχωρίστε τον ομότιμο ή τον παραλήπτη esp
  9. Αποστολή δεδομένων

Βήμα 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

Συνιστάται: