- Coisas para lembrar antes de começar
- Componentes necessários
- Diagrama de circuito
- Configurando o servidor SMTP2GO para envio de e-mail
- Programando Microcontrolador AVR Atmega16 e ESP8266
- Programando ATmega16 para enviar e-mail
- Programação ESP8266 NodeMCU
O Atmega16 é um microcontrolador de 8 bits de baixo custo e vem com mais número de GPIOs do que sua versão anterior de microcontroladores. Possui todos os protocolos de comunicação comumente usados, como UART, USART, SPI e I2C. Ele tem amplas aplicações nas indústrias de robótica, automotiva e automação devido ao seu amplo suporte comunitário e simplicidade.
O Atmega16 não oferece suporte a nenhum dos protocolos de comunicação sem fio, como Wi-Fi e Bluetooth, o que limita suas áreas de aplicação em domínios como IoT. Para superar essa limitação, outros controladores podem fazer a interface com protocolos sem fio. Existem vários controladores que suportam protocolos sem fio, como o amplamente utilizado ESP8266,
Hoje faremos a interface do Atmega16 com o ESP8266 NodeMCU para que ele se comunique sem fio através da internet. ESP8266 NodeMCU é um módulo WiFi amplamente utilizado com suporte da comunidade e bibliotecas facilmente disponíveis. Além disso, o ESP8266 NodeMCU é facilmente programável com o Arduino IDE. ESP8266 pode ter interface com qualquer microcontrolador:
Neste tutorial, o e-mail será enviado usando o módulo ESP8266 NodeMCU e Atmega16. As instruções serão fornecidas pelo Atmega16 e quando o ESP8266 receber as instruções, ele enviará um email para o destinatário do email selecionado. ATmega16 e ESP8266 NodeMCU irão se comunicar pela comunicação serial UART. Embora qualquer protocolo de comunicação possa ser usado para fazer a interface ATmega16 e ESP8266 NodeMCU, como SPI, I2C ou UART.
Coisas para lembrar antes de começar
Observe que o microcontrolador Atmega16 usado neste projeto funciona no nível lógico de 5V, enquanto o ESP8266 NodeMCU funciona no nível lógico de 3,3V. Os níveis lógicos de ambos os microcontroladores são diferentes, o que pode causar alguma falha de comunicação entre o Atmega16 e o NodeMCU ESP8266 ou também pode haver perda de dados se o nível lógico adequado não for mantido.
No entanto, depois de passar pelas planilhas de dados de ambos os microcontroladores, descobrimos que podemos fazer interface sem qualquer mudança de nível lógico, já que todos os pinos do ESP8266 NodeMCU são tolerantes do nível de tensão até 6V. Portanto, é bom prosseguir com o nível lógico de 5V. Além disso, a folha de dados do Atmega16 afirma claramente que o nível de tensão acima de 2 V é considerado como nível lógico '1' e ESP8266 NodeMCU funciona em 3,3 V, isso significa que se ESP8266 NodeMCU está transmitindo 3,3 V, então Atmega16 pode considerá-lo como nível lógico '1'. Portanto, a comunicação será possível sem usar a mudança de nível lógico. Embora você esteja livre para usar o deslocador de nível lógico de 5 para 3,3V
Confira todos os projetos relacionados ao ESP8266 aqui.
Componentes necessários
- Módulo ESP8266 NodeMCU
- Atmega16 Microcontrolador IC
- Oscilador de cristal de 16 MHz
- Dois capacitores 100nF
- Dois capacitores 22pF
- Botão de apertar
- Jumper Wires
- Tábua de pão
- USBASP v2.0
- Led (qualquer cor)
Diagrama de circuito
Configurando o servidor SMTP2GO para envio de e-mail
Antes de iniciar a programação, precisamos de um servidor SMTP para enviar e-mail através do ESP8266. Existem muitos servidores SMTP disponíveis online. Aqui, smtp2go.com será usado como servidor SMTP.
Portanto, antes de escrever o código, o nome de usuário e a senha SMTP serão necessários. Para obter essas duas credenciais, siga as etapas abaixo que abordarão a configuração do servidor SMTP para enviar e-mails com êxito.
Passo 1: - Clique em “Try SMTP2GO Free” para se registrar com uma conta gratuita.
Passo 2: - Uma janela irá aparecer, onde você precisa inserir algumas credenciais como nome, id de email e senha.
Passo 3: - Após o cadastro, você receberá uma solicitação de ativação no e-mail informado. Ative sua conta no link de verificação no e-mail e, em seguida, faça o login usando seu id de e-mail e senha.
Etapa 4: - Depois de fazer login, você obterá seu nome de usuário e senha SMTP. Lembre-se ou copie-os para o seu bloco de notas para uso posterior. Depois disso, clique em 'terminar'.
Passo 5: - Agora na barra de acesso esquerda, clique em “Configurações” e depois em “Usuários”. Aqui, você pode ver as informações sobre o servidor SMTP e o número da PORTA. Geralmente é o seguinte:
Codificar nome de usuário e senha
Agora temos que alterar o nome de usuário e a senha no formato codificado em base64 com conjunto de caracteres ASCII. Para converter o e-mail e a senha no formato codificado em base64, use um site chamado BASE64ENCODE (https://www.base64encode.org/). Copie o nome de usuário e a senha codificados para uso posterior:
Após finalizar essas etapas proceda para a programação do ESP8266 NodeMCU e Atmega16 IC.
Programando Microcontrolador AVR Atmega16 e ESP8266
A programação incluirá dois programas, um para Atmega16 para atuar como emissor de instruções e o segundo para ESP8266 NodeMCU para atuar como receptor de instruções. Ambos os programas são fornecidos no final deste tutorial. O IDE do Arduino é usado para gravar o programador ESP8266 e USBasp e o Atmel Studio é usado para gravar o Atmega16.
Um botão e um LED têm interface com o Atmega16 para que, quando pressionamos o botão, o Atmega16 enviará instruções para o NodeMCU e o NodeMCU enviará o e-mail de acordo. O LED mostrará o status da transmissão de dados. Então, vamos começar a Programar Atmega16 e depois ESP8266 NodeMCU.
Programando ATmega16 para enviar e-mail
Comece definindo a frequência operacional e incluindo todas as bibliotecas necessárias. A biblioteca usada vem com o Atmel Studio Package.
#define F_CPU 16000000UL #include #include
Depois disso, a taxa de baud deve ser definida para se comunicar com ESP8266. Observe que a taxa de transmissão deve ser semelhante para ambos os controladores, ou seja, Atmega16 e NodeMCU. Neste tutorial, a taxa de transmissão é 9600.
#define BAUD_PRESCALE ((( F_CPU / (USART_BAUDRATE * 16UL))) - 1)
Os dois registradores UBRRL e UBRRH serão usados para carregar os valores da taxa de transmissão. Os 8 bits mais baixos da taxa de bauds serão carregados no UBRRL e os 8 bits mais baixos da taxa de bauds serão carregados no UBRRH. Para simplificar, faça função de inicialização UART onde a taxa de bauds será passada por valor. A função de inicialização UART incluirá:
- Definir bits de transmissão e recepção no registro UCSRB.
- Selecionando tamanhos de caracteres de 8 bits no registro UCSRC.
- Carregamento dos bits inferior e superior da taxa de transmissão no registro UBRRL e UBRRH.
void UART_init (long USART_BAUDRATE) { UCSRB - = (1 << RXEN) - (1 << TXEN); UCSRC - = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRL = BAUD_PRESCALE; UBRRH = (BAUD_PRESCALE >> 8); }
O próximo passo será configurar a função de transmissão de caracteres. Esta etapa inclui esperar que o buffer vazio termine e então carregar o valor char no registro UDR. O char será passado apenas em função.
void UART_TxChar (char c) { while (! (UCSRA & (1 <
Em vez de transferir caracteres, crie uma função para enviar strings como abaixo.
void UART_sendString (char * str) { unsigned char s = 0; enquanto (str! = 0) { UART_TxChar (str); s ++; } }
Na função main () , chame UART_init () para iniciar a transmissão. E faça o teste de eco enviando a string TEST para NodeMCU.
UART_init (9600); UART_sendString ("TESTE");
Comece a configurar o pino GPIO para LED e botão de pressão.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); PORTA - = (1 << 1);
Se o botão não for pressionado, mantenha o LED LIGADO e se o botão for pressionado, comece a transmitir o comando “ENVIAR” para o NodeMCU e desligue o LED.
if (bit_is_clear (PINA, 1)) { PORTA - = (1 << 0); _delay_ms (20); } else { PORTA & = ~ (1 << 0); _delay_ms (50); UART_sendString ("SEND"); _delay_ms (1200); }
Programação ESP8266 NodeMCU
A programação do NodeMCU inclui a recepção do comando do Atmega16 e o envio de e-mail usando um servidor SMTP.
Em primeiro lugar, inclua a biblioteca WIFI, pois a Internet será usada para enviar e-mail. Defina seu SSID e senha WIFI para uma conexão bem-sucedida. Defina também o servidor SMTP.
#incluir
Na função setup () , defina a taxa de baud semelhante à taxa de baud Atmega16 como 9600 e conecte ao WIFI e exiba o endereço IP.
Serial.begin (9600); Serial.print ("Conectando a:"); Serial.println (ssid); WiFi.begin (ssid, senha); enquanto (WiFi.status ()! = WL_CONNECTED) { delay (500); Serial.print ("."); }
Na função loop () , leia os bytes recebidos no pino Rx e converta-os para a forma de string.
if (Serial.available ()> 0) { while (Serial.available ()> 0 && index1 <6) { delay (100); inChar = Serial.read (); inData = inChar; index1 ++; inData = '\ 0'; } variable.toUpperCase (); para (byte i = 0; i <6; i ++) { variable.concat (String (inData)); } Serial.print ("variável é ="); Serial.println (variável); Serial.print ("indata é ="); Serial.println (inData); atraso (20); } String string = String (variável);
Se o comando de recebimento for correspondido, envie um e-mail ao destinatário chamando a função sendEmail ().
if (string == "ENVIAR") { sendEmail (); Serial.print ("Correio enviado para:"); Serial.println ("O destinatário"); Serial.println (""); }
É muito importante configurar o servidor SMTP e, sem isso, nenhum e-mail pode ser enviado. Observe também que, durante a comunicação, defina a taxa de transmissão semelhante para ambos os controladores.
Portanto, é assim que o ESP8266 pode ser conectado ao microcontrolador AVR para habilitá-lo para comunicações IoT. Verifique também o vídeo de trabalho fornecido abaixo.