Βιβλιοθήκη για την υποβολή ερωτημάτων HTTP με μια μονάδα WiFi ESP8266 και Arduino

Βιβλιοθήκη για την υποβολή ερωτημάτων HTTP με μια μονάδα WiFi ESP8266 και Arduino

Βιβλιοθήκη για την υποβολή ερωτημάτων HTTP με μια μονάδα WiFi ESP8266 και Arduino

Ένας απλός τρόπος αποστολής πληροφοριών από και προς έναν μικροελεγκτή είναι η συγκέντρωση τους σε έναν διακομιστή web. Αν και δεν είναι τόσο αποτελεσματική μέθοδος όσο, για παράδειγμα, η απευθείας πρόσβαση σε μια βάση δεδομένων, είναι αρκετά αποτελεσματική, ειδικά αν σκεφτείτε ένα έργο που βασίζεται σε μικροελεγκτή και προσθέσετε τα πλεονεκτήματα της πανταχού παρουσίας (δεδομένα στο σύννεφο) και της απλότητας (αυτό μπορούν να αντιμετωπιστούν ως πληροφορίες κειμένου και παραγγελίες). Η αποστολή πληροφοριών χρησιμοποιώντας αυτό το σύστημα μπορεί να συνίσταται στην υποβολή αιτημάτων HTTP POST και στη λήψη τους με ανάλυση του περιεχομένου της απάντησης σε ένα αίτημα HTTP GET.

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

    El ESP8266 Μονάδα WiFi Είναι μια πολύ οικονομική επιλογή, με απόδοση πολύ κατάλληλη για χρήση με μικροελεγκτές και πολύ εύκολη στη χρήση δουλεύοντας με εντολές AT.

    Για να συστηματοποιήσω τη χρήση του με αιτήματα HTTP, έχω αναπτύξει μια μικρή βιβλιοθήκη που υποστηρίζει τις ανάγκες του έργου της συσκευής διαχείρισης ύπνου (το οποίο ονόμασα SleepManager), καθώς βασίζει την υποδομή του σε έναν διακομιστή ιστού που του επιτρέπει να επεκταθεί σε ένα αντικείμενο. IoT ως υπηρεσία cloud. Δεν είναι δύσκολο να προσθέσετε άλλες υπηρεσίες, όπως αιτήματα UDP στη βιβλιοθήκη, για παράδειγμα, σε συγχρονισμός χρόνου μέσω NTP αν και, όπως εξηγώ στο συνδεδεμένο κείμενο, δεν είναι κρίσιμο για τις ανάγκες μου και μπορώ να το επιλύσω αποδεκτά με ένα αίτημα HTTP σε μια ιστοσελίδα που έχει προετοιμαστεί για αυτόν τον σκοπό, όπως δείχνω σε ένα παράδειγμα χρήσης αυτής της βιβλιοθήκης.

    Η λειτουργία της βιβλιοθήκης βασίζεται στην αποστολή εντολών AT όταν η συσκευή είναι διαθέσιμη και στην επανάληψη τους (με μικρή καθυστέρηση) σε περίπτωση σφάλματος, το οποίο ερμηνεύεται ως μη διαθεσιμότητα (επιτυχώς, με δοκιμή) για παράδειγμα από σημείο πρόσβασης WiFi ή διακομιστής υπό εξέταση.

    Η βιβλιοθήκη εκμεταλλεύεται το γεγονός ότι η μονάδα WiFi ESP8266 επιστρέφει έναν κωδικό +IPD ως προειδοποίηση λήψης δεδομένων για να γεμίσει ένα μικρό buffer με τις πληροφορίες που επιστρέφονται από τον διακομιστή. Για το έργο της συσκευής διαχείρισης ύπνου πρέπει να αναλύσω πολύ λίγα δεδομένα που επιστρέφονται από τον διακομιστή, έτσι ώστε, για εξοικονόμηση, η προσωρινή μνήμη και ο δείκτης που διατρέχουν είναι ιδιαίτερα μικροί. Αυτό θα είναι ένα από τα πρώτα πράγματα που θα πρέπει να αλλάξετε για να χρησιμοποιήσετε ξανά τη βιβλιοθήκη για την επεξεργασία μεγαλύτερου όγκου δεδομένων.

    Οι λειτουργίες που εκτίθενται ως δημόσια επιτρέπουν (1) να γνωρίζει την κατάσταση της μονάδας: εάν είναι συνδεδεμένη ή όχι, εάν υπάρχουν δεδομένα στο buffer και πόσα και εάν η μονάδα ESP8266 έχει ολοκληρώσει τη λειτουργία που έχει ζητηθεί. (2) συνδεθείτε σε ένα σημείο πρόσβασης WiFi σε ένα δίκτυο με διακομιστή DHCP και (3) κάντε αιτήματα HTTP GET και POST, αν και, όπως θα δείτε, ο κώδικας έχει σχεδιαστεί για να διευκολύνει την προσθήκη άλλων.

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

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

    Για να μάθετε εάν η ζητούμενη λειτουργία έχει ολοκληρωθεί, το πρόγραμμα μπορεί να χρησιμοποιήσει τη λειτουργία λειτουργία_ολοκληρώθηκε και σε αυτήν την περίπτωση στείλτε άλλο ή χρησιμοποιήστε τα δεδομένα που προκύπτουν για τα οποία χρησιμοποιείται η συνάρτηση read_buffer, το οποίο επιστρέφει τα περιεχόμενα του buffer που έχει γεμίσει με τα δεδομένα που έφθασαν στη μονάδα ESP8266 μέχρι να ολοκληρωθεί η λειτουργία και τη συνάρτηση buffer_length το οποίο αναφέρει την ποσότητα αυτών των δεδομένων που ο διακομιστής έχει προειδοποιήσει ότι επρόκειτο να σταλούν (ώστε να μπορούν να μειωθούν οι πληροφορίες από την ίδια τη μονάδα)

    Το παρακάτω παράδειγμα χρησιμοποιεί τη βιβλιοθήκη ερωτημάτων HTTP με τη μονάδα WiFi ESP8266 για την αποστολή δεδομένων στον διακομιστή (ένα ποσοστό που προκύπτει από την ανάγνωση μιας αναλογικής εισόδου) κάθε συγκεκριμένο χρονικό διάστημα. Δεδομένου ότι δεν αναμένει να λάβει καμία απάντηση, δεν χρησιμοποιεί το buffer και αρκεί για να ολοκληρωθεί σωστά η λειτουργία. Αυτό το σύστημα είναι αυτό που χρησιμοποιώ στο έργο της συσκευής διαχείρισης ύπνου για την αποθήκευση των αποτελεσμάτων των μετρήσεων του αισθητήρα στον διακομιστή.

    Το παρακάτω παράδειγμα χρησιμοποιεί ένα ερώτημα HTTP GET για να ρωτήσει την ώρα του διακομιστή και να τον συγχρονίσει με τον χρόνο της μικροελεγχόμενης συσκευής προσθέτοντας τον εκτιμώμενο χρόνο απόκρισης. Στην πραγματικότητα, προσθέτει άλλα 4 έως 6 δευτερόλεπτα για να διασφαλίσει ότι η ώρα της συσκευής είναι μεγαλύτερη από την ώρα του διακομιστή και να ελέγχει εύκολα εάν η ώρα στο ρολόι πραγματικού χρόνου που αποτελεί μέρος της συσκευής είναι σωστή ή έχει χαθεί λόγω λήψης μπαταρία.

    Μετά από πολλές δοκιμές έχω επαληθεύσει ότι αυτό το σύστημα του Συγχρονισμός ώρας με μονάδα WiFi ESP8266 Είναι αρκετά ακριβές για τις ανάγκες μου. στη χειρότερη περίπτωση με σφάλμα λιγότερο από 10 δευτερόλεπτα που είναι κάπως άσχετο στην περίπτωσή μου.

    Όπως φαίνεται στον κώδικα, είναι απαραίτητο να ρωτήσετε πρώτα το μήκος του buffer αφού η ανάγνωση επαναφέρει έτσι ώστε να είναι διαθέσιμο για αποθήκευση νέων δεδομένων.

    Μόλις διαβαστεί το περιεχόμενο του buffer, σε αυτό το παράδειγμα υποβάλλεται σε επεξεργασία για να ληφθεί ο χρόνος. Αρχικά, επιλέγεται το κείμενο μεταξύ των αγκύλων (ο διακομιστής απαντά χρησιμοποιώντας την εντολή PHP echo “{“.time().”}”) lo transforma en un “objeto tiempo” y de él obtiene en formato humano la fecha y la hora.

    Το ακόλουθο παράδειγμα προγράμματος, εμπνευσμένο από το ερώτημα ενός χρήστη, χρησιμοποιείται για την εύρεση της δημόσιας διεύθυνσης IP χρησιμοποιώντας την υπηρεσία Check IP AWS (Amazon Web Services) κάθε πέντε λεπτά.

    Όπως και στα προηγούμενα παραδείγματα, γίνεται μια σειρά από υποθέσεις που θα πρέπει να αλλάξουν ανάλογα με τη διαμόρφωση δικτύου που χρησιμοποιείται (192.168.1.X, στο παράδειγμα), το SSID και το κλειδί WiFi... Ο τρόπος εύρεσης του Η διεύθυνση IP δεν είναι πολύ κομψή, υποθέτει ότι είναι η τελευταία γραμμή της απάντησης στο αίτημα HTTP GET, αν και μπορεί να υπάρχει ένα API για να το κάνει με πιο ορθόδοξο τρόπο.


    μπορείτε να κατεβάστε τη βιβλιοθήκη ESP8266 για ερωτήματα HTTP με το Arduino Uno (χωρίς κονσόλα) και από εδώ μπορείς κατεβάστε τη βιβλιοθήκη ερωτημάτων ESP8266 HTTP για το Arduino που χρησιμοποιεί μια κονσόλα, δηλαδή χρειάζεται να εφαρμόσει μια σειριακή θύρα μέσω λογισμικού ή να χρησιμοποιήσει ως υλικό, για παράδειγμα, μια μητρική πλακέτα arduino mega o arduino leonardo.

    Δημοσίευση σχολίου

    Μπορεί να έχετε χάσει