- Απαιτούμενα υλικά:
- Πως δουλεύουν τα πράγματα?
- Προγραμματισμός του ESP8266-01:
- Σύνδεση ESP8266-01 με το Arduino:
- Πρόγραμμα Arduino και Εργασία:
Το ESP8266-01 υπήρξε μια εξαιρετική ενότητα για να ξεδιψάσουμε όλα τα δίψα μας για έργα IOT. Από την κυκλοφορία του, έχει αναπτύξει μια ισχυρή κοινότητα και έχει εξελιχθεί σε μια εύχρηστη, φθηνή και ισχυρή μονάδα Wi-Fi. Μια άλλη πλατφόρμα ανοιχτού κώδικα που είναι πολύ πιο δημοφιλής είναι το Arduino, έχει ήδη πολλά έργα που έχουν δημιουργηθεί γύρω από αυτό. Ο συνδυασμός αυτών των δύο πλατφορμών θα ανοίξει πόρτες για πολλά καινοτόμα έργα, οπότε σε αυτό το σεμινάριο θα μάθουμε πώς να διασυνδέουμε τη μονάδα ESP8266-01 με το Arduino. Με αυτόν τον τρόπο θα μπορέσουμε να στείλουμε ή να λάβουμε δεδομένα μεταξύ του Arduino και του Διαδικτύου.
Για τους σκοπούς αυτού του σεμιναρίου θα διαβάσουμε την ώρα, την ημερομηνία, τη θερμοκρασία και την υγρασία από το Διαδίκτυο χρησιμοποιώντας ένα API με το ESP8266-01. Στη συνέχεια, στείλτε αυτές τις τιμές σε μια πλακέτα Arduino και εμφανίστε τις στην οθόνη LCD 16 * 2. Ακούγεται δροσερό !! Ας ξεκινήσουμε λοιπόν.
Απαιτούμενα υλικά:
- Arduino Board (Οποιαδήποτε έκδοση)
- ESP8266-01
- Πλακέτα προγραμματιστή FTDI με επιλογή 3.3V
- LCD 16x2
- Ποτενσιόμετρο
- Πιέστε το κουμπί
- Σύνδεση καλωδίων
- Ψωμί
Πως δουλεύουν τα πράγματα?
Πριν από την κατάδυση, είναι σημαντικό να γνωρίζουμε πώς πραγματικά λειτουργεί αυτό το πράγμα. Βασικά, πρέπει να ξεκινήσουμε με την ενότητα ESP8266-01. Θα χρησιμοποιήσουμε το Arduino IDE για να προγραμματίσουμε το ESP8266 και ο κωδικός θα γραφτεί για να χρησιμοποιήσει ένα API για να διαβάσει ένα αρχείο JSON μέσω αιτήματος http. Στη συνέχεια, θα φράσουμε αυτό το αρχείο JSON για να εξαγάγουμε μόνο τις απαιτούμενες πληροφορίες από το πλήρες αρχείο JSON.
Μόλις οι πληροφορίες διατυπωθούν, θα τις εκτυπώσουμε χρησιμοποιώντας τη σειριακή επικοινωνία. Αυτές οι σειριακές γραμμές θα συνδεθούν με το Arduino, έτσι ώστε το Arduino να μπορεί να διαβάσει τις πληροφορίες που αποστέλλονται από το ESP8266. Μετά την ανάγνωση και επεξεργασία των πληροφοριών, θα τις εμφανίσουμε στην οθόνη LCD.
Είναι εντάξει, αν δεν το έχετε καταλάβει πλήρως, γιατί θα μάθουμε το ίδιο στο υπόλοιπο αυτού του σεμιναρίου.
Προγραμματισμός του ESP8266-01:
Αυτό το σεμινάριο προϋποθέτει ότι έχετε κάποια εμπειρία με την ενότητα ESP8266. Εάν όχι, συνιστάται να διαβάσετε τα ακόλουθα τρία μαθήματα για να κατανοήσετε πλήρως αυτό.
- Ξεκινώντας με ESP8266-01
- Προγραμματισμός ESP8266-01 χρησιμοποιώντας εντολές AT
- Προγραμματισμός του ESP8266-01 χρησιμοποιώντας το Arduino IDE και αναβοσβήνει η μνήμη του
Μπορείτε επίσης να δείτε όλα τα έργα ESP8266 εδώ.
Εδώ πρόκειται να προγραμματίσουμε την ενότητα ESP8266-01 χρησιμοποιώντας το Arduino IDE. Για υλικό χρησιμοποιούμε την πλακέτα FTDI με 3.3V για τον προγραμματισμό ESP8266, καθώς θα κάνει το υλικό πολύ απλό. Το διάγραμμα κυκλώματος για τη σύνδεση του ESP8266 με την πλακέτα FTDI φαίνεται παρακάτω.
Βεβαιωθείτε ότι πληρούνται οι ακόλουθες προϋποθέσεις
1. Το ESP8266-01 είναι μόνο 3,3V ανεκτικό, μην χρησιμοποιείτε 5V. Ορίστε λοιπόν το FTDI μόνο σε λειτουργία 3.3V.
2. Το GPIO_0 πρέπει να είναι γειωμένο για λειτουργία προγραμματισμού
3. Ο πείρος επαναφοράς πρέπει να συνδεθεί μέσω ενός κουμπιού στον πείρο γείωσης. Αυτό το κουμπί πρέπει να πατηθεί λίγο πριν ανεβάσετε τον κωδικό. Κάθε φορά που πατάτε το κουμπί, το μπλε LED στη μονάδα ESP8266-01 ανεβαίνει ψηλά για να δείξει ότι η μονάδα επαναφέρεται.
Μόλις ολοκληρωθούν οι συνδέσεις, ανοίξτε το Arduino IDE και ελέγξτε αν μπορείτε να ανεβάσετε ένα δείγμα προγράμματος με επιτυχία. Εάν δεν είστε σίγουροι πώς να χρησιμοποιήσετε το Arduino IDE για να ανεβάσετε το πρόγραμμα στο ESP8266, ακολουθήστε τον προγραμματισμό ESP8266 με το Arduino για να το μάθετε. Σε αυτό το σημείο υποθέτω ότι έχετε ανεβάσει με επιτυχία το πρόγραμμα αναλαμπής.
. Το πλήρες πρόγραμμα δίνεται στο τέλος αυτής της σελίδας πιο κάτω και τα εξηγώ ως μικρά αποσπάσματα. Το πρόγραμμα απαιτεί επίσης τη μεταγλώττιση της βιβλιοθήκης Arduino JSON, οπότε αν δεν έχετε ήδη προσθέσει τη βιβλιοθήκη στο Arduino IDE, προσθέστε την κάνοντας λήψη από τη βιβλιοθήκη Arduino JSON από το Github.
Το ESP8266 πρέπει να συνδεθεί με το Διαδίκτυο για να πάρει τα δεδομένα σχετικά με την ημερομηνία, την ώρα, τη θερμοκρασία και την υγρασία. Επομένως, πρέπει να το επιτρέψετε να συνδεθεί στο Wi-Fi σας αποδεικνύοντας το SSID και τον κωδικό πρόσβασης στις παρακάτω γραμμές
const char * ssid = "JIO-Fi"; // Εισαγάγετε το Wi-Fi SSID const char * password = "Pas123"; // Εισαγάγετε τον κωδικό πρόσβασης Wi-Fi
Μέσα στο setup () λειτουργία που ελέγχει αν το ESP είναι σε θέση να συνδεθεί με το Wi-Fi, αν δεν θα περιμένει εκεί για πάντα μόνο με την εκτύπωση «Συνδέοντας..» στην σειριακή οθόνη.
ενώ (WiFi.status ()! = WL_CONNECTED) {// Περιμένετε έως ότου συνδεθεί το Wi-Fi καθυστέρηση (1000); Serial.print ("Σύνδεση.."); // Εκτύπωση σύνδεσης.. έως ότου ολοκληρωθεί η σύνδεση }
Το επόμενο βήμα είναι το πολύ σημαντικό βήμα. Εάν η σύνδεση Wi-Fi είναι επιτυχής, πρέπει να καλέσουμε ένα αίτημα http get για να διαβάσουμε το αρχείο JSON από το Διαδίκτυο. Σε αυτό το σεμινάριο χρησιμοποιώ το API που παρέχεται από το wunderground.com. Επομένως, αν σκοπεύετε να χρησιμοποιήσετε το ίδιο, μπορείτε να συνδεθείτε και να εγγραφείτε για το δωρεάν κλειδί API ή να χρησιμοποιήσετε οποιοδήποτε API της επιλογής σας. Μόλις οριστικοποιήσετε το API σας, θα καταλήξετε σε έναν σύνδεσμο κάπως έτσι παρακάτω
Σημείωση: Έχω αλλάξει το κλειδί API αυτού του συνδέσμου, οπότε αυτό δεν θα λειτουργήσει. Διατηρήστε το κλειδί API σας ασφαλές και μην το κοινοποιήσετε.
Το API μου εδώ χρησιμοποιείται για τη λήψη των δεδομένων καιρού του Chennai. Μπορείτε να χρησιμοποιήσετε οποιοδήποτε API. Αλλά όταν φορτώνετε το API σε οποιοδήποτε πρόγραμμα περιήγησης θα πρέπει να επιστρέψει ένα αρχείο JSON. Για παράδειγμα το API μου επιστρέφει το ακόλουθο αρχείο JSON
Η δική σας μπορεί να επιστρέψει ένα αρχείο με διαφορετικά δεδομένα. Μπορούμε να ελέγξουμε εάν αυτό το αρχείο JSON λαμβάνεται επίσης από το ESP8266 μας διαβάζοντας το και εκτυπώνοντας το JSON στη σειριακή οθόνη μας χρησιμοποιώντας τις ακόλουθες γραμμές
int httpCode = http.GET (); // περάστε ένα αίτημα λήψης εάν (httpCode> 0) {// Ελέγξτε τον κωδικό επιστροφής // payload = http.getString (); // Αποθηκεύστε την τιμή στο varibale Payload για εντοπισμό σφαλμάτων // Serial.println (payload); // Εκτυπώστε το ωφέλιμο φορτίο για εντοπισμό σφαλμάτων, διαφορετικά σχολιάστε και τις δύο γραμμές
Έχω σχολιάσει αυτές τις γραμμές, καθώς χρειάζονται μόνο για δοκιμές. Μόλις βεβαιωθείτε ότι το ESP8266 είναι σε θέση να λάβει τα δεδομένα JSON ήρθε η ώρα για τη διατύπωση των Δεδομένων. Όπως μπορείτε να δείτε, αυτά τα δεδομένα είναι τεράστια και οι περισσότερες από τις τιμές είναι άχρηστες εκτός από αυτές που απαιτούνται για εμάς, όπως ημερομηνία, ώρα, θερμοκρασία και υγρασία.
Χρησιμοποιούμε λοιπόν τη βιβλιοθήκη JSON Arduino για να διαχωρίσουμε τις τιμές που απαιτούνται για εμάς και να την αποθηκεύσουμε σε μια μεταβλητή. Αυτό είναι δυνατό επειδή οι τιμές στο αρχείο JSON έχουν αντιστοιχιστεί ως ζεύγη τιμών ονόματος. Αυτό το όνομα λοιπόν είναι μια συμβολοσειρά που θα διατηρεί την απαιτούμενη τιμή για εμάς.
Για να γίνει αυτό, πρέπει να μεταβούμε σε έναν ιστότοπο που θα αναλύει το αρχείο JSON και θα μας δώσει τον κωδικό Arduino. Ναι είναι τόσο εύκολο. Προχωρήστε στο https://arduinojson.org/assistant/ και επικολλήστε το αρχείο JSON που φορτώσαμε στο πρόγραμμα περιήγησής μας και πατήστε enter. Όταν τελειώσω το δικό μου έμοιαζε κάπως έτσι παρακάτω
Κάντε κύλιση προς τα κάτω για να δείτε το πρόγραμμα διατύπωσης που δημιουργείται αυτόματα
Το μόνο που έχετε να κάνετε είναι να επιλέξετε τη μεταβλητή που θέλετε, να τις αντιγράψετε και να την επικολλήσετε στο Arduino IDE σας, όπως έχω κάνει εδώ
/ * Φράση δεδομένων χρησιμοποιώντας τη βιβλιοθήκη JSON * / // Χρησιμοποιήστε το https://arduinojson.org/assistant/ για να λάβετε τις τιμές φράσης για τη συμβολοσειρά JSON const size_t bufferSize = JSON_OBJECT_SIZE (0) + JSON_OBJECT_SIZE (1) + JSON_OBJECT_SIZE (2) + 2 * JSON_OBJECT_SIZE (3) + JSON_OBJECT_SIZE (8) + JSON_OBJECT_SIZE (12) + JSON_OBJECT_SIZE (56) + 2160; DynamicJsonBuffer jsonBuffer (bufferSize); JsonObject & root = jsonBuffer.parseObject (http.getString ()); / * Τέλος δεδομένων φράσης * / // Διευθυνθείτε της τιμής sin στις επιθυμητές μεταβλητές JsonObject & current_observation = root; // under current_observation JsonObject & current_observation_observation_location = current_observation; // under observ_location const char * current_observation_station_id = current_observation; // "ICHENNAI1" // λάβετε τις εντολές τοποθεσίας const char * current_observation_local_time_rfc822 = current_observation; // Τοπική ώρα // λάβετε την τοπική ώρα const * current_observation_temperature_string = current_observation; // "90,7 F (32,6 C)" // λάβετε την τιμή θερμοκρασίας const char * current_observation_relative_humidity = current_observation; // "73%" // λάβετε την τιμή υγρασίας
Μόλις αντιγράψαμε τις μεταβλητές current_observation_station_id, current_observation_local_time_rfc822, current_observation_temperature_string και current_observation_relative_humidity . Εφόσον σχεδιάζουμε να εμφανίσουμε μόνο αυτά τα τέσσερα δεδομένα στην οθόνη LCD.
Τέλος, έχουμε λάβει τα δεδομένα που χρειαζόμαστε από το Διαδίκτυο και τα έχουμε αποθηκεύσει ως μεταβλητή στην οποία μπορούμε να χρησιμοποιήσουμε άνετα. Για να στείλουμε αυτά τα δεδομένα στο Arduino, πρέπει απλώς να τα γράψουμε σειριακά μέσω του Serial monitor. Οι ακόλουθες γραμμές θα κάνουν ακριβώς το ίδιο
// Εκτυπώστε τις μεταβλητές μέσω σειριακής οθόνης Serial.print (current_observation_station_id); // στείλτε τα στοιχεία τοποθεσίας στην καθυστέρηση Arduino (100). // καθυστέρηση σταθερότητας Serial.print (current_observation_local_time_rfc822); // στείλτε τα στοιχεία της τοπικής ώρας στην καθυστέρηση Arduino (100). // καθυστέρηση σταθερότητας Serial.print (current_observation_temperature_string); // στείλτε τα στοιχεία θερμοκρασίας στην καθυστέρηση Arduino (100). // καθυστέρηση σταθερότητας Serial.print (current_observation_relative_humidity); // στείλτε τις λεπτομέρειες υγρασίας στην καθυστέρηση Arduino (100). // καθυστέρηση σταθερότητας
Σημειώστε ότι έχω χρησιμοποιήσει το Serial.print () και όχι το Serial.println () αφού η εντολή Serial.println () θα προσθέσει a / n και / r μαζί με τα δεδομένα που δεν είναι απαραίτητα για εμάς. Έχουμε προσθέσει επίσης καθυστέρηση 10 δευτερολέπτων έτσι ώστε το ESP να στείλει αυτές τις τιμές μόνο σε διάστημα 10 δευτερολέπτων στο Arduino.
Σύνδεση ESP8266-01 με το Arduino:
Μέχρι στιγμής έχουμε προγραμματίσει το ESP8266-01 μας για να διαβάσουμε τα απαιτούμενα δεδομένα από το Διαδίκτυο σε διάστημα 10 δευτερολέπτων και να τα στείλουμε σειριακά. Τώρα πρέπει να διασυνδέσουμε το ESP με το Arduino, ώστε να μπορούμε να διαβάσουμε αυτά τα σειριακά δεδομένα. Πρέπει επίσης να προσθέσουμε μια οθόνη LCD 16 * 2 στο Arduino, ώστε να μπορούμε να προβάλλουμε τα δεδομένα που λαμβάνονται από τη μονάδα ESP8266. Το διάγραμμα κυκλώματος για τη διασύνδεση της μονάδας ESP8266 με το Arduino φαίνεται παρακάτω
Βεβαιωθείτε ότι ο πείρος GPIO_0 παραμένει ελεύθερος, τροφοδοτήστε τη μονάδα μόνο με τον πείρο 3.3V του Arduino και πατήστε το κουμπί για να τοποθετήσετε τη μονάδα ESP στη λειτουργική μονάδα. Τώρα το πρόγραμμα που ανεβάσαμε στο ESP έπρεπε να είχε αρχίσει να λειτουργεί και η ενότητα θα πρέπει να στέλνει τα δεδομένα μέσω σειριακής καρφίτσας στο Arduino. Αυτές οι σειριακές καρφίτσες συνδέονται με τον αριθμό pin 6 και 7 στο Arduino. Έτσι μπορούμε να χρησιμοποιήσουμε την επιλογή σειριακού λογισμικού στο Arduino για να διαβάσουμε αυτά τα σειριακά δεδομένα από τις καρφίτσες.
Πρόγραμμα Arduino και Εργασία:
Το πλήρες πρόγραμμα Arduino παρέχεται μαζί με τον κωδικό ESP στο τέλος αυτής της σελίδας. Μπορείτε να μετακινηθείτε προς τα κάτω για να δείτε το πρόγραμμα ή να διαβάσετε περαιτέρω εάν θέλετε να κατανοήσετε το πρόγραμμα.
Το πρόγραμμα διασύνδεσης είναι πολύ απλό, απλώς πρέπει να χρησιμοποιήσουμε τη σειριακή βιβλιοθήκη λογισμικού για να διαβάσουμε τα δεδομένα από τον πείρο 6 και 7 και να τα εμφανίσουμε στην οθόνη LCD. Δεδομένου ότι τα δεδομένα που λαμβάνονται είναι σε μορφή συμβολοσειράς, πρέπει να χρησιμοποιήσουμε την επιλογή substring για να σπάσουμε το ωφέλιμο φορτίο στην απαίτησή μας ή ακόμα και να το μετατρέψουμε σε ακέραιο εάν απαιτείται. Ξεκινάμε λοιπόν καθορίζοντας τους ακροδέκτες στους οποίους συνδέεται η οθόνη LCD.
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Καρφίτσες με τις οποίες είναι συνδεδεμένη η οθόνη LCD LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Από το έχουμε συνδέσει τις ακίδες Rx και Tx της ESP8266 με το 6 και το 7 ου pin του Arduino πρέπει να προετοιμάσετε το σειριακό λογισμικό για αυτές τις καρφίτσες, ώστε να μπορούμε να λάβουμε τα σειριακά δεδομένα από τους.Θα έχουν ονόματα όπως αυτό ESP_Serial, μπορείτε να ονομάστε τους ό, τι θέλετε
SoftwareSerial ESP_Serial (6,7); // Tx, Rx
Μέσα στη λειτουργία setup () αρχικοποιούμε τη σειριακή επικοινωνία για το Serial monitor και επίσης για το σειριακό λογισμικό. Εάν μπορούσατε να θυμηθείτε, κάναμε το πρόγραμμα ESP να επικοινωνεί με ρυθμό baud 9600, οπότε πρέπει να χρησιμοποιήσουμε τον ίδιο ρυθμό baud για τη σειριακή θύρα λογισμικού. Εμφανίζουμε επίσης ένα μικρό εισαγωγικό μήνυμα στην οθόνη LCD για 2 δευτερόλεπτα.
άκυρη ρύθμιση () {lcd.begin (16, 2); // Χρησιμοποιούμε οθόνη LCD 16 * 2 lcd.print ("Arduino & ESP"); // Εμφάνιση ενός εισαγωγικού μηνύματος Serial.begin (115200); ESP_Serial.begin (9600); καθυστέρηση (2000); lcd.clear (); }
Μέσα στη λειτουργία του κύριου βρόχου () πρέπει να ελέγξουμε εάν το ESP8266 στέλνει κάτι. Εάν είναι, τότε διαβάζουμε τη συμβολοσειρά από το ESP8266 και την αποθηκεύουμε σε μια μεταβλητή που ονομάζεται ωφέλιμο φορτίο. Το μεταβλητό ωφέλιμο φορτίο είναι τύπου String και θα περιέχει όλες τις πληροφορίες που αποστέλλονται από τη μονάδα ESP8266.
ενώ (ESP_Serial.available ()> 0) {payload = ESP_Serial.readString ();
Τώρα πρέπει να χωρίσουμε αυτήν τη συμβολοσειρά σε μικρά κομμάτια, ώστε να τα χρησιμοποιήσουμε για δικό μας σκοπό, σε αυτήν την περίπτωση πρέπει να τα χωρίσουμε για να τα εμφανίσουμε στην οθόνη LCD. Αυτό μπορεί να γίνει εύκολα χρησιμοποιώντας τη λειτουργία substring στο Arduino. Πρέπει να γνωρίζετε τη θέση κάθε χαρακτήρα για να χρησιμοποιήσετε αυτήν τη λειτουργία substring . Μπορείτε να εκτυπώσετε το ωφέλιμο φορτίο στη σειριακή οθόνη για να μάθετε τη θέση των χαρακτήρων και να τα χρησιμοποιήσετε για να κατηγοριοποιήσετε τα υποστρώματα όπως φαίνεται παρακάτω
local_date = payload.substring (14, 20); local_time = payload.substring (26, 31); θερμοκρασία = ωφέλιμο φορτίο (υποσυστήματα (48, 54) Υγρασία = ωφέλιμο φορτίο. Υποστροφή (55, 60)
Τώρα μπορώ να προχωρήσω και να χρησιμοποιήσω αυτές τις μεταβλητές για να τις εκτυπώσω σε σειριακή οθόνη ή απλά να τις εκτυπώσω στην οθόνη LCD. Ωστόσο, η εκτύπωσή τους στη σειριακή οθόνη θα μας βοηθήσει να ελέγξουμε εάν τα υποστρώματα έχουν χωριστεί σωστά. Στη συνέχεια απλώς τα εκτυπώνουμε στην οθόνη LCD χρησιμοποιώντας τις ακόλουθες γραμμές
lcd.clear (); lcd.setCursor (1, 0); lcd.print (local_date); lcd.setCursor (8, 0); lcd.print (local_time); lcd.setCursor (1, 1); lcd.print (θερμοκρασία); lcd.setCursor (10, 1); lcd.print (Υγρασία);
Ανεβάστε το πρόγραμμα στο Arduino και βεβαιωθείτε ότι οι συνδέσεις είναι όπως φαίνεται στο παραπάνω διάγραμμα κυκλώματος. Ρυθμίστε την αντίθεση της οθόνης LCD μέχρι να δείτε τα πράγματα καθαρά. Θα πρέπει να δείτε το μήνυμα Εισαγωγής στην οθόνη LCD και μετά, μετά από λίγα δευτερόλεπτα, οι λεπτομέρειες όπως η ημερομηνία, η ώρα, η θερμοκρασία και η υγρασία θα πρέπει να εμφανίζονται στην οθόνη LCD όπως φαίνεται παρακάτω.
Μπορείτε επίσης να παρατηρήσετε ότι το μπλε led στο ESP8266 αναβοσβήνει κάθε φορά που εισέρχονται τα δεδομένα. Εάν δεν μπορείτε να το δείτε αυτό σημαίνει ότι το ESP δεν βρίσκεται σε λειτουργία προγραμματισμού, δοκιμάστε να πατήσετε το κουμπί Reset και ελέγξτε τις συνδέσεις.
Παρόμοια με αυτό μπορείτε να χρησιμοποιήσετε οποιοδήποτε API για να λάβετε τυχόν απαιτούμενα δεδομένα από το Διαδίκτυο και να το τροφοδοτήσετε στο Arduino και να επεξεργαστείτε τη δουλειά σας με το Arduino. Υπάρχουν τόνοι API διαθέσιμα στο Διαδίκτυο και με όλα αυτά μπορείτε να κάνετε έναν απεριόριστο αριθμό έργων. Ελπίζω ότι καταλάβατε το έργο και σας άρεσε να το φτιάξετε. Εάν είχατε αντιμετωπίσει κάποιο πρόβλημα, δημοσιεύστε τα στην παρακάτω ενότητα σχολίων ή στα φόρουμ μας.
Μπορείτε να βρείτε όλα τα σχετικά έργα ESP8266 εδώ.