- Komponenter kreves
- ESP8266 Wi-Fi-modul
- Kobler LPC2148 med ESP8266 for seriell kommunikasjon
- Kretsdiagram og tilkoblinger
- Trinn involvert i programmering av UART0 i LPC2148 for grensesnitt ESP8266
- Kontrollere LED-en ved hjelp av ESP8266 IoT Webserver med LPC2148
ESP8266 Wi-Fi-mottaker gir en måte å koble en mikrokontroller til nettverket. Den brukes mye i IoT-prosjekter, da den er billig, liten og enkel å bruke. Vi har tidligere brukt den til å lage webserver ved hjelp av Raspberry webserver og Arduino webserver.
I denne opplæringen vil vi grensesnitt en ESP8266 Wi-Fi-modul med ARM7-LPC2148 mikrokontroller og opprette en webserver for å kontrollere LED-en som er koblet til LPC2148. Arbeidsflyten vil gå slik:
- Send AT-kommandoer fra LPC2148 til ESP8266 for å konfigurere ESP8266 i AP-modus
- Koble den bærbare eller datamaskinens Wi-Fi med ESP8266-tilgangspunktet
- Opprett en HTML-webside på PC med tilgangspunktets IP-adresse til ESP8266-webserveren
- Lag et program for LPC2148 for å kontrollere LED-lampen i henhold til verdien du mottok fra ESP8266
Hvis du er helt ny på ESP8266 Wi-Fi-modulen, kan du gå til linkene nedenfor for å bli kjent med ESP8266 Wi-Fi-modulen.
- Komme i gang med ESP8266 Wi-Fi-mottaker (del 1)
- Komme i gang med ESP8266 (del 2): Bruke AT-kommandoer
- Komme i gang med ESP8266 (del 3): Programmering av ESP8266 med Arduino IDE og blinkende minne
Komponenter kreves
Maskinvare:
- ARM7-LPC2148
- ESP8266 Wi-Fi-modul
- FTDI (USB til UART TTL)
- LED
- 3,3V spenningsregulator IC
- Brettbrett
Programvare:
- KEIL uVision
- Flash Magic Tool
- Putty
ESP8266 Wi-Fi-modul
ESP8266 er en billig Wi-Fi-modul for innebygde prosjekter som krever lav effekt på 3,3 V. Den bruker bare to ledninger TX og RX for seriell kommunikasjon og dataoverføring mellom ESP8266 og en hvilken som helst mikrokontroller som har UART-port.
Pin-diagram for ESP8266 Wi-Fi-modul
- GND, jord (0 V)
- TX, Overfør databit X
- GPIO 2, generell inngang / utgang nr. 2
- CH_PD, nedlasting av chip
- GPIO 0, generell inngang / utgang nr. 0
- RST, Tilbakestill
- RX, motta databit X
- VCC, spenning (+3,3 V)
Sette opp ESP8266 kretskort
ESP8266 krever en konstant forsyning på 3,3 V, og det er ikke brødbordvennlig. Så i vår forrige opplæring om ESP8266 laget vi et kretskort for ESP8266 med 3,3 V spenningsregulator, en RESET-trykknapp og jumperoppsett for å bytte modus (AT-kommando eller blitsmodus). Det kan også settes opp på breadboard uten å bruke perf board.
Her loddet vi alle komponentene på brødbrettet for å lage vårt eget ESP8266 Wi-Fi-kort
Lær grensesnitt mellom ESP8266 og forskjellige mikrokontrollere ved å følge koblingene nedenfor:
- Komme i gang med ESP8266 (del 3): Programmering av ESP8266 med Arduino IDE og blinkende minne
- Koble ESP8266 til STM32F103C8: Opprette en webserver
- Sende e-post ved hjelp av MSP430 Launchpad og ESP8266
- Grensesnitt ESP8266 med PIC16F877A Microcontroller
- IOT-basert dumperovervåking ved hjelp av Arduino & ESP8266
Alle ESP8266-baserte prosjekter finner du her.
Kobler LPC2148 med ESP8266 for seriell kommunikasjon
For å koble ESP8266 til LPC2148 må vi etablere en UART seriell kommunikasjon mellom disse to enhetene for å sende AT-kommandoer fra LPC2148 til ESP8266 for å konfigurere ESP8266 Wi-Fi-modulen. For å vite mer om ESP8266 AT-kommandoer, følg lenken.
Så for å kunne bruke UART-kommunikasjon i LPC2148, må vi initialisere UART-porten i LPC2148. LPC2148 har to innebygde UART-porter (UART0 og UART1).
UART Pins i LPC2148
UART_Port |
TX_PIN |
RX_PIN |
UART0 |
P0.0 |
P0.1 |
UART1 |
P0.8 |
P0.9 |
Initialiserer UART0 i LPC2148
Som vi vet at pinnene til LPC2148 er pinner til generelle formål, så vi må bruke PINSEL0-registeret for å bruke UART0. Før UART0 initialiseres, kan du få vite om disse UART-registerene som brukes i LPC2148 for bruk av UART-funksjonen.
UART registrerer seg i LPC2148
Tabellen nedenfor viser noen viktige registre som brukes i programmering. I våre fremtidige veiledninger vil vi se kort om andre registre som brukes til UART i LPC2148.
x-0 for UART0 og x-1 for UART1:
REGISTRERE |
REGISTRER NAVN |
BRUK |
UxRBR |
Motta bufferregister |
Inneholder nylig mottatt verdi |
UxTHR |
Overfør Holding Register |
Inneholder data som skal overføres |
UxLCR |
Linjekontrollregister |
Inneholder UART-rammeformat (Antall databiter, stoppbit) |
UxDLL |
Divisor Latch LSB |
LSB av verdien for UART-overføringshastighetsgenerator |
UxDLM |
Divisor Latch MSB |
MSB av verdien for UART-overføringshastighetsgenerator |
UxIER |
Avbryt Aktiver Register |
Den brukes til å aktivere UART0 eller UART1 avbruddskilder |
UxIIR |
Avbryt identifikasjonsregister |
Den inneholder statuskoden som har prioritet og kilde til ventende avbrudd |
Kretsdiagram og tilkoblinger
Forbindelser mellom 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 fra en 3,3V spenningsregulator, og FTDI & LPC2148 får strøm fra USB.
Hvorfor FTDI er her?I denne opplæringen har vi koblet RX-pinnen til FTDI (USB til UART TTL) til ESP8266 TX-pinnen som videre er koblet til LPC2148 RX-pinnen, slik at vi kan se responsen til ESP8266-modulen ved hjelp av hvilken som helst terminalprogramvare som kitt, Arduino IDE. Men for det, angi overføringshastigheten i henhold til overføringshastigheten til ESP8266 Wi-Fi-modulen. (Min overføringshastighet er 9600).
Trinn involvert i programmering av UART0 i LPC2148 for grensesnitt ESP8266
Nedenfor er programmeringstrinnene for å koble ESP8266 til LPC2148, som vil gjøre det IoT-kompatibelt.
Trinn 1: - Først må vi initialisere UART0 TX & RX-pinnene i PINSEL0-registeret.
(P0.0 som TX og P0.1 som RX) PINSEL0 = PINSEL0 - 0x00000005;
Trinn 2: - Sett deretter i U0LCR (Line Control Register), sett DLAB (Divisor Latch Access Bit) til 1, da det aktiverer dem, og sett deretter antall stoppbiter som 1 og datarammelengden på 8-bit.
U0LCR = 0x83;
Trinn 3: - Nå er viktig trinn å merke seg å sette verdiene til U0DLL & U0DLM avhengig av PCLK-verdien og ønsket baudrate. Normalt bruker vi baudrate på 9600 for ESP8266. Så la oss se hvordan du setter 9600 baudrate for UART0.
Formel for beregning av baudrate:
Hvor, PLCK: Perifer klokke i frekvens (MHz)
U0DLM, U0DLL: Deleregister for overføringshastighetsgenerator
MULVAL, DIVADDVAL: Disse registerene er brøkgeneratorverdier
For overføringshastighet 9600 med PCLK = 15 MHz
MULVAL = 1 & DIVADDVAL = 0
256 * U0DLM + U0DLL = 97,65
Så U0DLM = 0 og vi får U0DLL = 97 (Brøk ikke tillatt)
Så vi bruker følgende kode:
U0DLM = 0x00; U0DLL = 0x61; (Heksadesimal verdi på 97)
Trinn 4: - Til slutt må vi gjøre DLA (Divisor Latch Access) deaktivert satt til 0 i LCR.
Så det har vi gjort
U0LCR & = 0x0F;
Trinn 5: - For sending av et tegn, last inn byten som skal sendes i U0THR og vent til byten blir overført, noe som er indikert ved at TRE blir HØY.
ugyldig UART0_TxChar (char ch) { U0THR = ch; mens ((U0LSR & 0x40) == 0); }
Trinn 6: - For å overføre en streng brukes funksjonen nedenfor. For å sende strengdata en etter en, brukte vi tegnfunksjonen fra trinn ovenfor.
ugyldig UART0_SendString (char * str) { uint8_t i = 0; mens (str! = '\ 0') { UART0_TxChar (str); i ++; } }
Trinn 7: - For å motta en streng brukes avbruddsrutinefunksjon her fordi en ESP8266 Wi-Fi-modul vil overføre data tilbake til RX-pinnen til LPC2148 når vi sender AT-kommando eller når en ESP8266 sender data til LPC2148, som vi sender data til en webserver av ESP8266.
Eksempel: Når vi sender AT-kommando til ESP8266 fra LPC2148 (“AT \ r \ n”), får vi svaret “OK” fra Wi-Fi-modulen.
Så vi bruker et avbrudd her for å sjekke verdien mottatt fra ESP8266 Wi-Fi-modulen, da rutinen for ISR-avbruddstjeneste har høyest prioritet.
Så når en ESP8266 sender data til RX-pin på LPC2148, blir avbruddet satt og ISR-funksjonen blir utført.
Trinn 8: - For å aktivere avbrudd for UART0, bruk følgende kode
Den VICintEnable er vektorsummen interrupt enable register anvendt for å aktivere avbrytelse for UART0.
VICIntEnable - = (1 << 6);
Den VICVecCnt10 er vektorsummen av avbruddsstyreregister som tildeler spor for UART0.
VICVectCntl0 = (1 << 5) - 6;
Deretter er VICVectaddr0 et vektorisert avbruddsadresseregister som har avbruddsrutinens ISR-adresse.
VICVectAddr0 = (usignert) UART0_ISR;
Deretter må vi tilordne avbrudd for RBR Receive buffer register. Så i Interrupt enable register (U0IER) satte vi oss for RBR. Slik at interrupt service routine (ISR) kalles når vi mottar data.
U0IER = IER_RBR;
Til slutt har vi ISR-funksjonen som må utføre en viss oppgave når vi mottar data fra ESP8266 Wi-Fi Module. Her leser vi bare den mottatte verdien fra ESP8266 som er tilstede i U0RBR og lagrer disse verdien i UART0_BUFFER. Endelig på slutten av ISR, bør VICVectAddr settes med null eller dummy-verdi.
ugyldig UART0_ISR () __irq { usignert røye IIRValue; IIRValue = U0IIR; IIR-verdi >> = 1; IIRValue & = 0x02; hvis (IIRValue == IIR_RDA) { UART_BUFFER = U0RBR; uart0_count ++; hvis (uart0_count == BUFFER_SIZE) { uart0_count = 0; } } VICVectAddr = 0x0; }
Trinn 9: - Ettersom ESP8266 Wi-Fi-modulen skal settes i AP-modus, må vi sende de respekterte AT-kommandoene fra LPC2148 ved å bruke UART0_SendString () -funksjonen.
Den AT-kommandoer som sendes til ESP8266 fra LPC2148 er nevnt nedenfor. Etter å ha sendt hver AT-kommando, svarer ESP8266 med “OK”.
1. Sender AT til ESP8266
UART0_SendString ("AT \ r \ n"); delay_ms (3000);
2. Sender AT + CWMODE = 2 (stiller ESP8266 i AP-modus).
UART0_SendString ("AT + CWMODE = 2 \ r \ n"); delay_ms (3000);
3. Sender AT + CIFSR (For å få IP av AP)
UART0_SendString ("AT + CIFSR \ r \ n"); delay_ms (3000);
4. Sender AT + CIPMUX = 1 (for flere tilkoblinger)
UART0_SendString ("AT + CIPMUX = 1 \ r \ n"); delay_ms (3000);
5. Sender AT + CIPSERVER = 1,80 (For AKTIVERING av ESP8266 SERVER med ÅPEN PORT)
UART0_SendString ("AT + CIPSERVER = 1,80 \ r \ n"); delay_ms (3000);
Programmering og blinking av hexfil til LPC2148
For å programmere ARM7-LPC2148 trenger vi keil uVision & Flash Magic verktøy. En USB-kabel brukes her til å programmere ARM7 Stick via mikro-USB-port. Vi skriver kode ved hjelp av Keil og lager en hex-fil, og deretter blinkes HEX-filen til ARM7-pinne ved hjelp av Flash Magic. Hvis du vil vite mer om å installere keil uVision og Flash Magic og hvordan du bruker dem, kan du følge lenken Komme i gang med ARM7 LPC2148 Microcontroller og programmere den ved hjelp av Keil uVision.
Fullstendig program er gitt på slutten av opplæringen.
Merk: Når du laster opp HEX-fil til LPC2148, må du ikke drive ESP8266 Wi-Fi-modulen og FTDI-modulen som er koblet til LPC2148.
Kontrollere LED-en ved hjelp av ESP8266 IoT Webserver med LPC2148
Trinn 1: - Etter at du har lastet opp HEX-filen til LPC2148, kobler du FTDI-modulen til PC via USB-kabel og åpner kittterminalprogramvaren.
Velg Serial, og velg deretter COM-porten i henhold til PC-en eller den bærbare datamaskinen min (COM3). Baud-hastigheten er 9600.
Trinn 2: - Nå tilbakestill ESP8266 Wi-Fi-modulen eller bare POWER OFF og POWER ON den igjen, kittterminalen viser responsen til ESP8266 Wi-Fi-modulen som vist nedenfor. \
Trinn 3: - Trykk nå på RESET-knappen på LPC2148. Etter det begynner LPC2148 å sende AT-kommandoer til ESP8266. Vi kan se svaret på det i kittterminalen.
Trinn 4: - Som du kan se på bildet over er ESP8266 satt i MODE 2 som er AP-modus og adressen til APIP er 192.168.4.1. Legg merke til denne adressen fordi denne adressen vil være hardkodet på websiden HTML-kode for å kontrollere LED-en som er koblet til LPC2148.
Viktig : Når ESP8266 er i AP-modus, må du koble PC-en din til ESP8266 AP. Se bildet under, min ESP8266-modul viser AP i navnet ESP_06217B (den er åpen og har ikke passord).
Trinn 5: - Etter å ha koblet PCen til ESP8266 AP, åpner du et notisblokk og kopierer og limer inn følgende HTML- programwebside. Sørg for å endre APIP-adressen i henhold til ESP8266 Wi-Fi-modulen
Velkommen til Circuit Digest
ESP8266 Grensesnitt med LPC2148: Opprette webserver for å kontrollere en LED
LED PÅ LED AVPå denne HTML-siden har vi opprettet to hyperkoblede knapper for å slå på og av lysdioden fra nettsiden.
Til slutt lagrer du notisblokkdokumentet som.html- utvidelse
Nettsiden vises som nedenfor i nettleseren.
Her er adressen AP IP-adressen 192.168.4.1, og vi sender verdiene @ og% for å slå PÅ og AV LED ved å bruke denne logikken nedenfor i LPC2148.
mens (1) { if (uart0_count! = 0) { COMMAND = UART0_BUFFER; hvis (COMMAND == LEDON) // Logikk for å sette LED PÅ eller AV, avhengig av den mottatte verdien fra ESP8266 { IOSET1 = (1 << 20); // Setter OUTPUT HIGH delay_ms (100); } annet hvis (COMMAND == LEDOFF) { IOCLR1 = (1 << 20); // Setter OUTPUT LOW delay_ms (100); } } }
Slik kan en enhet fjernstyres ved hjelp av ESP8266 og ARM7 mikrokontroller LPC2148. Fullstendig kode og forklaringsvideo er gitt nedenfor.