- Materiais requisitados:
- Programando o microcontrolador PIC:
- Funções na biblioteca ESP8266:
- Programa de amostra:
- Saída de simulação:
- Verificação de saída:
- Adicionando funções à Biblioteca ESP8266:
Neste artigo, vamos discutir como fazer a interface do módulo WIFI ESP8266 com um microcontrolador PIC. Até agora, você pode ter usado o módulo ESP8266 como um microcontrolador autônomo ou pode tê-lo usado com a biblioteca Arduino. Mas, quando se trata de projetos de sistema embarcado hardcore, devemos saber como usá-lo com microcontroladores PIC também. Isso ajudará você a personalizar seus projetos na perspectiva do design e, ao mesmo tempo, torná-los baratos.
Os módulos ESP8266 vêm com um firmware padrão carregado nele, portanto, podemos programar o módulo usando comandos AT. Esses comandos devem ser enviados por meio de um canal de comunicação serial. Este canal é estabelecido entre o PIC e o módulo ESP8266 usando o módulo USART no microcontrolador PIC . Todo o funcionamento será monitorado e informado ao usuário por meio de um display LCD 16x2. Portanto, este tutorial presume que você tenha algum conhecimento básico sobre o módulo USART no PIC, interface de LCD com PIC e uso de comandos AT no ESP8266. Caso contrário, você pode recorrer aos tutoriais vinculados para aprendê-los de antemão.
Materiais requisitados:
Você precisaria do seguinte hardware para concluir este tutorial
- PIC16F877A
- Oscilador de cristal de 20 MHz
- 7805
- LM317
- ESP8266
- Visor LCD 16 * 2
- Programador PicKit3
- Resistores (1K, 220ohm, 360ohm)
- Capacitores (1uF, 0,1uF, 33pF)
- Fios de ligação
- Adaptador 12V para alimentar o módulo PIC e ESP
Hardware:
O esquema completo do projeto é mostrado aqui abaixo
O esquema consiste em dois circuitos reguladores de tensão, um é um regulador de + 5 V que é usado para alimentar o microcontrolador PIC e o outro é um regulador de 3,3 V que alimenta o módulo ESP8266. O + 5V é regulado usando um 7805 (Linear Voltage Regulator IC). 3.3 V é regulado usando LM317 (Regulador de Tensão Variável). O módulo ESP8266 consome muita corrente (~ 800mA), portanto, se você estiver projetando sua própria fonte de alimentação, certifique-se de que ela pode fornecer corrente alta. Certifique-se também de que os pinos de aterramento do PIC e do módulo ESP8266 estejam conectados juntos.
Portanto, agora sabemos que o PIC opera em + 5V e o ESP8266 opera em 3,3V volts. Para estabelecer uma comunicação USART entre esses dois módulos, precisamos ter um circuito conversor lógico 5V - 3,3V, conforme mostrado na figura acima. Este circuito nada mais é do que um divisor de potencial que simplesmente converte os + 5V de entrada em 3,3V. Isso impedirá que o pino RX tolerável de 3,3 V do ESP8266 obtenha + 5 V.
Eu fiz os módulos PIC e ESP em duas placas de desempenho separadas, conforme mostrado nestes tutoriais. Assim, posso usá-los universalmente para projetos mais semelhantes
- Hardware LED usando PIC
- Primeiros passos com ESP8266
Você pode seguir o mesmo, ou construir sua própria placa em seu estilo ou simplesmente conectar o circuito acima a uma placa de ensaio.
Programando o microcontrolador PIC:
Para programar o microcontrolador PIC para enviar “comandos AT” em série usando USART para o módulo ESP8266, temos que usar uma biblioteca. Esta biblioteca vai lhe poupar muito trabalho, como usar os módulos de instrução ESP8266 para verificar cada um dos comandos AT e, em seguida, encontrar uma maneira de transmiti-los ao módulo ESP. Esta biblioteca é um software livre originalmente desenvolvido por Camil Staps e posteriormente foi melhorado e modificado pela Circuit Digest para que possa ser usado com nosso Microcontrolador PIC16F877A. Você pode baixá-lo aqui
A biblioteca ainda está em desenvolvimento, mas você pode usar a maioria dos comandos AT importantes no firmware ESP8266. Se você descobrir que algum dos comandos de que precisa está faltando, informe-nos na seção de comentários e tentarei adicioná-lo para você. Este tutorial irá explicar todos os comandos (até agora) que podem ser usados por esta biblioteca. Além disso, também irá guiá-lo para adicionar suas próprias funções à biblioteca.
Funções na biblioteca ESP8266:
- Initialize_ESP8266 (): Esta função irá inicializar o módulo USART do PIC para se comunicar com o módulo ESP8266. Ele define a taxa de transmissão em 115200 e prepara o pino Rx e Tx do PIC para a comunicação USART.
- _esp8266_putch (): esta função é usada para enviar um único caractere serialmente para o módulo ESP8266. Por exemplo, _esp8266_putch ('a') enviará o caractere a em série para o módulo ESP.
- _esp8266_getch (): esta função é usada para obter um único caractere do módulo ESP. Por exemplo, se o ESP está imprimindo “OK” e usamos char a = _esp8266_getch (). Então, o caractere 'o' será armazenado na variável a.
- ESP8266_send_string (): esta função é a versão string de _esp8266_putch (). Ele pode enviar uma string completa para o módulo ESP8266. Por exemplo, ESP8266_send_string (“AT / r / n”) enviará o comando “AT” para o módulo ESP8266.
- esp8266_isStarted (): É usado para verificar se o PIC pode se comunicar com o módulo ESP. Envia o comando “AT” e aguarda “OK” se recebido retorna verdadeiro senão retorna falso.
- esp8266_restart (): Reinicia o módulo ESP8266 e retorna verdadeiro se a reinicialização for bem-sucedida e retorna falso se não tiver êxito.
- esp8266_mode (): usado para definir o modo de trabalho do módulo ESP8266. Como sabemos, pode funcionar em três modos diferentes.
Modo estação |
|
Modo SoftAP |
|
Modo Estação e AP |
- esp8266_connect (): Permite que você se conecte a um sinal wi-fi. Por exemplo esp8266_connect (“home”, “12345678”) , permitirá que seu módulo se conecte ao sinal wi-fi chamado home, cuja senha é 12345678.
- esp8266_disconnect (): Esta função desconecta seu módulo de qualquer conexão wi-fi que foi conectada anteriormente
- esp8266_ip (): Obtém o endereço IP e o retorna. Use esta função se quiser saber o endereço IP do módulo ESP8266.
- esp8266_start (): Esta função é usada para iniciar uma comunicação TCP ou UDP. Por exemplo esp8266_start ( "TCP", "192.168.101.110", 80) . Irá iniciar uma rede TCP nesse IP e porta 80.
- esp8266_send (): Esta função é usada para enviar informações para a rede TCP / UDP. O script HTML será enviado usando este comando. Então este script aparecerá no endereço IP no qual a comunicação foi estabelecida anteriormente.
- esp8266_config_softAP (): Esta função é usada para configurar o softAP. Por exemplo esp8266_config_softAP (“escritório”, ”12345678”); irá criar um sinal Wifi chamado office e a senha 12345678 deve ser usada para acessá-lo.
- esp8266_get_stationIP (): Esta função irá retornar o endereço IP / MAC dos clientes que estão conectados ao seu softAP.
Programa de amostra:
Agora que entendemos as funções de cada um dos comandos da biblioteca, vamos examinar um pequeno programa de amostra. Neste programa, verificaremos se a conexão entre ESP8266 e PIC foi bem-sucedida e, em seguida, criaremos uma rede WIFI (SoftAP) com nome e senha preferenciais. O programa completo e a simulação do mesmo serão explicados para sua compreensão.
Novamente, se você não leu nosso tutorial de interface PIC com LCD e PIC USART, por favor leia o, antes de continuar, porque só assim fará sentido para você.
Como estamos apenas começando a fazer a interface do PIC com o ESP8266, usei um LCD para ter certeza de que as coisas estão funcionando corretamente.
faça {Lcd_Set_Cursor (1,1); Lcd_Print_String ("ESP não encontrado"); } while (! esp8266_isStarted ()); // espere até que o ESP envie "OK" de volta Lcd_Set_Cursor (1,1); Lcd_Print_String ("ESP está conectado"); __delay_ms (1500); Lcd_Clear ();
Quando enviamos o “AT” para o módulo ESP8266, ele responde com um “OK”. Isso nos garante que o módulo ESP8266 foi conectado com sucesso. A função esp8266_isStarted () é usada para o mesmo. Enviamos o sinal AT do PIC e esperamos até que o módulo ESP seja ativado e nos envie um OK. Se obtivermos um OK, exibiremos que o “ESP está conectado” no LCD.
esp8266_mode (2); Lcd_Set_Cursor (1,1); Lcd_Print_String ("ESP definido como AP"); __delay_ms (1500); Lcd_Clear ();
As linhas de código acima são usadas para definir o módulo ESP para funcionar no modo “AP suave”. A função esp8266_mode (2); envia os comandos AT “AT + CWMODE = 3” para o módulo e espera que o módulo responda com “OK”
/ * Configure o nome e a senha do AP * / esp8266_config_softAP ("CircuitDigest", "619007123"); Lcd_Set_Cursor (1,1); Lcd_Print_String ("AP configurado"); __delay_ms (1500); Lcd_Clear (); / * AP configurado * /
Este segmento do código é usado para configurar o softAP. Aqui, nomeamos o SSID como “CircuitDigest” e a senha como “619007123”. Para indicar que o processo está completo esperaremos que o módulo responda com “OK” e então imprimiremos o AP configurado na tela LCD.
Isso é agora que fizemos a interface do módulo ESP8266 com o PIC MCU e configuramos o softAP com um nome e senha de nossa escolha. Como de costume, vamos simular esse código e ver como funciona.
Saída de simulação:
Estamos usando o software Proteus para simular a saída. O arquivo do projeto para o mesmo pode ser encontrado no anexo.
Como não temos um módulo ESP8266 na biblioteca Proteus, usamos o terminal Serial e respondemos como um usuário ao módulo PIC. A simulação, uma vez concluída a tela, será semelhante a abaixo
A saída do nosso código é mostrada no terminal Virtual. O funcionamento completo da simulação será explicado no vídeo abaixo.
Verificação de saída:
Depois que o programa for verificado usando a simulação, despeje-o em seu microcontrolador PIC. Faça as conexões conforme mostrado no esquema acima (seção Hardware). Você deve ser capaz de acompanhar seu progresso por meio do visor LCD.
Assim que o LCD disser que o AP está configurado, podemos verificar isso usando as configurações de WIFI no telefone ou laptop. Meu laptop mostra o seguinte sinal de acordo com nosso programa.
É isso, pessoal, estabelecemos a interface com sucesso do módulo ESP8266 com o microcontrolador PIC. Esta é uma interface muito básica e se você quiser fazer qualquer projeto complicado usando o ESP8266, você pode ter que adicionar suas próprias bibliotecas ou pelo menos adicionar suas próprias funções. Acredite em mim, é muito fácil fazer isso, vou dar uma breve visão sobre o mesmo.
Adicionando funções à Biblioteca ESP8266:
Adicionar sua própria função ajudará você a enviar qualquer comando “AT” para o módulo ESP8266. Para prosseguir, você precisa ler a documentação do conjunto de instruções do módulo ESP8266. Você pode enviar diretamente qualquer comando AT que encontrar no manual do conjunto de instruções. Mas lembre-se sempre de acrescentar “/ r / n” ao final de cada comando AT. Por exemplo, se você deseja estabelecer várias conexões com o módulo ESP. Em seguida, abra a documentação do conjunto de instruções e descubra qual comando AT fará esse trabalho para você. Aqui, o comando “AT + CIPMUX = 1” permitirá que você estabeleça conexões múltiplas com seu módulo ESP.
Agora tudo que você precisa fazer é enviar este “AP + CIPMUX = 1” para o seu módulo ESP8266 usando a porta serial. A maneira mais radical de fazer isso é simplesmente usar o comando
_esp8266_print ("AT + CIPMUX = 1 \ r \ n" ")
Isso funcionará, mas não é a melhor maneira de fazer isso. Você tem que ler de volta o que seu ESP8266 responde ao seu comando. No nosso caso, ele responderá com “OK”. Portanto, você tem que ler os dados de entrada do módulo ESP8266 e confirmar que está um “OK”. Além disso, você pode fazer esta função onde “1” ou “0” podem ser passados como argumentos.
Vá em frente e tente fazer suas próprias funções para a biblioteca. Mas se você precisar de ajuda, sinta-se à vontade para usar a seção de comentários e eu irei ajudá-lo.