- Lucruri de reținut înainte de a începe
- Componente necesare
- Diagrama circuitului
- Configurarea serverului SMTP2GO pentru trimiterea e-mailului
- Programarea microcontrolerului AVR Atmega16 și ESP8266
- Programarea ATmega16 pentru trimiterea e-mailului
- Programare ESP8266 NodeMCU
Atmega16 este un microcontroler de 8 biți cu cost redus și vine cu un număr mai mare de GPIO decât versiunea sa anterioară de microcontrolere. Are toate protocoalele de comunicații utilizate în mod obișnuit precum UART, USART, SPI și I2C. Are aplicații largi în industria robotică, a automobilelor și a automatizărilor datorită sprijinului său larg al comunității și simplității sale.
Atmega16 nu acceptă niciunul dintre protocoalele de comunicații fără fir, cum ar fi Wi-Fi și Bluetooth, care limitează domeniile sale de aplicații în domenii precum IoT. Pentru a depăși această limitare pot fi interfațate alte controlere care au protocoale wireless. Există un număr de controlere care acceptă protocoale wireless, cum ar fi ESP8266 utilizat pe scară largă,
Astăzi vom interfața Atmega16 cu ESP8266 NodeMCU pentru a-l comunica fără fir prin internet. ESP8266 NodeMCU este un modul WiFi utilizat pe scară largă, cu suport comunitar și biblioteci ușor disponibile. De asemenea, ESP8266 NodeMCU este ușor de programat cu Arduino IDE. ESP8266 poate fi interfațat cu orice microcontroler:
În acest tutorial, e-mailul va fi trimis folosind modulul ESP8266 NodeMCU și Atmega16. Instrucțiunile vor fi date de Atmega16 și când ESP8266 primește instrucțiunile, acesta va trimite un e-mail destinatarului selectat. ATmega16 și ESP8266 NodeMCU vor comunica prin comunicații seriale UART. Deși orice protocol de comunicație poate fi utilizat pentru interfața ATmega16 și ESP8266 NodeMCU, cum ar fi SPI, I2C sau UART.
Lucruri de reținut înainte de a începe
Rețineți că microcontrolerul Atmega16 utilizat în acest proiect funcționează la nivel logic de 5V, în timp ce ESP8266 NodeMCU funcționează la nivel logic de 3,3V. Nivelurile logice ale ambelor microcontrolere sunt diferite, ceea ce poate cauza o anumită comunicare greșită între Atmega16 și ESP8266 NodeMCU sau poate exista, de asemenea, pierderea de date dacă nu se menține nivelul logic adecvat.
Cu toate acestea, după ce am parcurs fișele tehnice ale ambelor microcontrolere, am constatat că putem interfața fără schimbarea nivelului logic, deoarece toți pinii ESP8266 NodeMCU sunt toleranți de la nivelul de tensiune până la 6V. Deci, este bine să mergeți mai departe cu un nivel logic de 5V. De asemenea, foaia tehnică a Atmega16 afirmă în mod clar că nivelul de tensiune de peste 2V este considerat ca Nivel Logic '1' și ESP8266 NodeMCU rulează pe 3,3 V, înseamnă că dacă ESP8266 NodeMCU transmite 3,3V, atunci Atmega16 îl poate lua ca nivel logic '1'. Deci, comunicarea va fi posibilă fără a folosi deplasarea logică a nivelului. Deși sunteți liber să utilizați schimbător de nivel logic de la 5 la 3,3V.
Verificați aici toate proiectele legate de ESP8266.
Componente necesare
- Modulul ESP8266 NodeMCU
- IC microcontroler Atmega16
- Oscilator de cristal de 16 MHz
- Două condensatoare 100nF
- Două condensatoare de 22pF
- Apasa butonul
- Sârme jumper
- Breadboard
- USBASP v2.0
- Led (orice culoare)
Diagrama circuitului
Configurarea serverului SMTP2GO pentru trimiterea e-mailului
Înainte de a începe programarea, avem nevoie de un server SMTP pentru a trimite mesaje prin ESP8266. Există o mulțime de servere SMTP disponibile online. Aici, smtp2go.com va fi folosit ca server SMTP.
Deci, înainte de a scrie cod, va fi necesar numele de utilizator și parola SMTP. Pentru a obține aceste două acreditări, urmați pașii de mai jos care vor acoperi configurarea serverului SMTP pentru trimiterea cu succes a e-mailurilor.
Pasul 1: - Faceți clic pe „Încercați SMTP2GO gratuit” pentru a vă înregistra cu un cont gratuit.
Pasul 2: - Va apărea o fereastră, unde trebuie să introduceți unele acreditări precum numele, ID-ul de e-mail și parola.
Pasul 3: - După înscriere, veți primi o cerere de activare pe e-mailul introdus. Activați-vă contul din linkul de verificare din e-mail și apoi conectați-vă folosind ID-ul și parola de e-mail.
Pasul 4: - Odată ce vă conectați, veți obține numele de utilizator SMTP și parola SMTP. Amintiți-vă sau copiați-le pe blocnotesul dvs. pentru utilizare ulterioară. După aceasta, faceți clic pe „terminați”.
Pasul 5: - Acum, în bara de acces din stânga, faceți clic pe „Setări” și apoi pe „Utilizatori”. Aici puteți vedea informațiile referitoare la serverul SMTP și numărul PORT. Este de obicei după cum urmează:
Codificați numele de utilizator și parola
Acum trebuie să schimbăm numele de utilizator și parola în format codat base64 cu set de caractere ASCII. Pentru conversia e-mailului și a parolei în format codat base64 utilizați un site web numit BASE64ENCODE (https://www.base64encode.org/). Copiați numele de utilizator și parola codificate, pentru o utilizare ulterioară:
După finalizarea acestor pași, continuați pentru programarea ESP8266 NodeMCU și Atmega16 IC.
Programarea microcontrolerului AVR Atmega16 și ESP8266
Programarea va include două programe, unul pentru ca Atmega16 să acționeze ca expeditor de instrucțiuni și al doilea pentru ca ESP8266 NodeMCU să acționeze ca receptor de instrucțiuni. Ambele programe sunt oferite la sfârșitul acestui tutorial. Arduino IDE este folosit pentru a arde programatorul ESP8266 și USBasp, iar Atmel Studio este folosit pentru a arde Atmega16.
Un buton și LED sunt interfațate cu Atmega16, astfel încât atunci când apăsăm butonul, Atmega16 va trimite instrucțiuni către NodeMCU, iar NodeMCU va trimite e-mail în consecință. LED-ul va arăta starea transmisiei de date. Deci, să începem Programarea Atmega16 și apoi ESP8266 NodeMCU.
Programarea ATmega16 pentru trimiterea e-mailului
Începeți cu definirea frecvenței de operare și includerea tuturor bibliotecilor necesare. Biblioteca utilizată vine cu pachetul Atmel Studio.
#define F_CPU 16000000UL #include #include
După aceasta, rata de transmisie trebuie definită pentru a comunica cu ESP8266. Rețineți că rata de transmisie trebuie să fie similară pentru ambele controlere, adică Atmega16 și NodeMCU. În acest tutorial, viteza de transmisie este de 9600.
#define BAUD_PRESCALE ((( F_CPU / (USART_BAUDRATE * 16UL))) - 1)
Cele două registre UBRRL și UBRRH vor fi utilizate pentru a încărca valorile ratei de transmisie. Cea mai mică viteză de 8 biți de baud se va încărca în UBRRL și cea de 8 biți superioară de viteză baud se va încărca în UBRRH. Pentru simplitate, faceți funcția de inițializare UART în cazul în care rata de transmisie va fi trecută prin valoare. Funcția de inițializare UART va include:
- Setarea biților de transmisie și recepție în registrul UCSRB.
- Selectarea dimensiunilor caracterelor de 8 biți în registrul UCSRC.
- Încărcarea biților inferiori și superiori ai ratei Baud în registrul UBRRL și UBRRH.
void UART_init (USART_BAUDRATE lung) { UCSRB - = (1 << RXEN) - (1 << TXEN); UCSRC - = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRL = BAUD_PRESCALE; UBRRH = (BAUD_PRESCALE >> 8); }
Următorul pas va fi configurarea funcției pentru transmiterea caracterelor. Acest pas include așteptarea terminării bufferului gol și apoi încărcarea valorii caracterului în registrul UDR. Caracterul va fi transmis numai în funcție.
void UART_TxChar (char c) { while (! (UCSRA & (1 <
În loc să transferați caractere, creați o funcție pentru a trimite șiruri ca mai jos.
void UART_sendString (char * str) { unsigned char s = 0; while (str! = 0) { UART_TxChar (str); s ++; } }
În funcția main () , apelați UART_init () pentru a începe transmisia. Și faceți testul de ecou trimițând șirul TEST către NodeMCU.
UART_init (9600); UART_sendString ("TEST");
Începeți configurarea pinului GPIO pentru LED și buton.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); PORTA - = (1 << 1);
Dacă butonul nu este apăsat, mențineți LED-ul aprins și dacă butonul este apăsat, începeți să transmiteți comanda „SEND” către NodeMCU și faceți LED-ul stins.
if (bit_is_clear (PINA, 1)) { PORTA - = (1 << 0); _delay_ms (20); } else { PORTA & = ~ (1 << 0); _delay_ms (50); UART_sendString („TRIMITE”); _delay_ms (1200); }
Programare ESP8266 NodeMCU
Programarea NodeMCU include recepția comenzii de la Atmega16 și trimiterea e-mailului utilizând un server SMTP.
În primul rând, includeți biblioteca WIFI deoarece internetul va fi utilizat pentru a trimite e-mailuri. Definiți SSID-ul și parola WIFI pentru o conexiune reușită. De asemenea, definiți serverul SMTP.
#include
În funcția setup () , setați rata de transmisie similară cu rata de transfer Atmega16 ca 9600 și conectați-vă la WIFI și afișați adresa IP.
Serial.begin (9600); Serial.print ("Conectarea la:"); Serial.println (ssid); WiFi.begin (ssid, parolă); while (WiFi.status ()! = WL_CONNECTED) { întârziere (500); Serial.print ("."); }
În funcția loop () , citiți octeții de recepție la pinul Rx și convertiți-l în formă de șir.
if (Serial.available ()> 0) { while (Serial.available ()> 0 && index1 <6) { delay (100); inChar = Serial.read (); inData = inChar; index1 ++; inData = '\ 0'; } variable.toUpperCase (); for (octet i = 0; i <6; i ++) { variable.concat (String (inData)); } Serial.print ("variabila este ="); Serial.println (variabilă); Serial.print ("indata is ="); Serial.println (inData); întârziere (20); } Șir de șir = Șir (variabil);
Dacă comanda de primire este potrivită, trimiteți e-mail destinatarului apelând funcția sendEmail ().
if (șir == "TRIMITE") { sendEmail (); Serial.print („Poștă trimisă către:”); Serial.println („Destinatarul”); Serial.println (""); }
Este foarte important să configurați serverul SMTP și fără a face acest lucru, nu pot fi trimise e-mailuri. De asemenea, rețineți că, în timpul comunicării, setați o rată de transmisie similară pentru ambele controlere.
Așadar, acesta este modul în care ESP8266 poate fi interfațat cu microcontrolerul AVR pentru al activa pentru comunicații IoT. De asemenea, verificați videoclipul de lucru prezentat mai jos.