- Componenten vereist
- ESP8266 Wi-Fi-module
- LPC2148 verbinden met ESP8266 voor seriële communicatie
- Schakelschema en aansluitingen
- Stappen die betrokken zijn bij het programmeren van UART0 in LPC2148 voor het koppelen van ESP8266
- Besturing van de LED met behulp van ESP8266 IoT Webserver met LPC2148
ESP8266 Wi-Fi-transceiver biedt een manier om een microcontroller op het netwerk aan te sluiten. Het wordt veel gebruikt in IoT-projecten omdat het goedkoop, klein en gemakkelijk te gebruiken is. We hebben het eerder gebruikt om een webserver te maken met behulp van een Raspberry-webserver en een Arduino-webserver.
In deze tutorial zullen we een ESP8266 Wi-Fi-module verbinden met de ARM7-LPC2148-microcontroller en een webserver maken om de LED die is aangesloten op LPC2148 te besturen. De workflow zal als volgt verlopen:
- Stuur AT-opdrachten van LPC2148 naar ESP8266 om ESP8266 in AP-modus te configureren
- Verbind de laptop of computer Wi-Fi met het ESP8266 Access point
- Maak een HTML-webpagina op de pc met het IP-adres van het toegangspunt van de ESP8266-webserver
- Maak een programma voor LPC2148 om de LED te besturen volgens de waarde die is ontvangen van ESP8266
Als uw ESP8266 Wi-Fi-module helemaal nieuw is, bezoek dan de onderstaande links om vertrouwd te raken met de ESP8266 Wi-Fi-module.
- Aan de slag met ESP8266 Wi-Fi Transceiver (Deel 1)
- Aan de slag met ESP8266 (deel 2): AT-opdrachten gebruiken
- Aan de slag met ESP8266 (deel 3): ESP8266 programmeren met Arduino IDE en het geheugen flashen
Componenten vereist
Hardware:
- ARM7-LPC2148
- ESP8266 Wi-Fi-module
- FTDI (USB naar UART TTL)
- LED
- 3.3V Spanningsregelaar IC
- Breadboard
Software:
- KEIL uVision
- Flash Magic Tool
- Stopverf
ESP8266 Wi-Fi-module
ESP8266 is een goedkope, veelgebruikte Wi-Fi-module voor embedded projecten die een laag vermogen van 3.3V vereist. Het gebruikt slechts twee draden TX en RX voor seriële communicatie en gegevensoverdracht tussen ESP8266 en elke microcontroller met UART-poort.
Pin-diagram voor ESP8266 Wi-Fi-module
- GND, aarde (0 V)
- TX, verzend databit X
- GPIO 2, ingang / uitgang nr. 2 voor algemeen gebruik
- CH_PD, Chip uitschakelen
- GPIO 0, universele ingang / uitgang nr. 0
- RST, Reset
- RX, ontvang gegevensbit X
- VCC, spanning (+3,3 V)
ESP8266-printplaat instellen
ESP8266 vereist een constante toevoer van 3,3 V en is niet geschikt voor breadboards. Dus in onze vorige tutorial over ESP8266 hebben we een printplaat gemaakt voor ESP8266 met 3.3V spanningsregelaar, een RESET-drukknop en jumperopstelling voor schakelmodi (AT-commando of flitsmodus). Het kan ook op een breadboard worden geïnstalleerd zonder een perfboard te gebruiken.
Hier hebben we alle componenten op breadboard gesoldeerd om ons eigen ESP8266 wifi-bord te maken
Leer de interface van ESP8266 met verschillende microcontrollers door onderstaande links te volgen:
- Aan de slag met ESP8266 (deel 3): ESP8266 programmeren met Arduino IDE en het geheugen flashen
- ESP8266 verbinden met STM32F103C8: een webserver maken
- E-mail verzenden met MSP430 Launchpad en ESP8266
- Koppeling van ESP8266 met PIC16F877A Microcontroller
- IOT-gebaseerde dumpsterbewaking met Arduino en ESP8266
Alle op ESP8266 gebaseerde projecten zijn hier te vinden.
LPC2148 verbinden met ESP8266 voor seriële communicatie
Om ESP8266 met LPC2148 te verbinden, moeten we een UART-seriële communicatie tot stand brengen tussen deze twee apparaten om AT-opdrachten van LPC2148 naar ESP8266 te verzenden om de ESP8266 Wi-Fi-module te configureren. Volg de link om meer te weten over ESP8266 AT-opdrachten.
Dus om UART-communicatie in LPC2148 te gebruiken, moeten we de UART-poort in LPC2148 initialiseren. LPC2148 heeft twee ingebouwde UART-poorten (UART0 en UART1).
UART-pinnen in LPC2148
UART_Port |
TX_PIN |
RX_PIN |
UART0 |
P0.0 |
P0.1 |
UART1 |
P0.8 |
P0.9 |
UART0 initialiseren in LPC2148
Omdat we weten dat de pinnen van LPC2148 pinnen voor algemene doeleinden zijn, moeten we het PINSEL0-register gebruiken om UART0 te gebruiken. Voordat UART0 wordt geïnitialiseerd, moet u weten welke UART-registers in LPC2148 worden gebruikt voor het gebruik van de UART-functie.
UART registreert in LPC2148
De onderstaande tabel toont enkele belangrijke registers die bij het programmeren worden gebruikt. In onze toekomstige tutorials zullen we kort zien over andere registers die worden gebruikt voor UART in LPC2148.
x-0 voor UART0 & x-1 voor UART1:
REGISTREREN |
REGISTREREN NAAM |
GEBRUIK |
UxRBR |
Ontvang bufferregister |
Bevat recent ontvangen waarde |
UxTHR |
Holding Register verzenden |
Bevat gegevens die moeten worden verzonden |
UxLCR |
Lijncontroleregister |
Bevat UART-frameformaat (aantal databits, stopbit) |
UxDLL |
Deler Vergrendeling LSB |
LSB van de waarde van de UART-baudrate-generator |
UxDLM |
Deler Vergrendeling MSB |
MSB van de UART-baudrate-generatorwaarde |
UxIER |
Interrupt Register inschakelen |
Het wordt gebruikt om UART0- of UART1-interruptbronnen in te schakelen |
UxIIR |
Onderbreek het identificatieregister |
Het bevat de statuscode die prioriteit heeft en de bron van lopende interrupts |
Schakelschema en aansluitingen
De verbindingen tussen LPC2148, ESP8266 en FTDI worden hieronder weergegeven
LPC2148 |
ESP8266 |
FTDI |
TX (P0.0) |
RX |
NC |
RX (P0.1) |
TX |
RX |
ESP8266 wordt gevoed via een 3.3V spanningsregelaar en FTDI en LPC2148 worden gevoed via USB.
Waarom is FTDI hier?In deze tutorial hebben we de RX-pin van FTDI (USB naar UART TTL) aangesloten op de ESP8266 TX-pin die verder is verbonden met de LPC2148 RX-pin, zodat we de reactie van de ESP8266-module kunnen zien met behulp van een terminalsoftware zoals stopverf, Arduino IDE. Maar stel daarvoor de baudrate in volgens de baudrate van de ESP8266 Wi-Fi-module. (Mijn baudrate is 9600).
Stappen die betrokken zijn bij het programmeren van UART0 in LPC2148 voor het koppelen van ESP8266
Hieronder staan de programmeerstappen om ESP8266 te verbinden met LPC2148, waardoor het IoT-compatibel wordt.
Stap 1: - Eerst moeten we de UART0 TX & RX-pinnen in het PINSEL0-register initialiseren.
(P0.0 als TX en P0.1 als RX) PINSEL0 = PINSEL0 - 0x00000005;
Stap 2: - Stel vervolgens in U0LCR (Line Control Register) de DLAB (Divisor Latch Access Bit) in op 1 zoals het deze mogelijk maakt en stel vervolgens het aantal stopbits in op 1 en de dataframelengte van 8-bit.
U0LCR = 0x83;
Stap 3: - Een belangrijke stap die moet worden opgemerkt, is het instellen van de waarden van U0DLL en U0DLM afhankelijk van de PCLK-waarde en de gewenste baudrate. Normaal gebruiken we voor ESP8266 een baudrate van 9600. Laten we dus eens kijken hoe we 9600 baudrate voor UART0 kunnen instellen.
Formule voor het berekenen van de baudrate:
Waar, PLCK: Perifere klok in frequentie (MHz)
U0DLM, U0DLL: Dividerregisters van de baudrate-generator
MULVAL, DIVADDVAL: Deze registers zijn waarden voor breukengeneratoren
Voor baudrate 9600 met PCLK = 15 MHZ
MULVAL = 1 & DIVADDVAL = 0
256 * U0DLM + U0DLL = 97,65
Dus U0DLM = 0 en we krijgen U0DLL = 97 (breuk niet toegestaan)
Daarom gebruiken we de volgende code:
U0DLM = 0x00; U0DLL = 0x61; (Hexadecimale waarde van 97)
Stap 4: - Ten slotte moeten we DLA (Divisor Latch Access) uitschakelen op 0 instellen in LCR.
Dus we hebben
U0LCR & = 0x0F;
Stap 5: - Voor het verzenden van een teken, laadt u de byte die moet worden verzonden in U0THR en wacht u totdat de byte is verzonden, wat wordt aangegeven doordat de THRE HOOG wordt.
leegte UART0_TxChar (char ch) { U0THR = ch; while ((U0LSR & 0x40) == 0); }
Stap 6: - Voor het verzenden van een string wordt de onderstaande functie gebruikt. Om stringgegevens een voor een te verzenden, hebben we de tekenfunctie van bovenstaande stap gebruikt.
void UART0_SendString (char * str) { uint8_t i = 0; while (str! = '\ 0') { UART0_TxChar (str); i ++; } }
Stap 7: - Voor het ontvangen van een string wordt de interruptserviceroutinefunctie hier gebruikt omdat een ESP8266 Wi-Fi-module gegevens terugzendt naar de RX-pin van LPC2148 wanneer we een AT-commando verzenden of wanneer een ESP8266 gegevens naar LPC2148 verzendt, zoals we verzenden gegevens naar een webserver van ESP8266.
Voorbeeld: Wanneer we een AT-commando naar ESP8266 sturen vanuit LPC2148 ("AT \ r \ n"), krijgen we een antwoord "OK" van de Wi-Fi-module.
Dus we gebruiken hier een interrupt om de waarde te controleren die is ontvangen van de ESP8266 Wi-Fi-module, aangezien de ISR-interruptserviceroutine de hoogste prioriteit heeft.
Dus wanneer een ESP8266 gegevens naar de RX-pin van LPC2148 verzendt, wordt de interrupt ingesteld en wordt de ISR-functie uitgevoerd.
Stap 8: - Gebruik de volgende code om interrupts voor UART0 in te schakelen
De VICintEnable is een vectored interrupt-activeringsregister dat wordt gebruikt om interrupt voor UART0 mogelijk te maken.
VICIntEnable - = (1 << 6);
De VICVecCnt10 is een vectored interruptcontroleregister dat een slot toewijst voor UART0.
VICVectCntl0 = (1 << 5) - 6;
Vervolgens is de VICVectaddr0 een vectored interruptadresregister dat het ISR-adres van de interruptserviceroutine heeft.
VICVectAddr0 = (niet-ondertekend) UART0_ISR;
Dan moeten we de interrupt toewijzen aan het RBR-ontvangstbufferregister. Dus in Interrupt enable register (U0IER) stellen we in op RBR. Dus die interrupt-serviceroutine (ISR) wordt aangeroepen wanneer we gegevens ontvangen.
U0IER = IER_RBR;
Ten slotte hebben we de ISR-functie die een bepaalde taak moet uitvoeren wanneer we gegevens ontvangen van de ESP8266 Wi-Fi-module. Hier lezen we zojuist de ontvangen waarde van de ESP8266 die aanwezig is in de U0RBR en slaan die waarde op in de UART0_BUFFER. Eindelijk aan het einde van ISR moet de VICVectAddr worden ingesteld op nul of een dummy-waarde.
void UART0_ISR () __irq { unsigned char IIRValue; IIRValue = U0IIR; IIRValue >> = 1; IIRValue & = 0x02; if (IIRValue == IIR_RDA) { UART_BUFFER = U0RBR; uart0_count ++; if (uart0_count == BUFFER_SIZE) { uart0_count = 0; } } VICVectAddr = 0x0; }
Stap 9: - Omdat de ESP8266 Wi-Fi-module in de AP-modus moet worden gezet, moeten we de gerespecteerde AT-opdrachten van LPC2148 verzenden met behulp van de functie UART0_SendString () .
De AT-opdrachten die vanaf LPC2148 naar ESP8266 worden gestuurd, worden hieronder vermeld. Na het verzenden van elk AT-commando antwoordt ESP8266 met "OK"
1. Stuurt AT naar ESP8266
UART0_SendString ("AT \ r \ n"); delay_ms (3000);
2. Stuurt AT + CWMODE = 2 (instelling ESP8266 in AP-modus).
UART0_SendString ("AT + CWMODE = 2 \ r \ n"); delay_ms (3000);
3. Stuurt AT + CIFSR (om IP van AP te krijgen)
UART0_SendString ("AT + CIFSR \ r \ n"); delay_ms (3000);
4. Stuurt AT + CIPMUX = 1 (voor meerdere verbindingen)
UART0_SendString ("AT + CIPMUX = 1 \ r \ n"); delay_ms (3000);
5. Stuurt AT + CIPSERVER = 1,80 (voor INSCHAKELEN VAN ESP8266-SERVER met OPEN POORT)
UART0_SendString ("AT + CIPSERVER = 1,80 \ r \ n"); delay_ms (3000);
Programmeren en flashen van hex-bestand naar LPC2148
Om ARM7-LPC2148 te programmeren, hebben we de tool uVision & Flash Magic nodig. Een USB-kabel wordt hier gebruikt om de ARM7 Stick via een micro-USB-poort te programmeren. We schrijven code met Keil en maken een hex-bestand en vervolgens wordt het HEX-bestand met Flash Magic naar de ARM7-stick geflitst. Om meer te weten over het installeren van keil uVision en Flash Magic en hoe u ze kunt gebruiken, volgt u de link Aan de slag met ARM7 LPC2148 Microcontroller en programmeert u deze met Keil uVision.
Het volledige programma wordt aan het einde van de tutorial gegeven.
Opmerking: tijdens het uploaden van een HEX-bestand naar LPC2148 mag u de ESP8266 Wi-Fi-module en de FTDI-module die is verbonden met LPC2148 niet van stroom voorzien.
Besturing van de LED met behulp van ESP8266 IoT Webserver met LPC2148
Stap 1: - Na het uploaden van een HEX-bestand naar LPC2148, sluit u de FTDI-module aan op de pc via een USB-kabel en opent u de software voor de stopverfterminal.
Selecteer Serieel en selecteer vervolgens de COM-poort volgens uw pc of LAPTOP-mijn was (COM3). De baudrate is 9600.
Stap 2: - Reset nu de ESP8266 Wi-Fi-module of zet hem gewoon UIT en weer AAN, de stopverfterminal zal de reactie van de ESP8266 Wi-Fi-module laten zien zoals hieronder getoond. \
Stap 3: - Druk nu op de RESET-knop op de LPC2148. Daarna begint LPC2148 AT-opdrachten naar ESP8266 te sturen. We kunnen de reactie daarvan zien in de stopverfterminal.
Stap 4: - Zoals u kunt zien in de afbeelding hierboven, is de ESP8266 ingesteld in MODUS 2, dat is AP-modus en het adres van APIP is 192.168.4.1. Noteer dit adres omdat dit adres hard gecodeerd zal zijn in de HTML-code van de webpagina om de LED die is aangesloten op LPC2148 te bedienen.
Belangrijk : wanneer ESP8266 in AP-modus staat, moet u uw pc op de ESP8266 AP aansluiten. Zie de afbeelding hieronder, mijn ESP8266-module toont AP in de naam van ESP_06217B (het is open en heeft geen wachtwoord).
Stap 5: - Nadat u de pc op de ESP8266 AP hebt aangesloten, opent u een notitieblok en kopieert en plakt u de volgende HTML-programmawebpagina. Zorg ervoor dat u het APIP-adres wijzigt volgens uw ESP8266 Wi-Fi-module
Welkom bij Circuit Digest
ESP8266 Koppeling met LPC2148: Creëren van een webserver om een LED te besturen
LED AAN LED UITOp deze HTML-pagina hebben we twee hyperlinkknoppen gemaakt om de LED van de webpagina in en uit te schakelen.
Sla ten slotte het kladblok-document op als.html- extensie
De webpagina wordt weergegeven zoals hieronder in de webbrowser.
Hier is het adres het AP IP-adres 192.168.4.1 en we sturen waarden @ en% om de LED AAN en UIT te schakelen met behulp van deze logica hieronder in LPC2148.
while (1) { if (uart0_count! = 0) { COMMAND = UART0_BUFFER; if (COMMAND == LEDON) // Logica om LED AAN of UIT te zetten, afhankelijk van de ontvangen waarde van ESP8266 { IOSET1 = (1 << 20); // Stelt OUTPUT HIGH delay_ms (100) in; } else if (COMMAND == LEDOFF) { IOCLR1 = (1 << 20); // Stelt OUTPUT LOW delay_ms (100) in; } } }
Dit is hoe een apparaat op afstand kan worden bediend met behulp van de ESP8266 en ARM7 microcontroller LPC2148. Volledige code en uitlegvideo wordt hieronder gegeven.