- Cosas para recordar antes de comenzar
- Componentes requeridos
- Diagrama de circuito
- Configuración del servidor SMTP2GO para enviar correo electrónico
- Programación del microcontrolador AVR Atmega16 y ESP8266
- Programación de ATmega16 para enviar correo electrónico
- Programación ESP8266 NodeMCU
Atmega16 es un microcontrolador de 8 bits de bajo costo y viene con más GPIO que su versión anterior de microcontroladores. Tiene todos los protocolos de comunicación de uso común como UART, USART, SPI e I2C. Tiene amplias aplicaciones en las industrias de robótica, automoción y automatización debido a su amplio apoyo comunitario y su simplicidad.
Atmega16 no admite ninguno de los protocolos de comunicación inalámbrica, como Wi-Fi y Bluetooth, lo que limita sus áreas de aplicación en dominios como IoT. Para superar esta limitación, se pueden conectar otros controladores que tengan protocolos inalámbricos. Hay varios controladores que admiten protocolos inalámbricos como ESP8266 ampliamente utilizado,
Hoy conectaremos Atmega16 con ESP8266 NodeMCU para que se comunique de forma inalámbrica a través de Internet. ESP8266 NodeMCU es un módulo WiFi ampliamente utilizado con soporte comunitario y bibliotecas fácilmente disponibles. Además, ESP8266 NodeMCU es fácilmente programable con Arduino IDE. ESP8266 se puede interconectar con cualquier microcontrolador:
En este tutorial, el correo electrónico se enviará mediante el módulo ESP8266 NodeMCU y Atmega16. Las instrucciones serán dadas por Atmega16 y cuando ESP8266 reciba las instrucciones, enviará un correo electrónico al destinatario de correo electrónico seleccionado. ATmega16 y ESP8266 NodeMCU se comunicarán mediante comunicación serie UART. Aunque se puede utilizar cualquier protocolo de comunicación para interconectar ATmega16 y ESP8266 NodeMCU como SPI, I2C o UART.
Cosas para recordar antes de comenzar
Tenga en cuenta que el microcontrolador Atmega16 utilizado en este proyecto funciona en un nivel lógico de 5V, mientras que ESP8266 NodeMCU funciona en un nivel lógico de 3.3V. Los niveles lógicos de ambos microcontroladores son diferentes, lo que puede causar una mala comunicación entre Atmega16 y ESP8266 NodeMCU o también puede haber pérdida de datos si no se mantiene el nivel lógico adecuado.
Sin embargo, después de revisar las hojas de datos de ambos microcontroladores, descubrimos que podemos interactuar sin ningún cambio de nivel lógico, ya que todos los pines de ESP8266 NodeMCU son tolerantes desde el nivel de voltaje hasta 6V. Así que está bien seguir adelante con el nivel lógico de 5V. Además, la hoja de datos de Atmega16 establece claramente que el nivel de voltaje por encima de 2V se considera como nivel lógico '1' y ESP8266 NodeMCU funciona con 3.3 V, significa que si ESP8266 NodeMCU está transmitiendo 3.3V, Atmega16 puede tomarlo como nivel lógico '1'. De modo que la comunicación será posible sin utilizar el cambio de nivel lógico. Aunque es libre de usar el cambiador de nivel lógico de 5 a 3.3V.
Consulta todos los proyectos relacionados con ESP8266 aquí.
Componentes requeridos
- Módulo ESP8266 NodeMCU
- Microcontrolador Atmega16 IC
- Oscilador de cristal de 16Mhz
- Dos condensadores de 100nF
- Dos condensadores de 22pF
- Presionar el botón
- Cables de puente
- Tablero de circuitos
- USBASP v2.0
- Led (cualquier color)
Diagrama de circuito
Configuración del servidor SMTP2GO para enviar correo electrónico
Antes de empezar a programar necesitamos un servidor SMTP para enviar correo a través de ESP8266. Hay muchos servidores SMTP disponibles en línea. Aquí, smtp2go.com se utilizará como servidor SMTP.
Entonces, antes de escribir el código, se requerirá el nombre de usuario y la contraseña SMTP. Para obtener estas dos credenciales, siga los pasos a continuación que cubrirán la configuración del servidor SMTP para enviar correos electrónicos con éxito.
Paso 1: - Haga clic en "Probar SMTP2GO gratis" para registrarse con una cuenta gratuita.
Paso 2: - Aparecerá una ventana donde debe ingresar alguna credencial como nombre, identificación de correo electrónico y contraseña.
Paso 3: - Después de registrarse, recibirá una solicitud de activación en el correo electrónico ingresado. Active su cuenta desde el enlace de verificación en el correo electrónico y luego inicie sesión con su identificación de correo electrónico y contraseña.
Paso 4: - Una vez que inicie sesión, obtendrá su nombre de usuario SMTP y su contraseña SMTP. Recuerde o cópielos en su bloc de notas para su uso posterior. Después de esto, haga clic en 'finalizar'.
Paso 5: - Ahora en la barra de acceso de la izquierda, haga clic en "Configuración" y luego en "Usuarios". Aquí puede ver la información relativa al servidor SMTP y al número de PUERTO. Suele ser el siguiente:
Codificar nombre de usuario y contraseña
Ahora tenemos que cambiar el nombre de usuario y la contraseña en formato codificado en base64 con el juego de caracteres ASCII. Para convertir el correo electrónico y la contraseña en formato codificado en base64, utilice un sitio web llamado BASE64ENCODE (https://www.base64encode.org/). Copie el nombre de usuario y la contraseña codificados para su uso posterior:
Una vez finalizados estos pasos, proceda a la programación de ESP8266 NodeMCU y Atmega16 IC.
Programación del microcontrolador AVR Atmega16 y ESP8266
La programación incluirá dos programas, uno para que Atmega16 actúe como remitente de instrucciones y el segundo para que ESP8266 NodeMCU actúe como receptor de instrucciones. Ambos programas se dan al final de este tutorial. Arduino IDE se usa para grabar ESP8266 y el programador USBasp y Atmel Studio se usa para grabar Atmega16.
Un botón y un LED se interconectan con Atmega16 de modo que cuando presionamos el botón, el Atmega16 enviará instrucciones a NodeMCU y NodeMCU enviará un correo electrónico en consecuencia. El LED mostrará el estado de la transmisión de datos. Así que comencemos a programar Atmega16 y luego ESP8266 NodeMCU.
Programación de ATmega16 para enviar correo electrónico
Empiece por definir la frecuencia operativa e incluir todas las bibliotecas necesarias. La biblioteca utilizada viene con el paquete Atmel Studio.
#define F_CPU 16000000UL #include #include
Después de esto, se debe definir la velocidad en baudios para comunicarse con ESP8266. Tenga en cuenta que la velocidad en baudios debe ser similar para ambos controladores, es decir, Atmega16 y NodeMCU. En este tutorial, la velocidad en baudios es 9600.
#define BAUD_PRESCALE ((( F_CPU / (USART_BAUDRATE * 16UL))) - 1)
Los dos registros UBRRL y UBRRH se utilizarán para cargar valores de velocidad en baudios. Los 8 bits inferiores de velocidad en baudios se cargarán en UBRRL y los 8 bits superiores de velocidad en baudios se cargarán en UBRRH. Para simplificar, haga la función de inicialización UART donde la velocidad en baudios se pasará por valor. La función de inicialización de UART incluirá:
- Configuración de bits de transmisión y recepción en el registro UCSRB.
- Seleccionar tamaños de caracteres de 8 bits en el registro UCSRC.
- Carga de los bits superior e inferior de la velocidad de transmisión en el registro UBRRL y UBRRH.
void UART_init (USART_BAUDRATE largo) { UCSRB - = (1 << RXEN) - (1 << TXEN); UCSRC - = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRL = BAUD_PRESCALE; UBRRH = (BAUD_PRESCALE >> 8); }
El siguiente paso será configurar la función para transmitir caracteres. Este paso incluye esperar a que termine el búfer vacío y luego cargar el valor char en el registro UDR. El carácter se pasará solo en función.
void UART_TxChar (char c) { while (! (UCSRA & (1 <
En lugar de transferir caracteres, cree una función para enviar cadenas como se muestra a continuación.
void UART_sendString (char * str) { unsigned char s = 0; while (str! = 0) { UART_TxChar (str); s ++; } }
En la función main () , llame a UART_init () para iniciar la transmisión. Y haga la prueba de eco enviando la cadena TEST a NodeMCU.
UART_init (9600); UART_sendString ("PRUEBA");
Comience a configurar el pin GPIO para LED y pulsador.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); PORTA - = (1 << 1);
Si no se presiona el botón pulsador, mantenga el LED encendido y si se presiona el botón pulsador, comience a transmitir el comando “ENVIAR” a NodeMCU y apague el LED.
if (bit_is_clear (PINA, 1)) { PORTA - = (1 << 0); _delay_ms (20); } más { PORTA & = ~ (1 << 0); _delay_ms (50); UART_sendString ("ENVIAR"); _delay_ms (1200); }
Programación ESP8266 NodeMCU
La programación de NodeMCU incluye la recepción de comandos de Atmega16 y el envío de correo electrónico utilizando un servidor SMTP.
En primer lugar, incluya la biblioteca WIFI, ya que se utilizará Internet para enviar correo electrónico. Defina su ssid y contraseña de WIFI para una conexión exitosa. También defina el servidor SMTP.
#incluir
En la función setup () , configure la velocidad en baudios similar a la velocidad en baudios de Atmega16 como 9600 y conéctese a WIFI y muestre la dirección IP.
Serial.begin (9600); Serial.print ("Conectando a:"); Serial.println (ssid); WiFi.begin (ssid, contraseña); while (WiFi.status ()! = WL_CONNECTED) { retraso (500); Serial.print ("."); }
En la función loop () , lea los bytes de recepción en el pin Rx y conviértalos en forma de cadena.
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 ("la variable es ="); Serial.println (variable); Serial.print ("indata is ="); Serial.println (inData); retraso (20); } Cadena cadena = Cadena (variable);
Si el comando de recepción coincide, envíe un correo electrónico al destinatario llamando a la función sendEmail ().
if (string == "ENVIAR") { sendEmail (); Serial.print ("Correo enviado a:"); Serial.println ("El destinatario"); Serial.println (""); }
Es muy importante configurar el servidor SMTP y sin hacer esto, no se pueden enviar correos electrónicos. También tenga en cuenta que durante la comunicación, establezca una velocidad en baudios similar para ambos controladores.
Así es como ESP8266 se puede interconectar con el microcontrolador AVR para habilitarlo para las comunicaciones de IoT. También verifique el video de trabajo que se muestra a continuación.