- Components necessaris
- Mòdul Wi-Fi ESP8266
- Connexió de LPC2148 amb ESP8266 per a comunicació en sèrie
- Diagrama de circuits i connexions
- Passos relacionats amb la programació de UART0 a LPC2148 per a la interfície ESP8266
- Control del LED mitjançant el servidor web IoT ESP8266 amb LPC2148
El transceptor Wi-Fi ESP8266 proporciona una manera de connectar un microcontrolador a la xarxa. S’utilitza àmpliament en projectes IoT, ja que és barat, petit i fàcil d’utilitzar. L’hem utilitzat prèviament per crear un servidor web mitjançant el servidor web Raspberry i el servidor web Arduino.
En aquest tutorial interfacearem un mòdul Wi-Fi ESP8266 amb el microcontrolador ARM7-LPC2148 i crearem un servidor web per controlar el LED connectat a LPC2148. El flux de treball serà així:
- Envieu comandes AT des de LPC2148 a ESP8266 per configurar ESP8266 en mode AP
- Connecteu el Wi-Fi de l’ordinador portàtil o de l’ordinador amb el punt d’accés ESP8266
- Creeu una pàgina web HTML al PC amb l'adreça IP del punt d'accés del servidor web ESP8266
- Creeu un programa per a LPC2148 per controlar el LED segons el valor rebut de ESP8266

Si és completament nou al mòdul Wi-Fi ESP8266, visiteu els enllaços següents per familiaritzar-vos amb el mòdul Wi-Fi ESP8266.
- Introducció al transceptor Wi-Fi ESP8266 (primera part)
- Introducció a ESP8266 (2a part): utilitzant ordres AT
- Introducció a ESP8266 (Part 3): programació d'ESP8266 amb Arduino IDE i interrupció de la seva memòria
Components necessaris
Maquinari:
- ARM7-LPC2148
- Mòdul Wi-Fi ESP8266
- FTDI (USB a UART TTL)
- LED
- CI de regulador de voltatge de 3,3 V
- Taula de pa
Programari:
- KEIL uVision
- Eina Flash Magic
- Massilla
Mòdul Wi-Fi ESP8266

ESP8266 és un mòdul Wi-Fi àmpliament utilitzat per a projectes incrustats que requereix una potència baixa de 3,3V. Utilitza només dos cables TX i RX per a la comunicació en sèrie i la transferència de dades entre ESP8266 i qualsevol microcontrolador que tingui port UART.
Esquema de pins per al mòdul Wi-Fi ESP8266

- GND, terra (0 V)
- TX, Transmet bit de dades X
- GPIO 2, entrada / sortida d’ús general núm. 2
- CH_PD, apagat del xip
- GPIO 0, entrada / sortida d’ús general núm. 0
- RST, restableix
- RX, rebre bit de dades X
- VCC, tensió (+3,3 V)
Configuració de la placa de circuit ESP8266
L'ESP8266 requereix un subministrament constant de 3,3 V i no és compatible amb les taules de suport. Així doncs, en el nostre tutorial anterior sobre ESP8266, vam crear una placa de circuit per a ESP8266 amb regulador de voltatge de 3,3 V, un botó de RESET i configuració de pont per a modes de commutació (ordre AT o mode de flaix). També es pot configurar a la taula de treball sense utilitzar el tauler de perf.
Aquí hem soldat tots els components de la placa de configuració per fabricar la nostra pròpia placa Wi-Fi ESP8266

Apreneu la interfície de l’ESP8266 amb diversos microcontroladors seguint els enllaços següents:
- Introducció a ESP8266 (Part 3): programació d'ESP8266 amb Arduino IDE i interrupció de la seva memòria
- Connexió ESP8266 amb STM32F103C8: creació d'un servidor web
- Enviament de correu electrònic mitjançant MSP430 Launchpad i ESP8266
- Interfície ESP8266 amb microcontrolador PIC16F877A
- Monitorització basada en IOT amb Arduino i ESP8266
Tots els projectes basats en l’ESP8266 es poden trobar aquí.
Connexió de LPC2148 amb ESP8266 per a comunicació en sèrie
Per a la interfície ESP8266 amb LPC2148 hem d’establir una comunicació serial UART entre aquests dos dispositius per enviar ordres AT des de LPC2148 fins a ESP8266 per configurar el mòdul Wi-Fi ESP8266. Per obtenir més informació sobre les comandes ESP8266 AT, seguiu l'enllaç.
Per tal d’utilitzar la comunicació UART a LPC2148, hem d’inicialitzar el port UART a LPC2148. LPC2148 té dos ports UART incorporats (UART0 i UART1).
Pins UART a LPC2148

|
UART_Port |
TX_PIN |
RX_PIN |
|
UART0 |
P0.0 |
P0.1 |
|
UART1 |
P0.8 |
P0.9 |
S’inicialitza UART0 a LPC2148
Com sabem que els pins de LPC2148 són pins de propòsit general, hem de fer servir el registre PINSEL0 per utilitzar UART0. Abans d'inicialitzar UART0, informeu-vos d'aquests registres UART utilitzats a LPC2148 per utilitzar la funció UART.
Registres UART a LPC2148
La taula següent mostra alguns registres importants utilitzats en la programació. En els nostres futurs tutorials veurem breument altres registres utilitzats per a UART a LPC2148.
x-0 per a UART0 i x-1 per a UART1:
|
REGISTREU-VOS |
NOM DEL REGISTRE |
ÚS |
|
UxRBR |
Rebeu el registre de memòria intermèdia |
Conté un valor rebut recentment |
|
UxTHR |
Transmet el registre de la celebració |
Conté dades per transmetre |
|
UxLCR |
Registre de control de línia |
Conté format de marc UART (nombre de bits de dades, bit d'aturada) |
|
UxDLL |
Divisor Latch LSB |
LSB del valor del generador de velocitat en bauds UART |
|
UxDLM |
Divisor Latch MSB |
MSB del valor del generador de velocitat de transmissió UART |
|
UxIER |
Registre d'activació d'interrupcions |
S'utilitza per habilitar fonts d'interrupció UART0 o UART1 |
|
UxIIR |
Registre d’identificació d’interrupcions |
Conté el codi d'estat que té prioritat i font d'interrupcions pendents |
Diagrama de circuits i connexions

A continuació es mostren les connexions entre LPC2148, ESP8266 i FTDI
|
LPC2148 |
ESP8266 |
FTDI |
|
TX (P0.0) |
RX |
NC |
|
RX (P0.1) |
TX |
RX |
L'ESP8266 s'alimenta mitjançant un regulador de voltatge de 3,3 V i el FTDI i el LPC2148 s'alimenten des d'USB.
Per què FTDI és aquí?En aquest tutorial hem connectat el pin RX de FTDI (USB a UART TTL) al pin ESP8266 TX que es connecta més al pin RX LPC2148, de manera que podem veure la resposta del mòdul ESP8266 mitjançant qualsevol programari de terminal com ara massilla, Arduino IDE. Però, per a això, configureu la velocitat de transmissió segons la velocitat de transmissió del mòdul Wi-Fi ESP8266. (La meva taxa de transmissions és de 9600).

Passos relacionats amb la programació de UART0 a LPC2148 per a la interfície ESP8266
A continuació es mostren els passos de programació per connectar ESP8266 amb LPC2148, cosa que el farà compatible amb IoT.
Pas 1: - Primer hem d'inicialitzar els pins UART0 TX & RX al registre PINSEL0.
(P0.0 com a TX i P0.1 com a RX) PINSEL0 = PINSEL0 - 0x00000005;
Pas 2: - A continuació, a U0LCR (registre de control de línia), configureu el DLAB (bit d'accés de tancament divisor) a 1, ja que els habilita i, a continuació, configureu el nombre de bits d'aturada com a 1 i la longitud del marc de dades de 8 bits.
U0LCR = 0x83;
Pas 3: - Ara el pas important que cal tenir en compte és establir els valors de U0DLL i U0DLM en funció del valor PCLK i de la velocitat de transmissió desitjada. Normalment per a ESP8266 fem servir una velocitat en bauds de 9600. Així que anem a veure com establir la velocitat de transmissió en 9600 per a UART0.
Fórmula per al càlcul de la velocitat en bauds:

On, PLCK: rellotge perifèric en freqüència (MHz)
U0DLM, U0DLL: registres divisors del generador de velocitat en transmissions
MULVAL, DIVADDVAL: Aquests registres són valors generadors de fraccions
Per a la velocitat de transmissió 9600 amb PCLK = 15 MHz

MULVAL = 1 i DIVADDVAL = 0
256 * U0DLM + U0DLL = 97,65
Per tant, U0DLM = 0 i obtenim U0DLL = 97 (Fracció no permesa)
Per tant, fem servir el següent codi:
U0DLM = 0x00; U0DLL = 0x61; (Valor hexadecimal de 97)
Pas 4: - Finalment, hem de fer que DLA (Divisor Latch Access) estigui desactivat a 0 a LCR.
Així ho tenim
U0LCR & = 0x0F;
Pas 5: - Per transmetre un caràcter, carregueu el byte que s’enviarà a U0THR i espereu fins que es transmeti el byte, cosa que s’indica que el THRE esdevé HIGH.
void UART0_TxChar (char ch) { U0THR = ch; while ((U0LSR & 0x40) == 0); }
Pas 6: - Per transmetre una cadena, s'utilitza la funció següent. Per enviar dades de cadenes una per una, hem utilitzat la funció de caràcters des del pas superior.
void UART0_SendString (char * str) { uint8_t i = 0; while (str! = '\ 0') { UART0_TxChar (str); i ++; } }
Pas 7: - Per rebre una cadena, aquí s’utilitza la funció de rutina del servei d’interrupció perquè un mòdul Wi-Fi ESP8266 transmetrà dades al pin RX de LPC2148 sempre que enviem l’ordre AT o cada vegada que un ESP8266 enviï dades a LPC2148, com enviem dades a un servidor web d’ESP8266.
Exemple: Quan enviem l'ordre AT a ESP8266 des de LPC2148 ("AT \ r \ n"), rebem una resposta "OK" des del mòdul Wi-Fi.
Per tant, fem servir una interrupció aquí per comprovar el valor rebut del mòdul Wi-Fi ESP8266, ja que la rutina de servei d’interrupcions ISR té la màxima prioritat.
Per tant, cada vegada que un ESP8266 envia dades al pin RX de LPC2148, la interrupció s'estableix i la funció ISR s'executa.
Pas 8: - Per habilitar les interrupcions per a UART0, utilitzeu el codi següent
El VICintEnable és un registre d’habilitació d’interrupcions vectoritzades que s’utilitza per habilitar la interrupció per a UART0.
VICIntEnable - = (1 << 6);
El VICVecCnt10 és un registre de control d’interrupcions vectoritzades que assigna la ranura per a UART0.
VICVectCntl0 = (1 << 5) - 6;
A continuació, el VICVectaddr0 és un registre d'adreces d'interrupció vectoritzat que té l'adreça ISR de rutina del servei d'interrupció.
VICVectAddr0 = (sense signar) UART0_ISR;
Després hem d'assignar la interrupció per al registre de memòria intermèdia RBR Receive. Per tant, a Interrupt enable register (U0IER) el configurem per a RBR. De manera que s’anomena rutina de servei d’interrupcions (ISR) quan rebem dades.
U0IER = IER_RBR;
Finalment, tenim la funció ISR que necessita fer algunes tasques quan rebem dades del mòdul Wi-Fi ESP8266. Aquí acabem de llegir el valor rebut de l’ESP8266 que és present a U0RBR i emmagatzemem aquest valor a UART0_BUFFER. Finalment, al final de la ISR, el VICVectAddr s'hauria de configurar amb un valor nul o fictici.
void UART0_ISR () __irq { unsigned char IIRValue; IIRValue = U0IIR; Valor IIR >> = 1; Valor IIR & = 0x02; if (IIRValue == IIR_RDA) { UART_BUFFER = U0RBR; uart0_count ++; if (uart0_count == BUFFER_SIZE) { uart0_count = 0; } } VICVectAddr = 0x0; }
Pas 9: - Com que el mòdul Wi-Fi ESP8266 s'hauria d'establir en el mode AP, hem d'enviar les ordres AT respectades des de LPC2148 mitjançant la funció UART0_SendString () .
Les ordres AT que s’envien a ESP8266 des de LPC2148 s’esmenten a continuació. Després d'enviar cada ordre AT, ESP8266 respon amb "D'acord"
1. Envia AT a ESP8266
UART0_SendString ("AT \ r \ n"); delay_ms (3000);
2. Envia AT + CWMODE = 2 (configurant ESP8266 en mode AP).
UART0_SendString ("AT + CWMODE = 2 \ r \ n"); delay_ms (3000);
3. Envia AT + CIFSR (per obtenir IP de AP)
UART0_SendString ("AT + CIFSR \ r \ n"); delay_ms (3000);
4. Envia AT + CIPMUX = 1 (per a connexions Mutliple)
UART0_SendString ("AT + CIPMUX = 1 \ r \ n"); delay_ms (3000);
5. Envia AT + CIPSERVER = 1,80 (per HABILITAR EL SERVEI ESP8266 amb PORT OBERT)
UART0_SendString ("AT + CIPSERVER = 1,80 \ r \ n"); delay_ms (3000);
Programació i intermitència del fitxer hexadecimal a LPC2148
Per programar ARM7-LPC2148 necessitem l'eina keil uVision i Flash Magic. Aquí s’utilitza un cable USB per programar ARM7 Stick mitjançant un port micro USB. Escrivim codi amb Keil i creem un fitxer hexadecimal i, a continuació, el fitxer HEX es converteix en un pal ARM7 mitjançant Flash Magic. Per obtenir més informació sobre com instal·lar keil uVision i Flash Magic i com utilitzar-los, seguiu l’enllaç Introducció al microcontrolador ARM7 LPC2148 i programeu-lo mitjançant Keil uVision.
El programa complet es dóna al final del tutorial.
Nota: Mentre pengeu el fitxer HEX a LPC2148, no heu d’engegar el mòdul Wi-Fi ESP8266 i el mòdul FTDI connectat amb LPC2148.
Control del LED mitjançant el servidor web IoT ESP8266 amb LPC2148
Pas 1: - Després de carregar el fitxer HEX a LPC2148, connecteu el mòdul FTDI al PC mitjançant un cable USB i obriu el programari del terminal de massilla.

Seleccioneu Sèrie i, a continuació, seleccioneu el port COM segons el meu PC o LAPTOP (COM3). La velocitat en bauds és de 9600.
Pas 2: - Reinicieu el mòdul Wi-Fi ESP8266 o simplement APAGUEU-LO i ENCENDEU-lo de nou, el terminal de massilla mostrarà la resposta del mòdul Wi-Fi ESP8266 tal com es mostra a continuació. \

Pas 3: - Premeu ara el botó RESET al LPC2148. Després d'això, LPC2148 comença a enviar comandes AT a ESP8266. Podem veure la resposta d’aquesta al terminal de massilla.

Pas 4: - Com podeu veure a la imatge superior, l'ESP8266 està configurat en el MODE 2 que és el mode AP i l'adreça de l'APIP és 192.168.4.1. Tingueu en compte aquesta adreça perquè aquesta adreça estarà codificada de manera dura al codi HTML de la pàgina web per controlar el LED connectat a LPC2148.
Important : quan l'ESP8266 estigui en mode AP, heu de connectar el vostre PC a l'ESP8266 AP. Vegeu la imatge que hi ha a sota del mòdul ESP8266 que mostra AP al nom de ESP_06217B (està obert i no té cap contrasenya).

Pas 5: - Després de connectar l'ordinador a l'AP ESP8266, obriu un bloc de notes i copieu-enganxeu la següent pàgina web del programa HTML. Assegureu-vos de canviar l'adreça APIP segons el mòdul Wi-Fi ESP8266
Benvingut a Circuit Digest
ESP8266 Interfície amb LPC2148: creació de servidor web per controlar un LED
LED ENCÉS LED APAGATEn aquesta pàgina HTML, hem creat dos botons d’enllaç per activar i apagar el LED de la pàgina web.
Finalment, deseu el document del bloc de notes com a extensió .html

La pàgina web es mostrarà a continuació al navegador web.

Aquí l’adreça és l’adreça IP de l’AP 192.168.4.1 i enviem els valors @ i% per activar i apagar el LED mitjançant aquesta lògica següent a LPC2148.
while (1) { if (uart0_count! = 0) { COMMAND = UART0_BUFFER; if (COMMAND == LEDON) // Lògica per activar o apagar el LED en funció del valor rebut de ESP8266 { IOSET1 = (1 << 20); // Defineix OUTPUT HIGH delay_ms (100); } else if (COMMAND == LEDOFF) { IOCLR1 = (1 << 20); // Estableix OUTPUT LOW delay_ms (100); } } }
Així es pot controlar un dispositiu remotament mitjançant el microcontrolador ESP8266 i ARM7 LPC2148. A continuació es dóna el codi complet i el vídeo explicatiu.
