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

ESP8266 Άμεση επικοινωνία δεδομένων: 3 βήματα
ESP8266 Άμεση επικοινωνία δεδομένων: 3 βήματα

Βίντεο: ESP8266 Άμεση επικοινωνία δεδομένων: 3 βήματα

Βίντεο: ESP8266 Άμεση επικοινωνία δεδομένων: 3 βήματα
Βίντεο: Εισαγωγή στον πίνακα ανάπτυξης WiFi NodeMCU ESP8266 με παράδειγμα HTTP Client 2024, Νοέμβριος
Anonim
ESP8266 Άμεση επικοινωνία δεδομένων
ESP8266 Άμεση επικοινωνία δεδομένων

Εισαγωγή

Ενώ έκανα κάποια έργα με μονάδες Arduinos και nRF24l01, αναρωτιόμουν αν θα μπορούσα να εξοικονομήσω κάποια προσπάθεια χρησιμοποιώντας μια μονάδα ESP8266. Το πλεονέκτημα της μονάδας ESP8266 είναι ότι περιέχει μικροελεγκτή επί του σκάφους, επομένως δεν απαιτείται επιπλέον πλακέτα Arduino. Επιπλέον, το μέγεθος της μνήμης του ESP8266 είναι πολύ μεγαλύτερο και σε σχέση με την ταχύτητα, το ESP8266 τρέχει στα 160MHz max αντί των 16MHz του Arduino. Υπάρχουν βέβαια και αρνητικές πλευρές.

Το ESP8266 λειτουργεί μόνο σε 3.3V, έχει λιγότερες ακίδες και λείπουν οι καλές αναλογικές είσοδοι που έχει το Arduino (έχει μία, αλλά μόνο για 1.0V και όχι 3.3V). Επιπλέον, υπάρχουν πολλά περισσότερα παραδείγματα κώδικα για το Arduino + nRF24l01 και για το ESP8266 ειδικά όταν πρόκειται για άμεση μεταφορά δεδομένων.

Έτσι, έχοντας κατά νου ένα έργο, εξέτασα το θέμα της γρήγορης και ελαφριάς μεταφοράς δεδομένων μεταξύ δύο ESP8266 χωρίς όλα τα στοιχεία WWW και

Whileάχνοντας στο διαδίκτυο για παραδείγματα (το μεγαλύτερο μέρος του παρακάτω κώδικα επιλέχθηκε από το δίκτυο σε διάφορα μέρη) συνάντησα πολλές ερωτήσεις πώς να εφαρμόσω μια άμεση μεταφορά δεδομένων χωρίς τα ωραία παραδείγματα "κάντο έτσι". Υπήρχε κάποιο παράδειγμα κώδικα, αλλά κυρίως με ερώτηση γιατί δεν λειτούργησε.

Έτσι, μετά από κάποια ανάγνωση και προσπάθεια κατανόησης, δημιούργησα τα παρακάτω παραδείγματα που επιτρέπουν τη γρήγορη και απλή μεταφορά δεδομένων μεταξύ δύο ESP8266.

Βήμα 1: Όρια και υπόβαθρα (TCP έναντι UDP)

Για να φτάσετε εκεί, ορισμένα όρια πρέπει να διευκρινιστούν σε σύγκριση με το nRF24l01.

Για να χρησιμοποιήσετε το ESP8266 στο περιβάλλον Arduino, η βασική βιβλιοθήκη που πρέπει να χρησιμοποιήσετε είναι το ESP8266WiFi.h. Μπορεί να είναι διαφορετικά, αλλά τα περισσότερα παραδείγματα χρησιμοποιούν τα παραπάνω. Όταν το χρησιμοποιείτε, πρέπει να φτάσετε την επικοινωνία σας σε επίπεδο WiFi.

Έτσι, για να επικοινωνήσετε πρέπει να υπάρχει τουλάχιστον ένα σημείο πρόσβασης (AP) / διακομιστής και ένας πελάτης. Το AP παρέχει το όνομα του δικτύου και τις διευθύνσεις IP και ο πελάτης θα συνδεθεί σε αυτόν τον διακομιστή.

Σε σύγκριση λοιπόν με το nRF24l01, όπου ο κώδικας και στα δύο άκρα είναι λίγο πολύ ο ίδιος (εκτός από τα κανάλια μετάδοσης) ο κώδικας του ESP8266 είναι θεμελιωδώς διαφορετικός, καθώς ο ένας διαμορφώνεται ως AP και ο άλλος ως πελάτης.

Το επόμενο θέμα είναι, ότι αντί να στείλουμε μόνο μερικά byte στο nRF24l01, πρέπει να τηρηθούν τα πρωτόκολλα μεταφοράς ESP8266.

Υπάρχουν δύο κοινά χρησιμοποιούμενα πρωτόκολλα: TCP και UDP.

Το TCP (Transmission Control Protocol) είναι ένα πρωτόκολλο που επιτρέπει τη μετάδοση χωρίς απώλειες μεταξύ διακομιστή και πελάτη. Το πρωτόκολλο περιλαμβάνει «χειραψίες» (πολλές σημαίες και αποδεκτές αποστολές μεταξύ των δύο μερών) και αρίθμηση και ανίχνευση πακέτων για τον εντοπισμό και την εκ νέου μετάδοση των χαμένων πακέτων. Επιπλέον, χρησιμοποιώντας όλες αυτές τις χειραψίες το πρωτόκολλο αποτρέπει την απώλεια δεδομένων λόγω πολλών πακέτων που στέλνονται ταυτόχρονα στο δίκτυο. Τα πακέτα δεδομένων περιμένουν έως ότου μπορούν να ληφθούν.

Το UDP (User Datagram Protocol) δεν διαθέτει όλες τις χειραψίες, την αρίθμηση πακέτων και την εκ νέου μετάδοση. Επομένως, τα γενικά έξοδά του είναι μικρότερα και δεν χρειάζεται όλες οι χειραψίες να διατηρούν μια σύνδεση. Το UDP ενσωματώνει κάποια βασική ανίχνευση σφαλμάτων, αλλά καμία διόρθωση (το κατεστραμμένο πακέτο μόλις πέφτει). Τα δεδομένα αποστέλλονται, χωρίς να γνωρίζουν εάν ο παραλήπτης είναι ελεύθερος να λάβει τα δεδομένα. Ταυτόχρονα, πολλά πακέτα μπορούν να συγκρουστούν, καθώς κάθε μέρος στέλνει τα δεδομένα όποτε χρειαστούν. Παραλείποντας όλες τις χειραψίες, υπάρχει ένα επιπλέον ωραίο χαρακτηριστικό του UDP που ονομάζεται "multicast" και "μετάδοση". Στην περίπτωση «πολλαπλής διανομής» τα πακέτα δεδομένων αποστέλλονται σε μια προκαθορισμένη ομάδα μελών, σε μια «μετάδοση» πακέτα δεδομένων αποστέλλονται σε όλα τα συνδεδεμένα μέλη. Αυτό μειώνει σημαντικά τη μεταφορά δεδομένων σε περίπτωση ροών που θα ληφθούν από πολλά μέλη (π.χ. με αποστολή μιας ροής βίντεο σε πολλούς δέκτες ή με την αποστολή της τρέχουσας ώρας σε πολλές συνδεδεμένες συσκευές).

Υπάρχουν μερικά καλά βίντεο στο Youtube που το εξηγούν ακόμη καλύτερα.

Κατά την αποστολή δεδομένων, είναι σημαντικό να γνωρίζετε τις ανάγκες σας:

  • μη κατεστραμμένα δεδομένα, διαχείριση πολλαπλών συνομηλίκων με χειραψίες → TCP
  • δεδομένα σε πραγματικό χρόνο, γρήγορη σύνδεση → UDP

Ξεκίνησα για πρώτη φορά με την εφαρμογή μιας επικοινωνίας που βασίζεται σε TCP (μεταξύ ενός διακομιστή και ενός πελάτη). Κατά τη δοκιμή του, αντιμετώπισα καθυστερημένα προβλήματα στη μετάδοση. Στην αρχή τα δεδομένα ανταλλάχθηκαν γρήγορα, μετά μετά από λίγο η ταχύτητα έπεσε δραματικά. Κατέληξα ότι αυτό ήταν ένα τυπικό πρόβλημα της προσέγγισης TCP (το οποίο ήταν λάθος!), Έτσι μετατράπηκε σε λύση που βασίζεται σε UDP. Τελικά προσέγγισα και τους δύο να δουλεύουν. Έτσι θα δοθούν και οι δύο λύσεις.

Τα παρακάτω σκίτσα έχουν κοινό για το TCP και το UDP:

  • είναι ανεξάρτητα από οποιοδήποτε υπάρχον δίκτυο WiFi. Έτσι θα λειτουργήσει οπουδήποτε μακριά από το διαδίκτυο και τους συνδεδεμένους δρομολογητές.
  • στέλνουν δεδομένα ASCII για εκτύπωση μέσω της σειριακής οθόνης.
  • στέλνουν δεδομένα που λαμβάνονται από τη συνάρτηση millis ()-για την ανάλυση της ταχύτητας της μετάδοσης.
  • δεν έχουν δοκιμαστεί για πολλούς πελάτες (λόγω του υλικού για τη ρύθμιση του δικτύου αυτήν τη στιγμή)

Βήμα 2: Υλικό

Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα

Για να δοκιμάσω ολόκληρη τη ρύθμιση χρησιμοποίησα δύο μονάδες ESP8266. Μια μονάδα είναι ένας προσαρμογέας ESP-01 + USB-to-UART. Η άλλη μονάδα είναι μια μονάδα βασισμένη στο ESP-12 που ενσωματώνει τη σύνδεση USB, τον ρυθμιστή τάσης και μερικά διασκεδαστικά πράγματα όπως διακόπτες, LDR και πολύχρωμα LED.

Η μονάδα USB-to-UART για το ESP-01 έπρεπε να τροποποιηθεί λίγο για να μπορέσει να χρησιμοποιηθεί ως προγραμματιστής (και πάλι Youtube από τον Csongor Varga).

Για να εκτελέσετε τα σκίτσα, πρέπει να εγκαταστήσετε τις βιβλιοθήκες ESP8266 (όπως περιγράφεται σε πολλά σημεία στο διαδίκτυο). Και στις δύο περιπτώσεις (TCP και UDP) υπάρχει σκίτσο διακομιστή και πελάτη το καθένα. Ποιο σκίτσο φορτώνεται σε ποια μονάδα δεν έχει σημασία.

Ευχαριστίες

Όπως αναφέρθηκε, τα σκίτσα βασίζονται σε πολλά κομμάτια που βρήκα στον ιστό. Δεν θυμάμαι πια πού βρήκα τι και τι είναι ο αρχικός κώδικας ή τι άλλαξα. Iθελα λοιπόν να ευχαριστήσω τη μεγάλη κοινότητα γενικά για τη δημοσίευση όλων των υπέροχων παραδειγμάτων.

Βήμα 3: Τα σκίτσα

Ο Κώδικας αποτελείται από δύο σκίτσα το καθένα (όπως εξηγείται), ένα σκίτσο διακομιστή και ένα σκίτσο πελάτη, για TCP και UDP το καθένα.

Συνιστάται: