- Απαιτούμενα στοιχεία
- Μονάδα Wi-Fi ESP8266
- Σύνδεση LPC2148 με ESP8266 για σειριακή επικοινωνία
- Διάγραμμα κυκλώματος και συνδέσεις
- Βήματα που εμπλέκονται στον προγραμματισμό UART0 στο LPC2148 για διασύνδεση ESP8266
- Έλεγχος των LED με χρήση ESP8266 IoT Webserver με LPC2148
Ο πομποδέκτης ESP8266 Wi-Fi παρέχει έναν τρόπο σύνδεσης ενός μικροελεγκτή στο δίκτυο. Χρησιμοποιείται ευρέως σε έργα IoT, καθώς είναι φθηνό, μικρό και εύκολο στη χρήση. Το έχουμε χρησιμοποιήσει προηγουμένως για τη δημιουργία διακομιστή ιστού χρησιμοποιώντας διακομιστή ιστού Raspberry και διακομιστή ιστού Arduino.
Σε αυτό το σεμινάριο θα συνδέσουμε ένα ESP8266 Wi-Fi Module με τον μικροελεγκτή ARM7-LPC2148 και θα δημιουργήσουμε έναν διακομιστή ιστού για τον έλεγχο του LED που είναι συνδεδεμένο στο LPC2148. Η ροή εργασίας θα έχει ως εξής:
- Στείλτε εντολές AT από LPC2148 στο ESP8266 για να διαμορφώσετε το ESP8266 σε λειτουργία AP
- Συνδέστε το φορητό υπολογιστή ή το Wi-Fi του υπολογιστή με το σημείο πρόσβασης ESP8266
- Δημιουργήστε μια ιστοσελίδα HTML σε υπολογιστή με διεύθυνση IP σημείου πρόσβασης του διακομιστή ιστού ESP8266
- Δημιουργήστε ένα πρόγραμμα για το LPC2148 για τον έλεγχο της λυχνίας LED σύμφωνα με την τιμή που λαμβάνεται από το ESP8266
Εάν είστε εντελώς νέος στο ESP8266 Wi-Fi module, επισκεφθείτε τους παρακάτω συνδέσμους για να εξοικειωθείτε με το ESP8266 Wi-Fi module
- Ξεκινώντας με τον πομποδέκτη ESP8266 Wi-Fi (Μέρος 1)
- Ξεκινώντας με ESP8266 (Μέρος 2): Χρήση εντολών AT
- Ξεκινώντας με ESP8266 (Μέρος 3): Προγραμματισμός ESP8266 με Arduino IDE και αναβοσβήνοντας τη μνήμη του
Απαιτούμενα στοιχεία
Σκεύη, εξαρτήματα:
- ARM7-LPC2148
- Ενότητα ESP8266 Wi-Fi
- FTDI (USB σε UART TTL)
- LED
- Ρυθμιστής τάσης 3.3V IC
- Ψωμί
Λογισμικό:
- KEIL uVision
- Flash Magic Tool
- Στόκος
Μονάδα Wi-Fi ESP8266
Το ESP8266 είναι μια μονάδα Wi-Fi χαμηλού κόστους που χρησιμοποιείται ευρέως για ενσωματωμένα έργα που απαιτεί χαμηλή ισχύ 3.3V. Χρησιμοποιεί μόνο δύο καλώδια TX και RX για σειριακή επικοινωνία και μεταφορά δεδομένων μεταξύ ESP8266 και οποιουδήποτε μικροελεγκτή με θύρα UART.
Καρφίτσωμα διάγραμμα για μονάδα Wi-Fi ESP8266
- GND, Γείωση (0 V)
- TX, Μετάδοση bit δεδομένων X
- GPIO 2, είσοδος / έξοδος γενικού σκοπού αρ. 2
- CH_PD, Chip power-down
- GPIO 0, είσοδος / έξοδος γενικού σκοπού αρ. 0
- RST, Επαναφορά
- RX, Λήψη bit δεδομένων X
- VCC, τάση (+3,3 V)
Ρύθμιση πλακέτας κυκλώματος ESP8266
Το ESP8266 απαιτεί συνεχή τροφοδοσία 3.3V και δεν είναι φιλικό προς το breadboard. Έτσι, στο προηγούμενο σεμινάριό μας για το ESP8266, δημιουργήσαμε μια πλακέτα κυκλώματος για ESP8266 με ρυθμιστή τάσης 3.3V, ένα πλήκτρο RESET και ρύθμιση jumper για εναλλαγή λειτουργιών (εντολή AT ή λειτουργία φλας). Μπορεί επίσης να ρυθμιστεί στο breadboard χωρίς τη χρήση της κάρτας perf.
Εδώ κολλήσαμε όλα τα εξαρτήματα στο breadboard για να φτιάξουμε τη δική μας πλακέτα Wi-Fi ESP8266
Μάθετε τη διασύνδεση του ESP8266 με διάφορους μικροελεγκτές ακολουθώντας τους παρακάτω συνδέσμους:
- Ξεκινώντας με ESP8266 (Μέρος 3): Προγραμματισμός ESP8266 με Arduino IDE και αναβοσβήνοντας τη μνήμη του
- Σύνδεση ESP8266 με STM32F103C8: Δημιουργία διακομιστή Web
- Αποστολή email με χρήση του MSP430 Launchpad και ESP8266
- Διασύνδεση ESP8266 με μικροελεγκτή PIC16F877A
- Παρακολούθηση Dumpster βάσει IOT με χρήση Arduino & ESP8266
Όλα τα έργα που βασίζονται στο ESP8266 βρίσκονται εδώ.
Σύνδεση LPC2148 με ESP8266 για σειριακή επικοινωνία
Για τη διασύνδεση του ESP8266 με το LPC2148 πρέπει να δημιουργήσουμε μια σειριακή επικοινωνία UART μεταξύ αυτών των δύο συσκευών για να στείλουμε εντολές AT από το LPC2148 στο ESP8266 για να διαμορφώσουμε τη μονάδα Wi-Fi ESP8266. Για να μάθετε περισσότερα σχετικά με τις εντολές ESP8266 AT ακολουθήστε τον σύνδεσμο.
Επομένως, για να χρησιμοποιήσουμε την επικοινωνία UART στο LPC2148 πρέπει να προετοιμάσουμε τη θύρα UART στο LPC2148. Το LPC2148 έχει δύο ενσωματωμένες θύρες UART (UART0 και UART1).
Καρφίτσες UART σε LPC2148
UART_Port |
TX_PIN |
RX_PIN |
UART0 |
P0.0 |
Σ0.1 |
UART1 |
P0.8 |
Σ0.9 |
Αρχικοποίηση UART0 στο LPC2148
Όπως γνωρίζουμε ότι οι ακίδες του LPC2148 είναι καρφίτσες γενικής χρήσης, οπότε πρέπει να χρησιμοποιήσουμε τον κωδικό PINSEL0 για τη χρήση του UART0. Πριν αρχικοποιήσετε το UART0 ενημερώστε σχετικά με αυτούς τους καταχωρητές UART που χρησιμοποιούνται στο LPC2148 για τη χρήση της δυνατότητας UART.
Οι καταχωρήσεις UART στο LPC2148
Ο παρακάτω πίνακας δείχνει μερικά σημαντικά μητρώα που χρησιμοποιούνται στον προγραμματισμό. Στα μελλοντικά μας σεμινάρια θα δούμε εν συντομία για άλλους καταχωρητές που χρησιμοποιούνται για το UART στο LPC2148.
x-0 για UART0 & x-1 για UART1:
ΚΑΝΩ ΕΓΓΡΑΦΗ |
ΕΓΓΡΑΦΕΙΤΕ ΟΝΟΜΑ |
ΧΡΗΣΗ |
UxRBR |
Λήψη Buffer Register |
Περιέχει πρόσφατα ληφθείσα τιμή |
UxTHR |
Αποστολή Μητρώου Εκμετάλλευσης |
Περιέχει δεδομένα προς μετάδοση |
UxLCR |
Μητρώο ελέγχου γραμμής |
Περιέχει μορφή πλαισίου UART (Αριθμός δεδομένων Bits, bit διακοπής) |
UxDLL |
Divisor Latch LSB |
LSB της τιμής γεννήτριας ρυθμού baud UART |
UxDLM |
Divisor Latch MSB |
MSB της τιμής γεννήτρια ρυθμού baud |
UxIER |
Διακοπή Ενεργοποίηση εγγραφής |
Χρησιμοποιείται για την ενεργοποίηση των πηγών διακοπής UART0 ή UART1 |
UxIIR |
Μητρώο ταυτοποίησης διακοπής |
Περιέχει τον κωδικό κατάστασης που έχει προτεραιότητα και πηγή διακοπών σε εκκρεμότητα |
Διάγραμμα κυκλώματος και συνδέσεις
Οι συνδέσεις μεταξύ LPC2148, ESP8266 και FTDI παρουσιάζονται παρακάτω
LPC2148 |
ESP8266 |
FTDI |
TX (P0.0) |
RX |
ΝΚ |
RX (P0.1) |
ΤΧ |
RX |
Το ESP8266 τροφοδοτείται μέσω ρυθμιστή τάσης 3.3V και το FTDI & LPC2148 τροφοδοτείται από USB.
Γιατί το FTDI είναι εδώ;Σε αυτό το σεμινάριο έχουμε συνδέσει τον πείρο RX του FTDI (USB σε UART TTL) με τον πείρο ESP8266 TX ο οποίος συνδέεται περαιτέρω με τον πείρο LPC2148 RX, έτσι ώστε να μπορούμε να δούμε την απόκριση της μονάδας ESP8266 χρησιμοποιώντας οποιοδήποτε τερματικό λογισμικό όπως putty, Arduino IDE. Αλλά για αυτό ορίστε το ρυθμό baud, σύμφωνα με το ρυθμό baud της μονάδας Wi-Fi ESP8266. (Ο ρυθμός Baud μου είναι 9600).
Βήματα που εμπλέκονται στον προγραμματισμό UART0 στο LPC2148 για διασύνδεση ESP8266
Ακολουθούν τα βήματα προγραμματισμού για τη σύνδεση του ESP8266 με το LPC2148, το οποίο θα το κάνει συμβατό με το IoT.
Βήμα 1: - Πρώτα πρέπει να προετοιμάσουμε τις ακίδες UART0 TX & RX στον καταχωρητή PINSEL0.
(P0.0 ως TX και P0.1 ως RX) PINSEL0 = PINSEL0 - 0x00000005;
Βήμα 2: - Στη συνέχεια στο U0LCR (Γραμμή ελέγχου γραμμής), ορίστε το DLAB (Divisor Latch Access Bit) στο 1 καθώς τους επιτρέπει και, στη συνέχεια, ορίστε κανένα bit διακοπής ως 1 και μήκος πλαισίου δεδομένων 8-bit.
U0LCR = 0x83;
Βήμα 3: - Τώρα σημαντικό βήμα που πρέπει να σημειωθεί είναι να ορίσετε τις τιμές U0DLL & U0DLM ανάλογα με την τιμή PCLK και τον επιθυμητό ρυθμό baud. Κανονικά για ESP8266 χρησιμοποιούμε ρυθμό baud 9600. Ας δούμε λοιπόν πώς να ορίσουμε ρυθμό baud 9600 για UART0.
Τύπος για τον υπολογισμό του ρυθμού baud:
Οπου, PLCK: Περιφερειακό ρολόι σε συχνότητα (MHz)
U0DLM, U0DLL: Μηχανές διαχωριστή γεννήτριας ρυθμού Baud
MULVAL, DIVADDVAL: Αυτοί οι καταχωρητές είναι τιμές δημιουργίας κλασμάτων
Για ρυθμό Baud 9600 με PCLK = 15MHZ
MULVAL = 1 & DIVADDVAL = 0
256 * U0DLM + U0DLL = 97.65
Έτσι U0DLM = 0 και παίρνουμε U0DLL = 97 (το κλάσμα δεν επιτρέπεται)
Χρησιμοποιούμε λοιπόν τον ακόλουθο κώδικα:
U0DLM = 0x00; U0DLL = 0x61; (Δεκαεξαδική τιμή 97)
Βήμα 4: - Τέλος, πρέπει να απενεργοποιήσουμε το DLA (Divisor Latch Access) σε 0 στο LCR.
Έτσι έχουμε
U0LCR & = 0x0F;
Βήμα 5: - Για μετάδοση ενός χαρακτήρα, φορτώστε το byte που θα σταλεί στο U0THR και περιμένετε μέχρι να μεταδοθεί το byte, το οποίο υποδεικνύεται από το THRE να γίνει ΥΨΗΛΟ.
άκυρο UART0_TxChar (char ch) { U0THR = ch; ενώ ((U0LSR & 0x40) == 0); }
Βήμα 6: - Για τη μετάδοση μιας συμβολοσειράς, χρησιμοποιείται η παρακάτω λειτουργία. Για την αποστολή δεδομένων συμβολοσειράς ένα προς ένα χρησιμοποιήσαμε τη συνάρτηση χαρακτήρων από το παραπάνω βήμα.
άκυρο UART0_SendString (char * str) { uint8_t i = 0; ενώ (str! = '\ 0') { UART0_TxChar (str); i ++; } }
Βήμα 7: - Για τη λήψη μιας συμβολοσειράς, χρησιμοποιείται μια συνήθης λειτουργία ρουτίνας διακοπής , επειδή μια μονάδα Wi-Fi ESP8266 θα μεταδίδει δεδομένα πίσω στον πείρο RX του LPC2148 κάθε φορά που στέλνουμε εντολή AT ή κάθε φορά που ένα ESP8266 στέλνει δεδομένα στο LPC2148, όπως στέλνουμε δεδομένα σε διακομιστή ιστού ESP8266.
Παράδειγμα: Όταν στέλνουμε εντολή AT στο ESP8266 από το LPC2148 ("AT \ r \ n") τότε λαμβάνουμε μια απάντηση "OK" από τη μονάδα Wi-Fi.
Χρησιμοποιούμε λοιπόν μια διακοπή εδώ για να ελέγξουμε την τιμή που λαμβάνεται από τη μονάδα Wi-Fi ESP8266 καθώς η ρουτίνα υπηρεσίας διακοπής ISR έχει την υψηλότερη προτεραιότητα.
Έτσι, κάθε φορά που ένα ESP8266 στέλνει δεδομένα σε ακροδέκτη RX του LPC2148, η διακοπή ρυθμίζεται και εκτελείται η λειτουργία ISR.
Βήμα 8: - Για να ενεργοποιήσετε τις διακοπές για UART0, χρησιμοποιήστε τον ακόλουθο κωδικό
Το VICintEnable είναι φορέας διακοπής ενεργοποίησης διανύσματος που χρησιμοποιείται για την ενεργοποίηση διακοπής για UART0.
VICIntEnable - = (1 << 6);
Το VICVecCnt10 είναι ένας καταχωρητής ελέγχου διακοπής με διανύσματα που εκχωρεί υποδοχή για UART0.
VICVectCntl0 = (1 << 5) - 6;
Στη συνέχεια, το VICVectaddr0 είναι ο φορέας διακοπής διανύσματος που έχει τη διεύθυνση ISR ρουτίνας υπηρεσίας διακοπής.
VICVectAddr0 = (χωρίς υπογραφή) UART0_ISR;
Στη συνέχεια, πρέπει να αντιστοιχίσουμε τη διακοπή για το RBR Receive buffer register. Έτσι στο Interrupt enabled register (U0IER) ορίσαμε για RBR. Έτσι, η ρουτίνα διακοπής υπηρεσίας (ISR) καλείται όταν λαμβάνουμε δεδομένα.
U0IER = IER_RBR;
Τέλος, έχουμε τη λειτουργία ISR που πρέπει να κάνει συγκεκριμένη εργασία όταν λαμβάνουμε δεδομένα από το ESP8266 Wi-Fi Module. Εδώ μόλις διαβάζουμε την ληφθείσα τιμή από το ESP8266 που υπάρχει στο U0RBR και αποθηκεύουμε αυτήν την τιμή στο UART0_BUFFER. Τέλος, στο τέλος του ISR, το VICVectAddr πρέπει να ρυθμιστεί με μηδενική ή εικονική τιμή.
άκυρο UART0_ISR () __irq { unsigned char IIRValue; IIRValue = U0IIR; IIRValue >> = 1; IIRValue & = 0x02; εάν (IIRValue == IIR_RDA) { UART_BUFFER = U0RBR; uart0_count ++; εάν (uart0_count == BUFFER_SIZE) { uart0_count = 0; } } VICVectAddr = 0x0; }
Βήμα 9: - Καθώς η μονάδα Wi-Fi ESP8266 πρέπει να ρυθμιστεί στη λειτουργία AP, πρέπει να στείλουμε τις σεβαστές εντολές AT από το LPC2148 χρησιμοποιώντας τη συνάρτηση UART0_SendString () .
Οι εντολές AT που αποστέλλονται στο ESP8266 από το LPC2148 αναφέρονται παρακάτω. Μετά την αποστολή κάθε εντολής AT, το ESP8266 αποκρίνεται με "OK"
1. Στέλνει AT σε ESP8266
UART0_SendString ("AT \ r \ n"); καθυστέρηση_ms (3000);
2. Στέλνει AT + CWMODE = 2 (Ρύθμιση ESP8266 σε λειτουργία AP).
UART0_SendString ("AT + CWMODE = 2 \ r \ n"); καθυστέρηση_ms (3000);
3. Στέλνει AT + CIFSR (Για λήψη IP από AP)
UART0_SendString ("AT + CIFSR \ r \ n"); καθυστέρηση_ms (3000);
4. Στέλνει AT + CIPMUX = 1 (Για πολλαπλές συνδέσεις)
UART0_SendString ("AT + CIPMUX = 1 \ r \ n"); καθυστέρηση_ms (3000);
5. Στέλνει AT + CIPSERVER = 1,80 (Για ΕΝΕΡΓΟΠΟΙΗΣΗ ESP8266 SERVER με ΑΝΟΙΧΤΟ ΛΙΜΕΝΑ)
UART0_SendString ("AT + CIPSERVER = 1,80 \ r \ n"); καθυστέρηση_ms (3000);
Προγραμματισμός και αναβοσβήνει αρχείο Hex στο LPC2148
Για να προγραμματίσουμε το ARM7-LPC2148 χρειαζόμαστε keil uVision & Flash Magic εργαλείο. Ένα καλώδιο USB χρησιμοποιείται εδώ για τον προγραμματισμό του ARM7 Stick μέσω θύρας micro USB. Γράφουμε κώδικα χρησιμοποιώντας το Keil και δημιουργούμε ένα hex αρχείο και στη συνέχεια το αρχείο HEX αναβοσβήνει στο ARM7 stick χρησιμοποιώντας το Flash Magic. Για να μάθετε περισσότερα σχετικά με την εγκατάσταση του keil uVision και του Flash Magic και πώς να τα χρησιμοποιήσετε, ακολουθήστε τον σύνδεσμο Ξεκινώντας με τον μικροελεγκτή ARM7 LPC2148 και προγραμματίστε τον χρησιμοποιώντας το Keil uVision.
Πλήρες πρόγραμμα δίνεται στο τέλος του σεμιναρίου.
Σημείωση: Κατά τη μεταφόρτωση του αρχείου HEX στο LPC2148 δεν πρέπει να τροφοδοτείτε τη μονάδα Wi-Fi ESP8266 και τη μονάδα FTDI που είναι συνδεδεμένη με το LPC2148.
Έλεγχος των LED με χρήση ESP8266 IoT Webserver με LPC2148
Βήμα 1: - Μετά τη μεταφόρτωση του αρχείου HEX στο LPC2148, συνδέστε τη μονάδα FTDI σε υπολογιστή μέσω καλωδίου USB και ανοίξτε το λογισμικό τερματικού στόκου.
Επιλέξτε Serial και μετά επιλέξτε τη θύρα COM σύμφωνα με τον υπολογιστή σας ή το δικό μου LAPTOP (COM3). Ο ρυθμός baud είναι 9600.
Βήμα 2: - Τώρα επαναφέρετε το ESP8266 Wi-Fi Module ή απλώς POWER OFF και POWER ON σε αυτό, το putty terminal θα δείξει την απόκριση της μονάδας Wi-Fi ESP8266 όπως φαίνεται παρακάτω. \
Βήμα 3: - Τώρα πατήστε το κουμπί RESET στο LPC2148. Μετά από αυτό το LPC2148 αρχίζει να στέλνει εντολές AT στο ESP8266. Μπορούμε να δούμε την απάντηση αυτού στο τερματικό στόκος.
Βήμα 4: - Όπως μπορείτε να δείτε στην παραπάνω εικόνα, το ESP8266 έχει ρυθμιστεί στο MODE 2 που είναι λειτουργία AP και η διεύθυνση του APIP είναι 192.168.4.1. Σημειώστε αυτήν τη διεύθυνση επειδή αυτή η διεύθυνση θα είναι κωδικοποιημένη στον κώδικα HTML της ιστοσελίδας για τον έλεγχο της λυχνίας LED που είναι συνδεδεμένη στο LPC2148.
Σημαντικό : Όταν το ESP8266 βρίσκεται σε λειτουργία AP, πρέπει να συνδέσετε τον υπολογιστή σας με το ESP8266 AP. Δείτε την παρακάτω εικόνα στην ενότητα ESP8266 που δείχνει το AP στο όνομα ESP_06217B (Είναι ανοιχτό και δεν έχει κωδικό πρόσβασης).
Βήμα 5: - Μετά τη σύνδεση του υπολογιστή με το ESP8266 AP, ανοίξτε ένα σημειωματάριο και αντιγράψτε-επικολλήστε την ακόλουθη ιστοσελίδα προγράμματος HTML. Βεβαιωθείτε ότι έχετε αλλάξει τη διεύθυνση APIP σύμφωνα με τη μονάδα Wi-Fi ESP8266
Καλώς ορίσατε στο Circuit Digest
ESP8266 Διασύνδεση με LPC2148: Δημιουργία διακομιστή Web για έλεγχο ενός LED
LED ON LED OFFΣε αυτήν τη σελίδα HTML, δημιουργήσαμε δύο κουμπιά υπερσύνδεσης για να ενεργοποιήσετε και να απενεργοποιήσετε το LED από την ιστοσελίδα.
Τέλος, αποθηκεύστε το έγγραφο του σημειωματάριου ως επέκταση .html
Η ιστοσελίδα θα εμφανίζεται όπως παρακάτω στο πρόγραμμα περιήγησης ιστού.
Εδώ είναι η διεύθυνση IP IP 192.168.4.1 και στέλνουμε τιμές @ και% για να ενεργοποιήσετε και να απενεργοποιήσετε το LED χρησιμοποιώντας αυτήν τη λογική παρακάτω στο LPC2148.
ενώ (1) { if (uart0_count! = 0) { COMMAND = UART0_BUFFER; if (COMMAND == LEDON) // Λογική για ενεργοποίηση ή απενεργοποίηση της λυχνίας LED ανάλογα με τη ληφθείσα τιμή από το ESP8266 { IOSET1 = (1 << 20); // Ορίζει OUTPUT HIGH delay_ms (100); } αλλιώς εάν (COMMAND == LEDOFF) { IOCLR1 = (1 << 20); // Ορίζει OUTPUT LOW delay_ms (100); } } }
Αυτός είναι ο τρόπος με τον οποίο μια συσκευή μπορεί να ελεγχθεί εξ αποστάσεως χρησιμοποιώντας ESP8266 και ARM7 μικροελεγκτή LPC2148. Ο πλήρης κώδικας και το βίντεο εξήγησης δίνονται παρακάτω.