- Componentes requeridos
- Módulo Wi-Fi ESP8266
- Conexión de LPC2148 con ESP8266 para comunicación en serie
- Diagrama de circuito y conexiones
- Pasos involucrados en la programación de UART0 en LPC2148 para la interfaz ESP8266
- Controlar el LED mediante el servidor web ESP8266 IoT con LPC2148
El transceptor Wi-Fi ESP8266 proporciona una forma de conectar un microcontrolador a la red. Se usa ampliamente en proyectos de IoT ya que es barato, pequeño y fácil de usar. Lo hemos usado anteriormente para crear un servidor web usando el servidor web Raspberry y el servidor web Arduino.
En este tutorial conectaremos un Módulo Wi-Fi ESP8266 con el microcontrolador ARM7-LPC2148 y crearemos un servidor web para controlar el LED conectado a LPC2148. El flujo de trabajo será así:
- Envíe comandos AT desde LPC2148 a ESP8266 para configurar ESP8266 en modo AP
- Conecte la computadora portátil o computadora Wi-Fi con el punto de acceso ESP8266
- Cree una página web HTML en la PC con la dirección IP del punto de acceso del servidor web ESP8266
- Cree un programa para LPC2148 para controlar el LED según el valor recibido de ESP8266
Si es completamente nuevo en el módulo Wi-Fi ESP8266, visite los enlaces a continuación para familiarizarse con el módulo Wi-Fi ESP8266.
- Introducción al transceptor Wi-Fi ESP8266 (Parte 1)
- Introducción a ESP8266 (parte 2): uso de comandos AT
- Introducción a ESP8266 (Parte 3): Programación de ESP8266 con Arduino IDE y flasheo de su memoria
Componentes requeridos
Hardware:
- ARM7-LPC2148
- Módulo Wi-Fi ESP8266
- FTDI (USB a UART TTL)
- LED
- Regulador de voltaje de 3.3V IC
- Tablero de circuitos
Software:
- KEIL uVision
- Herramienta Flash Magic
- Masilla
Módulo Wi-Fi ESP8266
ESP8266 es un módulo Wi-Fi de bajo costo ampliamente utilizado para proyectos integrados que requiere una baja potencia de 3.3V. Utiliza solo dos cables TX y RX para la comunicación en serie y la transferencia de datos entre ESP8266 y cualquier microcontrolador que tenga puerto UART.
Diagrama de pines para el módulo Wi-Fi ESP8266
- GND, tierra (0 V)
- TX, transmitir datos bit X
- GPIO 2, entrada / salida de propósito general n. ° 2
- CH_PD, Chip apagado
- GPIO 0, entrada / salida de propósito general No. 0
- RST, restablecer
- RX, recibir datos bit X
- VCC, voltaje (+3,3 V)
Configuración de la placa de circuito ESP8266
ESP8266 requiere un suministro constante de 3.3V y no es compatible con la placa de pruebas. Entonces, en nuestro tutorial anterior sobre ESP8266, hicimos una placa de circuito para ESP8266 con regulador de voltaje de 3.3V, un botón RESET y una configuración de puente para cambiar modos (comando AT o modo flash). También se puede configurar en la placa de pruebas sin usar la placa de perforación.
Aquí soldamos todos los componentes en una placa para hacer nuestra propia placa Wi-Fi ESP8266
Aprenda la interfaz de ESP8266 con varios microcontroladores siguiendo los enlaces a continuación:
- Introducción a ESP8266 (Parte 3): Programación de ESP8266 con Arduino IDE y flasheo de su memoria
- Conexión de ESP8266 con STM32F103C8: creación de un servidor web
- Envío de correo electrónico mediante MSP430 Launchpad y ESP8266
- Interfaz ESP8266 con microcontrolador PIC16F877A
- Monitoreo de contenedor basado en IOT usando Arduino y ESP8266
Todos los proyectos basados en ESP8266 se pueden encontrar aquí.
Conexión de LPC2148 con ESP8266 para comunicación en serie
Para interconectar ESP8266 con LPC2148 debemos establecer una comunicación serie UART entre estos dos dispositivos para enviar comandos AT desde LPC2148 a ESP8266 para configurar el módulo Wi-Fi ESP8266. Para saber más sobre los comandos ESP8266 AT, siga el enlace.
Entonces, para usar la comunicación UART en LPC2148, necesitamos inicializar el puerto UART en LPC2148. LPC2148 tiene dos puertos UART incorporados (UART0 y UART1).
Pines UART en LPC2148
UART_Port |
TX_PIN |
RX_PIN |
UART0 |
P0.0 |
P0.1 |
UART1 |
P0.8 |
P0.9 |
Inicializando UART0 en LPC2148
Como sabemos que los pines de LPC2148 son pines de propósito general, necesitamos usar el registro PINSEL0 para usar UART0. Antes de inicializar UART0, informe sobre estos registros UART utilizados en LPC2148 para usar la función UART.
Registros UART en LPC2148
La siguiente tabla muestra algunos registros importantes usados en programación. En nuestros futuros tutoriales veremos brevemente sobre otros registros utilizados para UART en LPC2148.
x-0 para UART0 y x-1 para UART1:
REGISTRARSE |
REGISTRO NOMBRE |
UTILIZAR |
UxRBR |
Recibir registro de búfer |
Contiene valor recibido recientemente |
UxTHR |
Transmitir registro de retención |
Contiene datos a transmitir |
UxLCR |
Registro de control de línea |
Contiene formato de trama UART (No de bits de datos, bit de parada) |
UxDLL |
Pestillo divisor LSB |
LSB del valor del generador de velocidad en baudios UART |
UxDLM |
Pestillo divisor MSB |
MSB del valor del generador de velocidad en baudios UART |
UxIER |
Interrupción Habilitar registro |
Se utiliza para habilitar fuentes de interrupción UART0 o UART1 |
UxIIR |
Registro de identificación de interrupciones |
Contiene el código de estado que tiene prioridad y fuente de interrupciones pendientes |
Diagrama de circuito y conexiones
Las conexiones entre LPC2148, ESP8266 y FTDI se muestran a continuación
LPC2148 |
ESP8266 |
FTDI |
TX (P0.0) |
RX |
CAROLINA DEL NORTE |
RX (P0.1) |
TX |
RX |
ESP8266 se alimenta a través de un regulador de voltaje de 3.3V y FTDI y LPC2148 se alimentan desde USB.
¿Por qué FTDI está aquí?En este tutorial, hemos conectado el pin RX de FTDI (USB a UART TTL) al pin ESP8266 TX que además está conectado al pin LPC2148 RX, para que podamos ver la respuesta del módulo ESP8266 usando cualquier software de terminal como putty, Arduino IDE. Pero para eso, configure la velocidad en baudios según la velocidad en baudios del módulo Wi-Fi ESP8266. (Mi velocidad en baudios es 9600).
Pasos involucrados en la programación de UART0 en LPC2148 para la interfaz ESP8266
A continuación se muestran los pasos de programación para conectar ESP8266 con LPC2148, lo que lo hará compatible con IoT.
Paso 1: - Primero necesitamos inicializar los pines UART0 TX & RX en el registro PINSEL0.
(P0.0 como TX y P0.1 como RX) PINSEL0 = PINSEL0 - 0x00000005;
Paso 2: - A continuación, en U0LCR (Registro de control de línea), establezca el DLAB (Bit de acceso de bloqueo del divisor) en 1, ya que los habilita y luego establezca el número de bits de parada como 1 y la longitud de la trama de datos de 8 bits.
U0LCR = 0x83;
Paso 3: - Ahora, un paso importante a tener en cuenta es establecer los valores de U0DLL y U0DLM según el valor de PCLK y la velocidad de transmisión deseada. Normalmente para ESP8266 usamos una tasa de baudios de 9600. Veamos cómo configurar la tasa de 9600 baudios para UART0.
Fórmula para el cálculo de la tasa de baudios:
Dónde, PLCK: reloj periférico en frecuencia (MHz)
U0DLM, U0DLL: registros del divisor del generador de velocidad en baudios
MULVAL, DIVADDVAL: Estos registros son valores generadores de fracciones
Para tasa de baudios 9600 con PCLK = 15MHZ
MULVAL = 1 y DIVADDVAL = 0
256 * U0DLM + U0DLL = 97,65
Entonces U0DLM = 0 y obtenemos U0DLL = 97 (Fracción no permitida)
Entonces usamos el siguiente código:
U0DLM = 0x00; U0DLL = 0x61; (Valor hexadecimal de 97)
Paso 4: - Finalmente, debemos hacer que DLA (Divisor Latch Access) se deshabilite en 0 en LCR.
Entonces tenemos
U0LCR & = 0x0F;
Paso 5: - Para transmitir un carácter, cargue el byte a enviar en U0THR y espere hasta que se transmita el byte, lo cual se indica cuando los THRE se vuelven ALTOS.
anular UART0_TxChar (char ch) { U0THR = ch; while ((U0LSR & 0x40) == 0); }
Paso 6: - Para transmitir una cadena, se utiliza la siguiente función. Para enviar datos de cadena uno por uno, usamos la función de carácter del paso anterior.
void UART0_SendString (char * str) { uint8_t i = 0; while (str! = '\ 0') { UART0_TxChar (str); i ++; } }
Paso 7: - Para recibir una cadena, aquí se usa la función de rutina de servicio de interrupción porque un módulo Wi-Fi ESP8266 transmitirá datos al pin RX de LPC2148 siempre que enviemos un comando AT o cuando un ESP8266 envíe datos a LPC2148, como enviamos datos a un servidor web de ESP8266.
Ejemplo: cuando enviamos el comando AT a ESP8266 desde LPC2148 ("AT \ r \ n"), obtenemos una respuesta "OK" del módulo Wi-Fi.
Entonces usamos una interrupción aquí para verificar el valor recibido del módulo Wi-Fi ESP8266 ya que la rutina del servicio de interrupción ISR tiene la prioridad más alta.
Entonces, siempre que un ESP8266 envía datos al pin RX de LPC2148, se establece la interrupción y se ejecuta la función ISR.
Paso 8: - Para habilitar interrupciones para UART0, use el siguiente código
El VICintEnable es un registro de habilitación de interrupciones vectorizado que se utiliza para habilitar la interrupción para UART0.
VICIntEnable - = (1 << 6);
El VICVecCnt10 es un registro de control de interrupciones vectorizado que asigna una ranura para UART0.
VICVectCntl0 = (1 << 5) - 6;
A continuación, el VICVectaddr0 es un registro de dirección de interrupción vectorial que tiene la dirección ISR de rutina de servicio de interrupción.
VICVectAddr0 = (sin firmar) UART0_ISR;
Luego tenemos que asignar la interrupción para el registro de búfer de recepción RBR. Entonces, en el registro de habilitación de interrupciones (U0IER) configuramos para RBR. Entonces, esa rutina de servicio de interrupción (ISR) se llama cuando recibimos datos.
U0IER = IER_RBR;
Finalmente, tenemos la función ISR que necesita hacer cierta tarea cuando recibimos datos del Módulo Wi-Fi ESP8266. Aquí solo leemos el valor recibido del ESP8266 que está presente en el U0RBR y almacenamos esos valores en el UART0_BUFFER. Finalmente, al final de ISR, VICVectAddr debe configurarse con un valor cero o ficticio.
void UART0_ISR () __irq { carácter no firmado IIRValue; IIRValue = U0IIR; IIRValue >> = 1; IIRValue & = 0x02; si (IIRValue == IIR_RDA) { UART_BUFFER = U0RBR; uart0_count ++; if (uart0_count == BUFFER_SIZE) { uart0_count = 0; } } VICVectAddr = 0x0; }
Paso 9: - Como el módulo Wi-Fi ESP8266 debe configurarse en el modo AP, necesitamos enviar los comandos AT respetados desde LPC2148 usando la función UART0_SendString () .
Los comandos AT que se envían a ESP8266 desde LPC2148 se mencionan a continuación. Después de enviar cada comando AT, el ESP8266 responde con "OK"
1. Envía AT a ESP8266
UART0_SendString ("AT \ r \ n"); delay_ms (3000);
2. Envía AT + CWMODE = 2 (configurando ESP8266 en modo AP).
UART0_SendString ("AT + CWMODE = 2 \ r \ n"); delay_ms (3000);
3. Envía AT + CIFSR (para obtener IP de AP)
UART0_SendString ("AT + CIFSR \ r \ n"); delay_ms (3000);
4. Envía AT + CIPMUX = 1 (para múltiples conexiones)
UART0_SendString ("AT + CIPMUX = 1 \ r \ n"); delay_ms (3000);
5. Envía AT + CIPSERVER = 1,80 (para HABILITAR SERVIDOR ESP8266 con OPEN PORT)
UART0_SendString ("AT + CIPSERVER = 1,80 \ r \ n"); delay_ms (3000);
Programación y flasheo de archivos hexadecimales en LPC2148
Para programar ARM7-LPC2148 necesitamos la herramienta keil uVision y Flash Magic. Aquí se utiliza un cable USB para programar ARM7 Stick a través del puerto micro USB. Escribimos código usando Keil y creamos un archivo hexadecimal y luego el archivo HEX se actualiza a la barra ARM7 usando Flash Magic. Para saber más sobre la instalación de keil uVision y Flash Magic y cómo usarlos, siga el enlace Comenzando con el microcontrolador ARM7 LPC2148 y prográmelo usando Keil uVision.
El programa completo se da al final del tutorial.
Nota: Mientras carga el archivo HEX en LPC2148, no debe alimentar el módulo Wi-Fi ESP8266 y el módulo FTDI que está conectado con LPC2148.
Controlar el LED mediante el servidor web ESP8266 IoT con LPC2148
Paso 1: - Después de cargar el archivo HEX en LPC2148, conecte el módulo FTDI a la PC mediante un cable USB y abra el software del terminal de masilla.
Seleccione Serial y luego seleccione el puerto COM de acuerdo con su PC o LAPTOP mío era (COM3). La velocidad en baudios es 9600.
Paso 2: - Ahora reinicie el módulo Wi-Fi ESP8266 o simplemente APAGUE y ENCIENDA nuevamente, la terminal de masilla mostrará la respuesta del módulo Wi-Fi ESP8266 como se muestra a continuación. \
Paso 3: - Ahora presione el botón RESET en el LPC2148. Después de eso, LPC2148 comienza a enviar comandos AT a ESP8266. Podemos ver la respuesta de eso en el terminal de masilla.
Paso 4: - Como puede ver en la imagen de arriba, el ESP8266 está configurado en MODO 2 que es el modo AP y la dirección de APIP es 192.168.4.1. Tenga en cuenta esta dirección porque esta dirección estará codificada en el código HTML de la página web para controlar el LED conectado a LPC2148.
Importante : Cuando el ESP8266 está en modo AP, debe conectar su PC al AP ESP8266. Vea la imagen debajo de mi módulo ESP8266 muestra AP en el nombre de ESP_06217B (está abierto y no tiene contraseña).
Paso 5: - Después de conectar la PC al AP ESP8266, abra un bloc de notas y copie y pegue la siguiente página web del programa HTML. Asegúrese de cambiar la dirección APIP de acuerdo con su módulo Wi-Fi ESP8266
Bienvenido a Circuit Digest
ESP8266 Interfaz con LPC2148: Creación de servidor web para controlar un LED
LED ENCENDIDO LED APAGADOEn esta página HTML, hemos creado dos botones con hipervínculos para encender y apagar el LED de la página web.
Finalmente, guarde el documento del bloc de notas como extensión .html
La página web se mostrará a continuación en el navegador web.
Aquí la dirección es la dirección IP del AP 192.168.4.1 y enviamos valores @ y% para encender y apagar el LED usando esta lógica a continuación en LPC2148.
while (1) { if (uart0_count! = 0) { COMMAND = UART0_BUFFER; if (COMMAND == LEDON) // Lógica para encender o apagar el LED dependiendo del valor recibido de ESP8266 { IOSET1 = (1 << 20); // Establece SALIDA ALTA delay_ms (100); } más si (COMANDO == LEDOFF) { IOCLR1 = (1 << 20); // Establece SALIDA BAJA delay_ms (100); } } }
Así es como se puede controlar un dispositivo de forma remota utilizando ESP8266 y el microcontrolador ARM7 LPC2148. El código completo y el video explicativo se muestran a continuación.