- Komponenter krävs
- ESP8266 Wi-Fi-modul
- Ansluter LPC2148 med ESP8266 för seriell kommunikation
- Kretsschema och anslutningar
- Steg involverade i programmering av UART0 i LPC2148 för gränssnitt mellan ESP8266
- Styr LED med ESP8266 IoT Webserver med LPC2148
ESP8266 Wi-Fi-sändtagare ger ett sätt att ansluta en mikrokontroller till nätverket. Det används ofta i IoT-projekt eftersom det är billigt, litet och enkelt att använda. Vi har tidigare använt den för att skapa webserver med Raspberry webserver och Arduino webserver.
I denna handledning kommer vi att gränssnitt en ESP8266 Wi-Fi-modul med ARM7-LPC2148 mikrokontroller och skapa en webbserver för att styra lysdioden ansluten till LPC2148. Arbetsflödet kommer att gå så här:
- Skicka AT-kommandon från LPC2148 till ESP8266 för att konfigurera ESP8266 i AP-läge
- Anslut den bärbara eller datorns Wi-Fi med åtkomstpunkten ESP8266
- Skapa en HTML-webbsida på PC med åtkomstpunktens IP-adress för ESP8266-webbservern
- Skapa ett program för LPC2148 för att styra lysdioden enligt det värde som erhållits från ESP8266
Om din helt nya ESP8266 Wi-Fi-modul besöker du länkarna nedan för att bekanta dig med ESP8266 Wi-Fi-modulen.
- Komma igång med ESP8266 Wi-Fi-sändtagare (del 1)
- Komma igång med ESP8266 (del 2): Använda AT-kommandon
- Komma igång med ESP8266 (del 3): Programmera ESP8266 med Arduino IDE och blinka dess minne
Komponenter krävs
Hårdvara:
- ARM7-LPC2148
- ESP8266 Wi-Fi-modul
- FTDI (USB till UART TTL)
- LED
- 3,3 V spänningsregulator IC
- Bakbord
Programvara:
- KEIL uVision
- Flash Magic Tool
- Spackel
ESP8266 Wi-Fi-modul
ESP8266 är en billig Wi-Fi-modul för inbyggda projekt som kräver en låg effekt på 3,3 V. Den använder endast två trådar TX och RX för seriell kommunikation och dataöverföring mellan ESP8266 och alla mikrokontroller som har UART-port.
Stiftdiagram för ESP8266 Wi-Fi-modul
- GND, jord (0 V)
- TX, överför databit X
- GPIO 2, Allmän ingång / utgång nr 2
- CH_PD, avstängning av chip
- GPIO 0, Allmän ingång / utgång nr 0
- RST, Återställ
- RX, Ta emot databit X
- VCC, spänning (+3,3 V)
Ställa in ESP8266 kretskort
ESP8266 kräver en konstant tillförsel på 3,3 V och det är inte breadboard-vänligt. Så i vår tidigare handledning om ESP8266 gjorde vi ett kretskort för ESP8266 med 3,3 V spänningsregulator, en RESET-tryckknapp och bygelinställning för växlingslägen (AT-kommando eller blixtläge). Det kan också ställas in på brädbrädan utan att använda perf-bräda.
Här lödde vi alla komponenter på brädbrädet för att göra vårt eget ESP8266 Wi-Fi-kort
Lär dig gränssnitt mellan ESP8266 och olika mikrokontroller genom att följa länkarna nedan:
- Komma igång med ESP8266 (del 3): Programmera ESP8266 med Arduino IDE och blinka dess minne
- Ansluta ESP8266 till STM32F103C8: Skapa en webbserver
- Skicka e-post med MSP430 Launchpad och ESP8266
- Gränssnitt ESP8266 med PIC16F877A Microcontroller
- IOT-baserad Dumpster-övervakning med Arduino & ESP8266
Alla ESP8266-baserade projekt finns här.
Ansluter LPC2148 med ESP8266 för seriell kommunikation
För att kunna gränssnitt ESP8266 med LPC2148 måste vi upprätta en UART seriell kommunikation mellan dessa två enheter för att skicka AT-kommandon från LPC2148 till ESP8266 för att konfigurera ESP8266 Wi-Fi-modulen. För att veta mer om ESP8266 AT-kommandon, följ länken.
Så för att kunna använda UART-kommunikation i LPC2148 måste vi initiera UART-porten i LPC2148. LPC2148 har två inbyggda UART-portar (UART0 och UART1).
UART-stift i LPC2148
UART_Port |
TX_PIN |
RX_PIN |
UART0 |
P0.0 |
P0.1 |
UART1 |
P0.8 |
P0.9 |
Initierar UART0 i LPC2148
Som vi vet att stiften på LPC2148 är stift för allmänt ändamål så måste vi använda PINSEL0-registret för att använda UART0. Innan UART0 initieras kan du veta om dessa UART-register som används i LPC2148 för användning av UART-funktionen.
UART registrerar sig i LPC2148
Tabellen nedan visar några viktiga register som används vid programmering. I våra framtida handledning kommer vi att se kort om andra register som används för UART i LPC2148.
x-0 för UART0 & x-1 för UART1:
REGISTRERA |
REGISTRERA NAMN |
ANVÄNDA SIG AV |
UxRBR |
Ta emot buffertregister |
Innehåller nyligen mottaget värde |
UxTHR |
Sända innehavsregister |
Innehåller data som ska överföras |
UxLCR |
Linjekontrollregister |
Innehåller UART-ramformat (antal databitar, stoppbit) |
UxDLL |
Divisor Latch LSB |
LSB för UART-överföringshastighetsgeneratorvärde |
UxDLM |
Divisor Latch MSB |
MSB för UART-överföringshastighetsgeneratorvärde |
UxIER |
Avbryt aktivera register |
Den används för att aktivera UART0- eller UART1-avbrottskällor |
UxIIR |
Avbryt identifieringsregistret |
Den innehåller statuskoden som har prioritet och källa till väntande avbrott |
Kretsschema och anslutningar
Anslutningar mellan LPC2148, ESP8266 och FTDI visas nedan
LPC2148 |
ESP8266 |
FTDI |
TX (P0.0) |
RX |
NC |
RX (P0.1) |
TX |
RX |
ESP8266 drivs via en 3,3 V spänningsregulator och FTDI & LPC2148 drivs från USB.
Varför FTDI är här?I denna handledning har vi anslutit RX-stiftet på FTDI (USB till UART TTL) till ESP8266 TX-stiftet som är anslutet till LPC2148 RX-stiftet, så att vi kan se svaret från ESP8266-modulen med vilken terminalprogramvara som helst som kitt, Arduino IDE. Men för det ställer du in överföringshastigheten enligt överföringshastigheten för ESP8266 Wi-Fi-modulen. (Min överföringshastighet är 9600).
Steg involverade i programmering av UART0 i LPC2148 för gränssnitt mellan ESP8266
Nedan följer programmeringsstegen för att ansluta ESP8266 med LPC2148 vilket gör det IoT-kompatibelt.
Steg 1: - Först måste vi initialisera UART0 TX & RX-stiften i PINSEL0-registret.
(P0.0 som TX och P0.1 som RX) PINSEL0 = PINSEL0 - 0x00000005;
Steg 2: - Nästa i U0LCR (Line Control Register), ställ in DLAB (Divisor Latch Access Bit) till 1 eftersom det aktiverar dem och ställ sedan in stoppbitar som 1 och dataramslängd på 8-bitars.
U0LCR = 0x83;
Steg 3: - Nu är viktigt steg att notera att ställa in värdena för U0DLL & U0DLM beroende på PCLK-värdet och önskad överföringshastighet. Normalt för ESP8266 använder vi överföringshastighet på 9600. Så låt oss se hur man ställer in 9600 överföringshastighet för UART0.
Formel för beräkning av överföringshastighet:
Var, PLCK: Perifer klocka i frekvens (MHz)
U0DLM, U0DLL: Delningsregister för överföringshastighetsgenerator
MULVAL, DIVADDVAL: Dessa register är fraktionsgeneratorvärden
För överföringshastighet 9600 med PCLK = 15 MHz
MULVAL = 1 & DIVADDVAL = 0
256 * U0DLM + U0DLL = 97,65
Så U0DLM = 0 och vi får U0DLL = 97 (Fraktion inte tillåten)
Så vi använder följande kod:
U0DLM = 0x00; U0DLL = 0x61; (Hexadecimalt värde 97)
Steg 4: - Slutligen måste vi göra DLA (Divisor Latch Access) inaktiverad inställd på 0 i LCR.
Så vi har
U0LCR & = 0x0F;
Steg 5: - För att sända ett tecken, ladda byten som ska skickas i U0THR och vänta tills byten sänds, vilket indikeras av att THRE blir HÖG.
ogiltig UART0_TxChar (char ch) { U0THR = ch; medan ((U0LSR & 0x40) == 0); }
Steg 6: - För att sända en sträng används nedanstående funktion. För att skicka strängdata en efter en använde vi teckenfunktionen från ovanstående steg.
ogiltig UART0_SendString (char * str) { uint8_t i = 0; medan (str! = '\ 0') { UART0_TxChar (str); i ++; } }
Steg 7: - För mottagning av en sträng används avbrytningsrutinfunktion här eftersom en ESP8266 Wi-Fi-modul överför data tillbaka till RX-stiftet på LPC2148 när vi skickar AT-kommando eller när en ESP8266 skickar data till LPC2148, som vi skickar data till en webbserver av ESP8266.
Exempel: När vi skickar AT-kommando till ESP8266 från LPC2148 (“AT \ r \ n”) får vi ett svar “OK” från Wi-Fi-modulen.
Så vi använder ett avbrott här för att kontrollera värdet som tas emot från ESP8266 Wi-Fi-modulen eftersom ISR-avbrottstjänstrutinen har högsta prioritet.
Så när en ESP8266 skickar data till RX-stift på LPC2148 ställs avbrottet in och ISR-funktionen körs.
Steg 8: - Använd följande kod för att aktivera avbrott för UART0
Den VICintEnable är vektoriserade avbrottsaktiveringsregistret används för att aktivera avbrott för UART0.
VICIntEnable - = (1 << 6);
Den VICVecCnt10 är vektoriserade avbrottsregistret kontroll som allokerar kortplats för UART0.
VICVectCntl0 = (1 << 5) - 6;
Därefter är VICVectaddr0 ett vektoriserat avbrottsadressregister som har avbrottstjänsterutinen ISR-adress.
VICVectAddr0 = (osignerad) UART0_ISR;
Då måste vi tilldela avbrottet för RBR Receive buffertregister. Så i Interrupt enable register (U0IER) ställde vi in för RBR. Så att interrupt service routine (ISR) anropas när vi tar emot data.
U0IER = IER_RBR;
Slutligen har vi ISR-funktionen som måste utföra vissa uppgifter när vi får data från ESP8266 Wi-Fi-modulen. Här läser vi bara det mottagna värdet från ESP8266 som finns i U0RBR och lagrar dessa värden i UART0_BUFFER. Slutligen i slutet av ISR ska VICVectAddr ställas in med noll- eller dummyvärde.
ogiltig UART0_ISR () __irq { osignerad char IIRValue; IIRVärde = U0IIR; IIRVärde >> = 1; IIRVärde & = 0x02; om (IIRValue == IIR_RDA) { UART_BUFFER = U0RBR; uart0_count ++; om (uart0_count == BUFFER_SIZE) { uart0_count = 0; } } VICVectAddr = 0x0; }
Steg 9: - Eftersom ESP8266 Wi-Fi-modulen ska ställas in i AP-läge, måste vi skicka de respekterade AT-kommandona från LPC2148 med funktionen UART0_SendString () .
De AT-kommandon som sänds till ESP8266 från LPC2148 nämns nedan. Efter att ha skickat varje AT-kommando svarar ESP8266 med “OK”
1. Skickar AT till ESP8266
UART0_SendString ("AT \ r \ n"); delay_ms (3000);
2. Skickar AT + CWMODE = 2 (ställer ESP8266 i AP-läge).
UART0_SendString ("AT + CWMODE = 2 \ r \ n"); delay_ms (3000);
3. Skickar AT + CIFSR (för att få IP för AP)
UART0_SendString ("AT + CIFSR \ r \ n"); delay_ms (3000);
4. Skickar AT + CIPMUX = 1 (för flerfaldiga anslutningar)
UART0_SendString ("AT + CIPMUX = 1 \ r \ n"); delay_ms (3000);
5. Skickar AT + CIPSERVER = 1,80 (För AKTIVERING av ESP8266 SERVER med ÖPPEN PORT)
UART0_SendString ("AT + CIPSERVER = 1,80 \ r \ n"); delay_ms (3000);
Programmering och blinkande hexfil till LPC2148
För att programmera ARM7-LPC2148 behöver vi keil uVision & Flash Magic-verktyget. En USB-kabel används här för att programmera ARM7 Stick via mikro-USB-port. Vi skriver kod med Keil och skapar en hex-fil och sedan blinkar HEX-filen till ARM7-stick med Flash Magic. Om du vill veta mer om installation av Keil uVision och Flash Magic och hur du använder dem följer du länken Komma igång med ARM7 LPC2148 Microcontroller och programmerar den med Keil uVision.
Komplett program ges i slutet av handledningen.
Obs! När du laddar upp en HEX-fil till LPC2148 får du inte driva ESP8266 Wi-Fi-modulen och FTDI-modulen som är ansluten till LPC2148.
Styr LED med ESP8266 IoT Webserver med LPC2148
Steg 1: - Efter uppladdning av HEX-fil till LPC2148 ansluter du FTDI-modulen till PC via USB-kabel och öppnar kittterminalprogramvaran.
Välj Serial och välj sedan COM-porten enligt din PC eller LAPTOP-gruvan var (COM3). Överföringshastigheten är 9600.
Steg 2: - Återställ nu ESP8266 Wi-Fi-modulen eller bara POWER OFF och POWER ON den igen, kittterminalen visar svaret från ESP8266 Wi-Fi-modulen som visas nedan. \
Steg 3: - Tryck nu på RESET-knappen på LPC2148. Därefter börjar LPC2148 skicka AT-kommandon till ESP8266. Vi kan se svaret på det i kittterminalen.
Steg 4: - Som du kan se på bilden ovan är ESP8266 inställd i LÄGE 2 som är AP-läge och adressen till APIP är 192.168.4.1. Observera den här adressen eftersom den här adressen kommer att hårdkodas på webbsidans HTML-kod för att styra lysdioden som är ansluten till LPC2148.
Viktigt : När ESP8266 är i AP-läge måste du ansluta din dator till ESP8266 AP. Se bilden nedan min ESP8266-modul visar AP i namnet på ESP_06217B (den är öppen och har inget lösenord).
Steg 5: - När du har anslutit datorn till ESP8266 AP, öppna ett anteckningsblock och kopiera och klistra in följande HTML-programwebbsida. Se till att ändra APIP-adressen enligt din ESP8266 Wi-Fi-modul
Välkommen till Circuit Digest
ESP8266 Gränssnitt med LPC2148: Skapa webbserver för att styra en LED
LED PÅ LED AVPå denna HTML-sida har vi skapat två hyperlänkade knappar för att sätta på och stänga av lysdioden från webbsidan.
Spara äntligen anteckningsdokumentet som.html- tillägg
Webbsidan visas som nedan i webbläsaren.
Här är adressen AP IP-adressen 192.168.4.1 och vi skickar värdena @ och% för att slå på och stänga av LED-lampan med hjälp av denna logik nedan i LPC2148.
medan (1) { if (uart0_count! = 0) { COMMAND = UART0_BUFFER; if (COMMAND == LEDON) // Logik för att ställa in LED PÅ eller AV beroende på det mottagna värdet från ESP8266 { IOSET1 = (1 << 20); // Ställer in OUTPUT HIGH delay_ms (100); } annat om (COMMAND == LEDOFF) { IOCLR1 = (1 << 20); // Ställer in OUTPUT LOW delay_ms (100); } } }
Så här kan en enhet fjärrstyras med ESP8266 och ARM7 mikrokontroller LPC2148. Komplett kod och förklaringsvideo ges nedan.