- Komponenter, der kræves
- ESP8266 Wi-Fi-modul
- Tilslutning af LPC2148 med ESP8266 til seriel kommunikation
- Kredsløbsdiagram og forbindelser
- Trin involveret i programmering af UART0 i LPC2148 til grænseflade mellem ESP8266
- Styring af LED ved hjælp af ESP8266 IoT Webserver med LPC2148
ESP8266 Wi-Fi-transceiver giver en måde at forbinde en mikrocontroller til netværket. Det bruges i vid udstrækning i IoT-projekter, da det er billigt, lille og let at bruge. Vi har tidligere brugt det til at oprette webserver ved hjælp af Raspberry webserver og Arduino webserver.
I denne vejledning interagerer vi et ESP8266 Wi-Fi-modul med ARM7-LPC2148 mikrokontroller og opretter en webserver til styring af LED tilsluttet LPC2148. Workflowet vil gå sådan her:
- Send AT-kommandoer fra LPC2148 til ESP8266 for at konfigurere ESP8266 i AP-tilstand
- Forbind den bærbare eller computerens Wi-Fi med ESP8266-adgangspunktet
- Opret en HTML-webside på pc med adgangspunktets IP-adresse på ESP8266-webserveren
- Opret et program til LPC2148 til styring af LED i henhold til den værdi, der modtages fra ESP8266
Hvis dit helt nye til ESP8266 Wi-Fi-modul besøg nedenstående links for at blive fortrolig med ESP8266 Wi-Fi-modulet.
- Kom godt i gang med ESP8266 Wi-Fi Transceiver (del 1)
- Kom godt i gang med ESP8266 (del 2): Brug af AT-kommandoer
- Kom godt i gang med ESP8266 (del 3): Programmering af ESP8266 med Arduino IDE og blinkende hukommelse
Komponenter, der kræves
Hardware:
- ARM7-LPC2148
- ESP8266 Wi-Fi-modul
- FTDI (USB til UART TTL)
- LED
- 3,3 V spændingsregulator IC
- Brødbræt
Software:
- KEIL uVision
- Flash Magic Tool
- Putty
ESP8266 Wi-Fi-modul
ESP8266 er et bredt anvendt Wi-Fi-modul til indlejrede projekter, der kræver en lav effekt på 3,3 V. Den bruger kun to ledninger TX og RX til seriel kommunikation og dataoverførsel mellem ESP8266 og enhver mikrokontroller, der har UART-port.
Pin-diagram til ESP8266 Wi-Fi-modul
- GND, jord (0 V)
- TX, transmitter databit X
- GPIO 2, generel input / output nr. 2
- CH_PD, Chip-nedlukning
- GPIO 0, generel input / output nr. 0
- RST, Nulstil
- RX, Modtag databit X
- VCC, spænding (+3,3 V)
Opsætning af ESP8266 printkort
ESP8266 kræver en konstant forsyning på 3,3 V, og den er ikke breadboard-venlig. Så i vores tidligere vejledning om ESP8266 lavede vi et kredsløbskort til ESP8266 med 3,3 V spændingsregulator, en RESET-trykknap og jumperopsætning til at skifte tilstande (AT-kommando eller flash-tilstand). Det kan også konfigureres på breadboard uden brug af perf board.
Her lodde vi alle komponenterne på brødbrættet for at lave vores eget ESP8266 Wi-Fi-kort
Lær grænseflade mellem ESP8266 og forskellige mikrocontrollere ved at følge nedenstående links:
- Kom godt i gang med ESP8266 (del 3): Programmering af ESP8266 med Arduino IDE og blinkende hukommelse
- Tilslutning af ESP8266 med STM32F103C8: Oprettelse af en webserver
- Afsendelse af e-mail ved hjælp af MSP430 Launchpad og ESP8266
- Interfacing ESP8266 med PIC16F877A Microcontroller
- IOT-baseret Dumpster-overvågning ved hjælp af Arduino & ESP8266
Alle ESP8266-baserede projekter kan findes her.
Tilslutning af LPC2148 med ESP8266 til seriel kommunikation
For at interface ESP8266 med LPC2148 skal vi etablere en UART seriel kommunikation mellem disse to enheder for at sende AT-kommandoer fra LPC2148 til ESP8266 for at konfigurere ESP8266 Wi-Fi-modulet. Hvis du vil vide mere om ESP8266 AT-kommandoer, skal du følge linket.
Så for at bruge UART-kommunikation i LPC2148 er vi nødt til at initialisere UART-porten i LPC2148. LPC2148 har to indbyggede UART-porte (UART0 og UART1).
UART Pins i LPC2148
UART_Port |
TX_PIN |
RX_PIN |
UART0 |
P0.0 |
P0.1 |
UART1 |
P0.8 |
P0.9 |
Initialisering af UART0 i LPC2148
Som vi ved, at benene på LPC2148 er pins til generelle formål, så vi er nødt til at bruge PINSEL0-registret til brug af UART0. Før UART0 initialiseres, kan du vide om disse UART-registre, der bruges i LPC2148 til brug af UART-funktionen.
UART registrerer sig i LPC2148
Nedenstående tabel viser nogle vigtige registre, der bruges til programmering. I vores fremtidige tutorials vil vi se kort om andre registre, der bruges til UART i LPC2148.
x-0 til UART0 og x-1 til UART1:
TILMELD |
REGISTRER NAVN |
BRUG |
UxRBR |
Modtag bufferregister |
Indeholder nyligt modtaget værdi |
UxTHR |
Send holdingsregister |
Indeholder data, der skal overføres |
UxLCR |
Liniekontrolregister |
Indeholder UART-rammeformat (antal databits, stopbit) |
UxDLL |
Divisor Latch LSB |
LSB af UART baudrate generator værdi |
UxDLM |
Divisor Latch MSB |
MSB af UART baud rate generator værdi |
UxIER |
Afbryd aktiver register |
Det bruges til at aktivere UART0 eller UART1 afbrydelseskilder |
UxIIR |
Afbryd identifikationsregister |
Den indeholder den statuskode, der har prioritet og kilde til afventende afbrydelser |
Kredsløbsdiagram og forbindelser
Forbindelser mellem LPC2148, ESP8266 og FTDI er vist nedenfor
LPC2148 |
ESP8266 |
FTDI |
TX (P0.0) |
RX |
NC |
RX (P0.1) |
TX |
RX |
ESP8266 får strøm via en 3,3 V spændingsregulator, og FTDI & LPC2148 får strøm fra USB.
Hvorfor FTDI er her?I denne vejledning har vi tilsluttet RX-stiften på FTDI (USB til UART TTL) til ESP8266 TX-stiften, som yderligere er forbundet til LPC2148 RX-stiften, så vi kan se svaret fra ESP8266-modulet ved hjælp af enhver terminalsoftware som kitt, Arduino IDE. Men for det indstilles baudhastigheden i henhold til baudhastigheden på ESP8266 Wi-Fi-modulet. (Min baudrate er 9600).
Trin involveret i programmering af UART0 i LPC2148 til grænseflade mellem ESP8266
Nedenfor er programmeringstrinnene til at forbinde ESP8266 med LPC2148, hvilket gør det IoT-kompatibelt.
Trin 1: - Først skal vi initialisere UART0 TX & RX-benene i PINSEL0-registret.
(P0.0 som TX og P0.1 som RX) PINSEL0 = PINSEL0 - 0x00000005;
Trin 2: - Derefter skal du i U0LCR (Line Control Register) indstille DLAB (Divisor Latch Access Bit) til 1, da det muliggør dem, og derefter indstille antallet af stopbits som 1 og datarammelængden på 8-bit.
U0LCR = 0x83;
Trin 3: - Nu er vigtigt trin, der skal bemærkes, at indstille værdierne for U0DLL & U0DLM afhængigt af PCLK-værdien og den ønskede baudrate. Normalt til ESP8266 bruger vi baudrate på 9600. Så lad os se, hvordan man indstiller 9600 baud rate for UART0.
Formel til beregning af baudrate:
Hvor, PLCK: Perifert ur i frekvens (MHz)
U0DLM, U0DLL: Deleregistre for overførselshastighedsgenerator
MULVAL, DIVADDVAL: Disse registre er fraktionsgeneratorværdier
Til baudrate 9600 med PCLK = 15MHZ
MULVAL = 1 & DIVADDVAL = 0
256 * U0DLM + U0DLL = 97,65
Så U0DLM = 0, og vi får U0DLL = 97 (Brøk ikke tilladt)
Så vi bruger følgende kode:
U0DLM = 0x00; U0DLL = 0x61; (Hexadecimal værdi på 97)
Trin 4: - Endelig skal vi gøre DLA (Divisor Latch Access) deaktiveret indstillet til 0 i LCR.
Så det har vi gjort
U0LCR & = 0x0F;
Trin 5: - For transmission af et tegn skal du indlæse den byte, der skal sendes i U0THR, og vente, indtil byten transmitteres, hvilket er angivet ved, at TRE bliver HØJ.
ugyldigt UART0_TxChar (char ch) { U0THR = ch; mens ((U0LSR & 0x40) == 0); }
Trin 6: - Til transmission af en streng benyttes nedenstående funktion. For at sende strengdata en efter en brugte vi tegnfunktionen fra ovenstående trin.
ugyldigt UART0_SendString (char * str) { uint8_t i = 0; mens (str! = '\ 0') { UART0_TxChar (str); i ++; } }
Trin 7: - Til modtagelse af en streng bruges afbrydelsesrutinefunktion her, fordi et ESP8266 Wi-Fi-modul sender data tilbage til RX-stiften på LPC2148, hver gang vi sender AT-kommando, eller når et ESP8266 sender data til LPC2148, som vi sender data til en webserver af ESP8266.
Eksempel: Når vi sender AT-kommando til ESP8266 fra LPC2148 (“AT \ r \ n”), får vi et svar “OK” fra Wi-Fi-modulet.
Så vi bruger en afbrydelse her for at kontrollere den værdi, der modtages fra ESP8266 Wi-Fi-modulet, da ISR-afbrydelsesrutinen har højeste prioritet.
Så når en ESP8266 sender data til RX-pin på LPC2148, indstilles afbrydelsen, og ISR-funktionen udføres.
Trin 8: - Brug følgende kode for at aktivere afbrydelser for UART0
Den VICintEnable er vektoriseret interrupt muliggøre register anvendes til at muliggøre interrupt for UART0.
VICIntEnable - = (1 << 6);
Den VICVecCnt10 er vektoriseret interrupt kontrol register, allokerer slot til UART0.
VICVectCntl0 = (1 << 5) - 6;
Dernæst er VICVectaddr0 et vektoreret afbrydelsesadresseregister, der har afbrydelsesrutinens ISR-adresse.
VICVectAddr0 = (usigneret) UART0_ISR;
Derefter er vi nødt til at tildele afbrydelsen til RBR Receive buffer register. Så i Interrupt enable register (U0IER) satte vi os for RBR. Så kaldes interrupt service rutine (ISR), når vi modtager data.
U0IER = IER_RBR;
Endelig har vi ISR-funktionen, der skal udføre en bestemt opgave, når vi modtager data fra ESP8266 Wi-Fi-modul. Her læser vi netop den modtagne værdi fra ESP8266, der er til stede i U0RBR, og gemmer disse værdier i UART0_BUFFER. Endelig i slutningen af ISR skal VICVectAddr indstilles med nul- eller dummy-værdi.
ugyldigt UART0_ISR () __irq { usigneret char IIRValue; IIRVærdi = U0IIR; IIRVærdi >> = 1; IIRVærdi & = 0x02; hvis (IIRValue == IIR_RDA) { UART_BUFFER = U0RBR; uart0_count ++; hvis (uart0_count == BUFFER_SIZE) { uart0_count = 0; } } VICVectAddr = 0x0; }
Trin 9: - Da ESP8266 Wi-Fi-modul skal indstilles i AP-tilstand, er vi nødt til at sende de respekterede AT-kommandoer fra LPC2148 ved hjælp af funktionen UART0_SendString () .
De AT-kommandoer, der sendes til ESP8266 fra LPC2148 er nævnt nedenfor. Efter afsendelse af hver AT-kommando svarer ESP8266 med "OK"
1. Sender AT til ESP8266
UART0_SendString ("AT \ r \ n"); forsinkelse_ms (3000);
2. Sender AT + CWMODE = 2 (Indstilling af ESP8266 i AP-tilstand).
UART0_SendString ("AT + CWMODE = 2 \ r \ n"); forsinkelse_ms (3000);
3. Sender AT + CIFSR (For at få IP af AP)
UART0_SendString ("AT + CIFSR \ r \ n"); forsinkelse_ms (3000);
4. Sender AT + CIPMUX = 1 (til flere forbindelser)
UART0_SendString ("AT + CIPMUX = 1 \ r \ n"); forsinkelse_ms (3000);
5. Sender AT + CIPSERVER = 1,80 (For AKTIVERING af ESP8266 SERVER med ÅBEN PORT)
UART0_SendString ("AT + CIPSERVER = 1,80 \ r \ n"); forsinkelse_ms (3000);
Programmering og blinkende hexfil til LPC2148
For at programmere ARM7-LPC2148 har vi brug for keil uVision & Flash Magic værktøj. Her bruges et USB-kabel til at programmere ARM7 Stick via mikro-USB-port. Vi skriver kode ved hjælp af Keil og opretter en hex-fil, og derefter blinkes HEX-filen til ARM7-stick ved hjælp af Flash Magic. Hvis du vil vide mere om installation af keil uVision og Flash Magic, og hvordan du bruger dem, skal du følge linket Kom godt i gang med ARM7 LPC2148 Microcontroller og programmer det ved hjælp af Keil uVision.
Komplet program gives i slutningen af vejledningen.
Bemærk: Når du uploader HEX-fil til LPC2148, må du ikke tænde for ESP8266 Wi-Fi-modulet og FTDI-modulet, der er forbundet med LPC2148.
Styring af LED ved hjælp af ESP8266 IoT Webserver med LPC2148
Trin 1: - Efter at have uploadet HEX-filen til LPC2148, skal du slutte FTDI-modulet til pc'en via et USB-kabel og åbne kitteterminalsoftwaren.
Vælg Serial, og vælg derefter COM-porten i henhold til din pc eller LAPTOP-mine var (COM3). Baudhastigheden er 9600.
Trin 2: - Nulstil nu ESP8266 Wi-Fi-modulet eller bare POWER OFF og POWER ON det igen, kitteterminalen viser svaret fra ESP8266 Wi-Fi-modulet som vist nedenfor. \
Trin 3: - Tryk nu på RESET-knappen på LPC2148. Derefter begynder LPC2148 at sende AT-kommandoer til ESP8266. Vi kan se svaret på det i kitteterminalen.
Trin 4: - Som du kan se på billedet ovenfor er ESP8266 indstillet i MODE 2, der er AP-tilstand, og adressen på APIP er 192.168.4.1. Bemærk denne adresse, fordi denne adresse vil blive hårdt kodet på websiden HTML-kode for at styre den LED, der er tilsluttet LPC2148.
Vigtigt : Når ESP8266 er i AP-tilstand, skal du slutte din pc til ESP8266 AP. Se billedet nedenfor, mit ESP8266-modul viser AP i navnet ESP_06217B (det er åbent og har ingen adgangskode).
Trin 5: - Efter tilslutning af pc'en til ESP8266 AP, skal du åbne en notesblok og kopiere og indsætte følgende HTML- programwebside. Sørg for at ændre APIP-adressen i henhold til dit ESP8266 Wi-Fi-modul
Velkommen til Circuit Digest
ESP8266 Interfacing med LPC2148: Oprettelse af webserver til styring af en LED
LED TIL LED FRAPå denne HTML-side har vi oprettet to hyperlinkede knapper til at tænde og slukke for LED fra websiden.
Gem endelig notesblokdokumentet som.html- udvidelse
Websiden vises som nedenfor i webbrowseren.
Her er adressen AP IP-adressen 192.168.4.1, og vi sender værdier @ og% for at tænde og slukke for LED ved hjælp af denne logik nedenfor i LPC2148.
mens (1) { if (uart0_count! = 0) { COMMAND = UART0_BUFFER; hvis (COMMAND == LEDON) // Logik til at indstille LED ON eller OFF afhængigt af den modtagne værdi fra ESP8266 { IOSET1 = (1 << 20); // Sætter OUTPUT HIGH delay_ms (100); } ellers hvis (COMMAND == LEDOFF) { IOCLR1 = (1 << 20); // Sætter OUTPUT LOW delay_ms (100); } } }
Sådan kan en enhed fjernstyres ved hjælp af ESP8266 og ARM7 mikrokontroller LPC2148. Komplet kode og forklaringsvideo er angivet nedenfor.