- Componentes necessários
- Módulo ESP8266 Wi-Fi
- Conectando LPC2148 com ESP8266 para comunicação serial
- Diagrama de circuito e conexões
- Etapas envolvidas na programação de UART0 em LPC2148 para interface ESP8266
- Controlando o LED usando ESP8266 IoT Webserver com LPC2148
O transceptor ESP8266 Wi-Fi fornece uma maneira de conectar um microcontrolador à rede. É amplamente utilizado em projetos de IoT, pois é barato, pequeno e fácil de usar. Nós o usamos anteriormente para criar um servidor web usando o servidor web Raspberry e o servidor web Arduino.
Neste tutorial, faremos a interface de um módulo ESP8266 Wi-Fi com o microcontrolador ARM7-LPC2148 e criaremos um servidor web para controlar o LED conectado ao LPC2148. O fluxo de trabalho será assim:
- Envie comandos AT de LPC2148 para ESP8266 para configurar ESP8266 no modo AP
- Conecte o laptop ou computador Wi-Fi com o ponto de acesso ESP8266
- Crie uma página da web em HTML no PC com o endereço IP do ponto de acesso do servidor ESP8266
- Crie um programa para LPC2148 para controlar o LED de acordo com o valor recebido de ESP8266
Se você for totalmente novo no módulo Wi-Fi ESP8266, visite os links abaixo para se familiarizar com o módulo Wi-Fi ESP8266.
- Introdução ao Transceptor Wi-Fi ESP8266 (Parte 1)
- Introdução ao ESP8266 (parte 2): usando comandos AT
- Introdução ao ESP8266 (Parte 3): Programação do ESP8266 com Arduino IDE e atualização da memória
Componentes necessários
Hardware:
- ARM7-LPC2148
- Módulo ESP8266 Wi-Fi
- FTDI (USB para UART TTL)
- CONDUZIU
- IC regulador de tensão de 3,3 V
- Tábua de pão
Programas:
- KEIL uVision
- Ferramenta Flash Magic
- Massa
Módulo ESP8266 Wi-Fi
ESP8266 é um módulo Wi-Fi de baixo custo amplamente utilizado para projetos embarcados que requerem uma baixa potência de 3,3V. Ele usa apenas dois fios TX e RX para comunicação serial e transferência de dados entre ESP8266 e qualquer microcontrolador com porta UART.
Diagrama de pinos para o módulo ESP8266 Wi-Fi
- GND, Terra (0 V)
- TX, transmissão de dados bit X
- GPIO 2, entrada / saída de uso geral nº 2
- CH_PD, desligamento do chip
- GPIO 0, entrada / saída de uso geral nº 0
- RST, Reset
- RX, receber bit de dados X
- VCC, Tensão (+3,3 V)
Configurando a placa de circuito ESP8266
ESP8266 requer um fornecimento constante de 3,3 V e não é amigável para protoboard. Portanto, em nosso tutorial anterior sobre ESP8266, fizemos uma placa de circuito para ESP8266 com regulador de tensão de 3,3 V, um botão RESET e configuração de jumper para modos de comutação (comando AT ou modo flash). Ele também pode ser configurado no breadboard sem usar o perfboard.
Aqui nós soldamos todos os componentes na placa de ensaio para fazer nossa própria placa ESP8266 Wi-Fi
Aprenda a fazer a interface do ESP8266 com vários microcontroladores seguindo os links abaixo:
- Introdução ao ESP8266 (Parte 3): Programação do ESP8266 com Arduino IDE e atualização da memória
- Conectando ESP8266 com STM32F103C8: Criando um servidor da web
- Envio de e-mail usando MSP430 Launchpad e ESP8266
- Interface ESP8266 com Microcontrolador PIC16F877A
- Monitoramento de lixeira baseado em IOT usando Arduino e ESP8266
Todos os projetos baseados em ESP8266 podem ser encontrados aqui.
Conectando LPC2148 com ESP8266 para comunicação serial
Para fazer a interface do ESP8266 com o LPC2148, devemos estabelecer uma comunicação serial UART entre esses dois dispositivos para enviar comandos AT de LPC2148 para ESP8266 para configurar o módulo Wi-Fi ESP8266. Para saber mais sobre os comandos ESP8266 AT, siga o link.
Portanto, para usar a comunicação UART no LPC2148, precisamos inicializar a porta UART no LPC2148. LPC2148 tem duas portas UART integradas (UART0 e UART1).
Pinos UART em LPC2148
UART_Port |
TX_PIN |
RX_PIN |
UART0 |
P0.0 |
P0.1 |
UART1 |
P0.8 |
P0.9 |
Inicializando UART0 em LPC2148
Como sabemos que os pinos do LPC2148 são pinos de uso geral, precisamos usar o registro PINSEL0 para usar o UART0. Antes de inicializar o UART0, vamos saber sobre esses registros UART usados no LPC2148 para usar o recurso UART.
Registros UART em LPC2148
A tabela abaixo mostra alguns registros importantes usados na programação. Em nossos tutoriais futuros, veremos brevemente sobre outros registros usados para UART no LPC2148.
x-0 para UART0 e x-1 para UART1:
REGISTRO |
REGISTRAR NOME |
USAR |
UxRBR |
Registro de buffer de recepção |
Contém valor recebido recentemente |
UxTHR |
Transmitir registro de retenção |
Contém dados a serem transmitidos |
UxLCR |
Registro de controle de linha |
Contém formato de quadro UART (Nº de bits de dados, bit de parada) |
UxDLL |
Divisor Latch LSB |
LSB do valor do gerador de taxa de transmissão UART |
UxDLM |
Divisor Latch MSB |
MSB do valor do gerador de taxa de transmissão UART |
UxIER |
Interromper Habilitar Registro |
É usado para habilitar fontes de interrupção UART0 ou UART1 |
UxIIR |
Registro de identificação de interrupção |
Ele contém o código de status que tem prioridade e fonte de interrupções pendentes |
Diagrama de circuito e conexões
As conexões entre LPC2148, ESP8266 e FTDI são mostradas abaixo
LPC2148 |
ESP8266 |
FTDI |
TX (P0.0) |
RX |
NC |
RX (P0.1) |
TX |
RX |
ESP8266 é alimentado por um regulador de voltagem de 3,3 V e FTDI e LPC2148 são alimentados por USB.
Por que a FTDI está aqui?Neste tutorial, conectamos o pino RX de FTDI (USB para UART TTL) ao pino TX ESP8266, que é conectado posteriormente ao pino RX LPC2148, para que possamos ver a resposta do módulo ESP8266 usando qualquer software de terminal como massa, Arduino IDE. Mas, para isso, defina a taxa de transmissão de acordo com a taxa de transmissão do módulo Wi-Fi ESP8266. (Minha taxa de transmissão é 9600).
Etapas envolvidas na programação de UART0 em LPC2148 para interface ESP8266
Abaixo estão as etapas de programação para conectar o ESP8266 ao LPC2148, o que o tornará compatível com a IoT.
Passo 1: - Primeiro precisamos inicializar os pinos UART0 TX e RX no registro PINSEL0.
(P0.0 como TX e P0.1 como RX) PINSEL0 = PINSEL0 - 0x00000005;
Etapa 2: - Em seguida, em U0LCR (Registro de controle de linha), defina o DLAB (Divisor Latch Access Bit) como 1 para ativá-los e, em seguida, defina o número de bits de parada como 1 e o comprimento do quadro de dados de 8 bits.
U0LCR = 0x83;
Etapa 3: - Agora a etapa importante a ser observada é definir os valores de U0DLL e U0DLM dependendo do valor de PCLK e da taxa de transmissão desejada. Normalmente, para ESP8266, usamos a taxa de transmissão de 9600. Então, vamos ver como definir a taxa de transmissão de 9600 para UART0.
Fórmula para cálculo da taxa de transmissão:
Onde, PLCK: Relógio Periférico em Frequência (MHz)
U0DLM, U0DLL: Registros divisores do gerador de Baud Rate
MULVAL, DIVADDVAL: Esses registros são valores geradores de fração
Para Baud Rate 9600 com PCLK = 15MHZ
MULVAL = 1 & DIVADDVAL = 0
256 * U0DLM + U0DLL = 97,65
Então U0DLM = 0 e obtemos U0DLL = 97 (Fração não permitida)
Portanto, usamos o seguinte código:
U0DLM = 0x00; U0DLL = 0x61; (Valor hexadecimal de 97)
Etapa 4: - Finalmente, devemos fazer com que o DLA (Divisor Latch Access) desabilite definido como 0 no LCR.
Então nós temos
U0LCR & = 0x0F;
Passo 5: - Para Transmitir um Caractere carregue o byte a ser enviado em U0THR e aguarde até que o byte seja transmitido, o que é indicado pelo THRE se tornando ALTO.
vazio UART0_TxChar (char ch) { U0THR = ch; enquanto ((U0LSR & 0x40) == 0); }
Passo 6: - Para transmitir uma string, a função abaixo é usada. Para enviar dados de string um por um, usamos a função de caractere da etapa anterior.
void UART0_SendString (char * str) { uint8_t i = 0; while (str! = '\ 0') { UART0_TxChar (str); i ++; } }
Etapa 7: - Para receber uma string, a função de rotina de serviço de interrupção é usada aqui porque um módulo ESP8266 Wi-Fi transmitirá dados de volta ao pino RX de LPC2148 sempre que enviarmos um comando AT ou sempre que um ESP8266 enviar dados para LPC2148, como enviamos dados para um servidor da web de ESP8266.
Exemplo: Quando enviamos o comando AT para ESP8266 de LPC2148 (“AT \ r \ n”), obtemos uma resposta “OK” do módulo Wi-Fi.
Portanto, usamos uma interrupção aqui para verificar o valor recebido do módulo ESP8266 Wi-Fi, pois a rotina de serviço de interrupção ISR tem a prioridade mais alta.
Portanto, sempre que um ESP8266 envia dados para o pino RX de LPC2148, a interrupção é definida e a função ISR é executada.
Etapa 8: - Para habilitar interrupções para UART0, use o seguinte código
O VICintEnable é um registro de habilitação de interrupção vetorial usado para habilitar a interrupção para UART0.
VICIntEnable - = (1 << 6);
O VICVecCnt10 é um registro de controle de interrupção vetorial que aloca o slot para UART0.
VICVectCntl0 = (1 << 5) - 6;
Em seguida, o VICVectaddr0 é o registrador de endereço de interrupção vetorial que possui o endereço ISR da rotina de serviço de interrupção.
VICVectAddr0 = (sem sinal) UART0_ISR;
Então, temos que atribuir a interrupção para o registro do buffer de recepção RBR. Portanto, no registro de habilitação de interrupção (U0IER), configuramos para RBR. Assim, essa rotina de serviço de interrupção (ISR) é chamada quando recebemos dados.
U0IER = IER_RBR;
Finalmente, temos a função ISR que precisa fazer determinada tarefa quando recebemos dados do Módulo Wi-Fi ESP8266. Aqui, apenas lemos o valor recebido do ESP8266 que está presente no U0RBR e armazenamos esses valores no UART0_BUFFER. Finalmente, no final do ISR, o VICVectAddr deve ser definido com valor zero ou fictício.
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; }
Etapa 9: - Como o módulo ESP8266 Wi-Fi deve ser configurado no modo AP, precisamos enviar os comandos AT respeitados de LPC2148 usando a função UART0_SendString () .
Os comandos AT que são enviados para ESP8266 a partir de LPC2148 são mencionados abaixo. Depois de enviar cada comando AT, o ESP8266 responde com “OK”
1. Envia AT para ESP8266
UART0_SendString ("AT \ r \ n"); delay_ms (3000);
2. Envia AT + CWMODE = 2 (Configuração ESP8266 no modo AP).
UART0_SendString ("AT + CWMODE = 2 \ r \ n"); delay_ms (3000);
3. Envia AT + CIFSR (para obter IP do AP)
UART0_SendString ("AT + CIFSR \ r \ n"); delay_ms (3000);
4. Envia AT + CIPMUX = 1 (para conexões múltiplas)
UART0_SendString ("AT + CIPMUX = 1 \ r \ n"); delay_ms (3000);
5. Envia AT + CIPSERVER = 1,80 (para ATIVAR SERVIDOR ESP8266 com PORTA ABERTA)
UART0_SendString ("AT + CIPSERVER = 1,80 \ r \ n"); delay_ms (3000);
Programando e atualizando arquivo hexadecimal para LPC2148
Para programar o ARM7-LPC2148, precisamos da ferramenta Keil uVision e Flash Magic. Um cabo USB é usado aqui para programar o ARM7 Stick via porta micro USB. Nós escrevemos código usando Keil e criamos um arquivo hexadecimal e então o arquivo HEX é enviado para o stick ARM7 usando Flash Magic. Para saber mais sobre como instalar keil uVision e Flash Magic e como usá-los, siga o link Getting Started With ARM7 LPC2148 Microcontroller e programe-o usando Keil uVision.
O programa completo é fornecido no final do tutorial.
Observação: ao carregar o arquivo HEX para o LPC2148, você não deve alimentar o módulo Wi-Fi ESP8266 e o módulo FTDI que está conectado ao LPC2148.
Controlando o LED usando ESP8266 IoT Webserver com LPC2148
Passo 1: - Após fazer o upload do arquivo HEX para o LPC2148, conecte o módulo FTDI ao PC via cabo USB e abra o software do terminal do putty.
Selecione Serial e selecione a porta COM de acordo com o seu PC ou LAPTOP (COM3). A taxa de transmissão é 9600.
Etapa 2: - Agora reinicie o módulo Wi-Fi ESP8266 ou apenas DESLIGUE e LIGUE-O novamente, o terminal de massa mostrará a resposta do módulo Wi-Fi ESP8266 conforme mostrado abaixo. \
Passo 3: - Agora pressione o botão RESET no LPC2148. Depois disso, o LPC2148 começa a enviar comandos AT para ESP8266. Podemos ver a resposta disso no terminal de massa.
Passo 4: - Como você pode ver na imagem acima o ESP8266 está configurado no MODE 2 que é o modo AP e o endereço do APIP é 192.168.4.1. Anote este endereço porque ele será codificado no código HTML da página da web para controlar o LED conectado ao LPC2148.
Importante : Quando o ESP8266 está no modo AP, você deve conectar seu PC ao AP ESP8266. Veja a imagem abaixo meu módulo ESP8266 mostra AP no nome de ESP_06217B (está aberto e não tem senha).
Etapa 5: - Após conectar o PC ao AP ESP8266, abra um bloco de notas e copie e cole a seguinte página do programa em HTML. Certifique-se de alterar o endereço APIP de acordo com o seu módulo ESP8266 Wi-Fi
Bem-vindo ao Circuit Digest
Interface ESP8266 com LPC2148: Criação de servidor da Web para controlar um LED
LED ON LED OFFNesta página HTML, criamos dois botões com hiperlink para ligar e desligar o LED da página da web.
Por fim, salve o documento do bloco de notas com a extensão .html
A página da web será exibida conforme abaixo no navegador da web.
Aqui o endereço é o endereço IP do AP 192.168.4.1 e enviamos os valores @ e% para ligar e desligar o LED usando a lógica abaixo no LPC2148.
enquanto (1) { if (uart0_count! = 0) { COMMAND = UART0_BUFFER; if (COMMAND == LEDON) // Lógica para definir LED ON ou OFF dependendo do valor recebido de ESP8266 { IOSET1 = (1 << 20); // Define OUTPUT HIGH delay_ms (100); } else if (COMMAND == LEDOFF) { IOCLR1 = (1 << 20); // Define OUTPUT LOW delay_ms (100); } } }
É assim que um dispositivo pode ser controlado remotamente usando o microcontrolador ESP8266 e ARM7 LPC2148. O código completo e o vídeo de explicação são fornecidos abaixo.