- Coses que cal recordar abans de començar
- Components necessaris
- Esquema de connexions
- Configuració del servidor SMTP2GO per a l’enviament de correu electrònic
- Programació del microcontrolador AVR Atmega16 i ESP8266
- Programació d'ATmega16 per a l'enviament de correu electrònic
- Programació ESP8266 NodeMCU
Atmega16 és un microcontrolador de 8 bits de baix cost i inclou més GPIO que la seva versió anterior de microcontroladors. Té tots els protocols de comunicació d’ús habitual com UART, USART, SPI i I2C. Té àmplies aplicacions en la indústria de la robòtica, l’automòbil i l’automatització a causa del seu ampli suport i simplicitat de la comunitat.
Atmega16 no admet cap dels protocols de comunicació sense fils, com ara Wi-Fi i Bluetooth, que limita les seves àrees d'aplicació en dominis com l'IoT. Per superar aquesta limitació es poden connectar altres controladors que tenen protocols sense fils. Hi ha nombrosos controladors que admeten protocols sense fils com l’SP8266 àmpliament utilitzat,
Avui farem una interfície amb Atmega16 amb ESP8266 NodeMCU per fer-lo comunicar sense fils a través d'Internet. ESP8266 NodeMCU és un mòdul WiFi àmpliament utilitzat amb suport comunitari i biblioteques fàcilment disponibles. També ESP8266 NodeMCU és fàcilment programable amb Arduino IDE. ESP8266 es pot connectar amb qualsevol microcontrolador:
En aquest tutorial, s’enviarà un correu electrònic mitjançant el mòdul ESP8266 NodeMCU i Atmega16. Atmega16 les donarà i quan ESP8266 les rebi, enviarà un correu electrònic al destinatari seleccionat. ATmega16 i ESP8266 NodeMCU es comunicaran mitjançant comunicació serial UART. Tot i que es pot utilitzar qualsevol protocol de comunicació per a la interfície ATmega16 i ESP8266 NodeMCU, com ara SPI, I2C o UART.
Coses que cal recordar abans de començar
Recordeu que el microcontrolador ATmega16 utilitzada en aquest projecte funciona al nivell de la lògica de 5V mentre que ESP8266 NodeMCU funciona a nivell lògic 3.3V. Els nivells lògics dels dos microcontroladors són diferents, cosa que pot provocar una mala comunicació entre Atmega16 i ESP8266 NodeMCU o també hi pot haver pèrdua de dades si no es manté el nivell lògic adequat.
Tanmateix, després d’haver revisat els fulls de dades d’ambdós microcontroladors, hem descobert que podem connectar-nos sense cap canvi lògic de nivell ja que tots els pins de l’ESP8266 NodeMCU són tolerants des del nivell de voltatge fins a 6V. Per tant, està bé seguir endavant amb un nivell lògic de 5V. A més, el full de dades d’Atmega16 indica clarament que el nivell de voltatge superior a 2V es considera com a nivell lògic ‘1’ i que ESP8266 NodeMCU funciona amb 3,3 V, vol dir que si l’ES8266 NodeMCU està transmetent 3,3 V, Atmega16 el pot prendre com a nivell lògic ‘1’. Per tant, la comunicació serà possible sense fer servir el canvi lògic de nivell. Tot i que podeu utilitzar el canvi de nivell lògic de 5 a 3,3V.
Consulteu aquí tots els projectes relacionats amb l’ESP8266.
Components necessaris
- Mòdul ESP8266 NodeMCU
- CI de microcontrolador Atmega16
- Oscil·lador de vidre de 16 MHz
- Dos condensadors 100nF
- Dos condensadors de 22pF
- Polsador
- Jumper Wires
- Taula de pa
- USBASP v2.0
- Led (qualsevol color)
Esquema de connexions

Configuració del servidor SMTP2GO per a l’enviament de correu electrònic
Abans de començar a programar, necessitem un servidor SMTP per enviar correu mitjançant ESP8266. Hi ha un munt de servidors SMTP disponibles en línia. Aquí, smtp2go.com s’utilitzarà com a servidor SMTP.
Per tant, abans d’escriure el codi, caldrà el nom d’usuari i la contrasenya SMTP. Per obtenir aquestes dues credencials, seguiu els passos següents que descriuran la configuració del servidor SMTP per enviar correus electrònics amb èxit.
Pas 1: - Feu clic a "Prova SMTP2GO gratuït" per registrar-vos amb un compte gratuït.

Pas 2: apareixerà una finestra on haureu d'introduir algunes credencials com el nom, l'identificador de correu electrònic i la contrasenya.

Pas 3: - Després de registrar-vos, rebreu una sol·licitud d'activació al correu electrònic introduït. Activeu el compte des de l'enllaç de verificació al correu electrònic i, a continuació, inicieu la sessió amb el vostre identificador de correu electrònic i la vostra contrasenya.
Pas 4: - Un cop hàgiu iniciat la sessió, obtindreu el vostre nom d'usuari i contrasenya SMTP. Recordeu-los o copieu-los al vostre bloc de notes per a un ús posterior. Després d'això, feu clic a "acabar".

Pas 5: - Ara, a la barra d'accés esquerra, feu clic a "Configuració" i després a "Usuaris". Aquí podeu veure la informació relativa al servidor SMTP i al número de PORT. Sol ser el següent:

Codifiqueu el nom d’usuari i la contrasenya
Ara hem de canviar el nom d’usuari i la contrasenya en format codificat base64 amb conjunt de caràcters ASCII. Per convertir el correu electrònic i la contrasenya en format codificat base64, utilitzeu un lloc web anomenat BASE64ENCODE (https://www.base64encode.org/). Copieu el nom d'usuari i la contrasenya codificats per a un ús posterior:

Un cop finalitzats aquests passos, procediu a la programació de ESP8266 NodeMCU i Atmega16 IC.
Programació del microcontrolador AVR Atmega16 i ESP8266
La programació inclourà dos programes, un per a que Atmega16 actuï com a emissor d’instruccions i un segon per a que ESP8266 NodeMCU actuï com a receptor d’instruccions. Tots dos programes es donen al final d’aquest tutorial. Arduino IDE s’utilitza per gravar un programador ESP8266 i USBasp i Atmel Studio s’utilitza per gravar Atmega16.
Un polsador i un LED es relacionen amb Atmega16, de manera que quan premem el botó, Atmega16 enviarà instruccions a NodeMCU i NodeMCU enviarà un correu electrònic en conseqüència. El LED mostrarà l'estat de la transmissió de dades. Comencem, doncs, la programació Atmega16 i després ESP8266 NodeMCU.

Programació d'ATmega16 per a l'enviament de correu electrònic
Comenceu definint la freqüència de funcionament i incloent totes les biblioteques necessàries. La biblioteca utilitzada inclou el paquet Atmel Studio.
#define F_CPU 16000000UL #include #include
Després d'això, s'ha de definir la velocitat en bauds per comunicar-se amb ESP8266. Tingueu en compte que la velocitat en bauds ha de ser similar per als dos controladors, és a dir, Atmega16 i NodeMCU. En aquest tutorial, la velocitat de transmissió és de 9600.
#define BAUD_PRESCALE ((( F_CPU / (USART_BAUDRATE * 16UL)))) - 1)
Els dos registres UBRRL i UBRRH s’utilitzaran per carregar valors de velocitat en bauds. Els 8 bits de velocitat en bauds més baixos es carregaran en UBRRL i els 8 bits superiors de velocitat en bauds es carregaran en UBRRH. Per simplificar, feu la funció de la inicialització UART on la velocitat de transmissió es transmetrà per valor. La funció d'inicialització UART inclourà:
- Configuració dels bits de transmissió i recepció al registre UCSRB.
- Selecció de mides de caràcters de 8 bits al registre UCSRC.
- Càrrega de bits inferior i superior de velocitat en Baud al registre UBRRL i UBRRH.
void UART_init (USART_BAUDRATE llarg) { UCSRB - = (1 << RXEN) - (1 << TXEN); UCSRC - = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRL = BAUD_PRESCALE; UBRRH = (BAUD_PRESCALE >> 8); }
El següent pas serà configurar la funció per transmetre caràcters. Aquest pas inclou esperar que el buffer buit finalitzi i, a continuació, carregueu el valor de la càrrega al registre UDR. El caràcter només es passarà en funció.
void UART_TxChar (char c) { while (! (UCSRA & (1 <
En lloc de transferir caràcters, feu una funció per enviar cadenes com les següents.
void UART_sendString (char * str) { unsigned char s = 0; while (str! = 0) { UART_TxChar (str); s ++; } }
A la funció main () , truqueu a UART_init () per iniciar la transmissió. I feu la prova de ressò enviant la cadena TEST a NodeMCU.
UART_init (9600); UART_sendString ("PROVA");
Comenceu a configurar el pin GPIO per al LED i el botó de pressió.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); PORTA - = (1 << 1);
Si no es prem el botó, mantingueu el LED encès i, si premeu el botó, comenceu a transmetre l' ordre "SEND" a NodeMCU i apagueu el LED.
if (bit_is_clear (PINA, 1)) { PORTA - = (1 << 0); _delay_ms (20); } else { PORTA & = ~ (1 << 0); _delay_ms (50); UART_sendString ("ENVIAR"); _delay_ms (1200); }
Programació ESP8266 NodeMCU
La programació de NodeMCU inclou la recepció d’ordres des d’Atmega16 i l’enviament de correu electrònic mitjançant un servidor SMTP.
En primer lloc, incloeu la biblioteca WIFI, ja que s'utilitzarà Internet per enviar correus electrònics. Definiu el vostre ssid i contrasenya WIFI per a una connexió correcta. Definiu també el servidor SMTP.
#incloure
A la funció setup () , configureu la velocitat de transmissió similar a la velocitat de transmissió d’Atmega16 com a 9600 i connecteu-vos a WIFI i visualitzeu l’adreça IP.
Serial.begin (9600); Serial.print ("Connexió a:"); Serial.println (ssid); WiFi.begin (ssid, contrasenya); while (WiFi.status ()! = WL_CONNECTED) { demora (500); Serial.print ("."); }
A la funció loop () , llegiu els bytes de recepció al pin Rx i converteix-lo en forma de cadena.
if (Serial.available ()> 0) { while (Serial.available ()> 0 && index1 <6) { delay (100); inChar = Serial.read (); inData = inChar; índex1 ++; inData = '\ 0'; } variable.toUpperCase (); for (byte i = 0; i <6; i ++) { variable.concat (String (inData)); } Serial.print ("variable és ="); Serial.println (variable); Serial.print ("indata is ="); Serial.println (inData); retard (20); } Cadena de cadenes = Cadena (variable);
Si l'ordre de recepció coincideix, envieu un correu electrònic al destinatari trucant a la funció sendEmail ().
if (string == "ENVIAR") { sendEmail (); Serial.print ("Correu enviat a:"); Serial.println ("El destinatari"); Serial.println (""); }

És molt important configurar el servidor SMTP i, sense fer-ho, no es poden enviar correus electrònics. Tingueu en compte també que, mentre feu la comunicació, configureu una velocitat de transmissió similar per als dos controladors.
Així doncs , així es pot interactuar ESP8266 amb el microcontrolador AVR per habilitar-lo per a comunicacions IoT. Consulteu també el vídeo de treball que es mostra a continuació.
