- Stvari koje treba zapamtiti prije početka
- Komponente potrebne
- Kružni dijagram
- Postavljanje SMTP2GO poslužitelja za slanje e-pošte
- Programiranje AVR mikrokontrolera Atmega16 i ESP8266
- Programiranje ATmega16 za slanje e-pošte
- Programiranje ESP8266 NodeMCU
Atmega16 je jeftini 8-bitni mikrokontroler i dolazi s većim brojem GPIO-a od svoje prethodne verzije mikrokontrolera. Sadrži sve najčešće korištene komunikacijske protokole poput UART, USART, SPI i I2C. Ima široku primjenu u industriji robotike, automobila i automatizacije zbog svoje široke podrške u zajednici i jednostavnosti.
Atmega16 ne podržava nijedan protokol bežične komunikacije kao što su Wi-Fi i Bluetooth što ograničava njegova područja primjene u domeni poput IoT-a. Da bi se prevladalo ovo ograničenje, mogu se povezati drugi kontroleri koji imaju bežične protokole. Postoji niz kontrolera koji podržavaju bežične protokole poput široko korištenog ESP8266,
Danas ćemo Atmega16 povezati s ESP8266 NodeMCU kako bi omogućio bežičnu komunikaciju putem interneta. ESP8266 NodeMCU široko je korišten WiFi modul s podrškom zajednice i lako dostupnim knjižnicama. Također se ESP8266 NodeMCU lako može programirati s Arduino IDE-om. ESP8266 može se povezati s bilo kojim mikrokontrolerom:
U ovom vodiču e-pošta će se poslati pomoću modula ESP8266 NodeMCU i Atmega16. Upute će dati Atmega16, a kada ESP8266 primi upute, poslat će e-poštu odabranom primatelju e-pošte. ATmega16 i ESP8266 NodeMCU komunicirat će putem UART serijske komunikacije. Iako se bilo koji komunikacijski protokol može koristiti za povezivanje ATmega16 i ESP8266 NodeMCU kao što su SPI, I2C ili UART.
Stvari koje treba zapamtiti prije početka
Imajte na umu da mikrokontroler Atmega16 korišten u ovom projektu radi na 5V logičkoj razini, dok ESP8266 NodeMCU radi na 3.3V logičkoj razini. Logičke razine oba mikrokontrolera su različite, što može prouzročiti pogrešnu komunikaciju između Atmega16 i ESP8266 NodeMCU ili može doći do gubitka podataka ako se ne održi odgovarajuća logička razina.
Međutim, nakon pregledavanja tablica podataka oba mikrokontrolera, otkrili smo da možemo sučeljavati bez ikakvog pomicanja razine logike, jer su sve iglice ESP8266 NodeMCU tolerantne od razine napona do 6V. Dakle, u redu je ići s 5V logičkom razinom. Također, tablica podataka Atmega16 jasno navodi da se razina napona iznad 2V smatra logičkom razinom '1', a ESP8266 NodeMCU radi na 3,3 V, što znači da ako ESP8266 NodeMCU odašilje 3,3 V, Atmega16 to može uzeti kao logičku razinu '1'. Dakle, komunikacija će biti moguća bez korištenja logičkog pomicanja razine. Iako možete slobodno koristiti logički mjenjač razine od 5 do 3,3 V.
Ovdje provjerite sve projekte povezane s ESP8266.
Komponente potrebne
- ESP8266 NodeMCU modul
- Atmega16 mikrokontroler IC
- Kristalni oscilator od 16 MHz
- Dva kondenzatora od 100 nF
- Dva kondenzatora od 22pF
- Pritisnite tipku
- Jumper žice
- Breadboard
- USBASP v2.0
- Led (bilo koja boja)
Kružni dijagram

Postavljanje SMTP2GO poslužitelja za slanje e-pošte
Prije početka programiranja potreban nam je SMTP poslužitelj za slanje pošte putem ESP8266. Puno je SMTP poslužitelja dostupnih na mreži. Ovdje će se smtp2go.com koristiti kao SMTP poslužitelj.
Dakle, prije pisanja koda bit će potrebno SMTP korisničko ime i lozinka. Da biste dobili ove dvije vjerodajnice, slijedite korake u nastavku koji će obuhvatiti postavljanje SMTP poslužitelja za uspješno slanje e-pošte.
Korak 1: - Kliknite "Isprobajte SMTP2GO Free" da biste se registrirali s besplatnim računom.

Korak 2: - Otvorit će se prozor u koji trebate unijeti neke vjerodajnice poput imena, ID-a e-pošte i lozinke.

Korak 3: - Nakon prijave na primljenu e-poštu primit ćete zahtjev za aktivaciju. Aktivirajte svoj račun putem veze za potvrdu u e-pošti, a zatim se prijavite koristeći svoj ID e-pošte i lozinku.
Korak 4: - Nakon što se prijavite, dobit ćete svoje SMTP korisničko ime i SMTP lozinku. Zapamtite ih ili kopirajte u svoj notes za daljnju upotrebu. Nakon ovoga kliknite na 'završi'.

Korak 5: - Sada na lijevoj pristupnoj traci kliknite "Postavke", a zatim "Korisnici". Ovdje možete vidjeti informacije o SMTP poslužitelju i PORT broju. Obično je sljedeće:

Kodirajte korisničko ime i lozinku
Sada moramo promijeniti korisničko ime i lozinku u base64 kodiranom formatu s ASCII skupom znakova. Za pretvorbu e-pošte i lozinke u format kodiran osnovnim podacima koristite web mjesto nazvano BASE64ENCODE (https://www.base64encode.org/). Kopirajte kodirano korisničko ime i lozinku za daljnju upotrebu:

Nakon završetka ovih koraka nastavite s programiranjem ESP8266 NodeMCU i Atmega16 IC.
Programiranje AVR mikrokontrolera Atmega16 i ESP8266
Programiranje će uključivati dva programa, jedan za Atmega16 koji će biti pošiljatelj uputa i drugi za ESP8266 NodeMCU kao primatelj uputa. Oba programa dana su na kraju ovog vodiča. Arduino IDE koristi se za sagorijevanje ESP8266 i programatora USBasp, a Atmel Studio za spaljivanje Atmega16.
Jedan gumb i LED dioda povezani su s Atmega16 tako da će Atmega16 kad pritisnemo tipku poslati upute NodeMCU, a NodeMCU e-poštu u skladu s tim. LED će prikazati status prijenosa podataka. Počnimo s programiranjem Atmega16, a zatim i ESP8266 NodeMCU.

Programiranje ATmega16 za slanje e-pošte
Započnite s definiranjem radne frekvencije i uključivanjem svih potrebnih knjižnica. Korištena knjižnica isporučuje se s paketom Atmel Studio.
#define F_CPU 16000000UL #include #include
Nakon toga mora se definirati brzina prijenosa da bi se mogla komunicirati s ESP8266. Imajte na umu da brzina prijenosa mora biti slična za oba kontrolera, tj. Atmega16 i NodeMCU. U ovom vodiču brzina prijenosa iznosi 9600.
#define BAUD_PRESCALE ((( F_CPU / (USART_BAUDRATE * 16UL))) - 1)
Dva registra UBRRL i UBRRH koristit će se za učitavanje vrijednosti brzine prijenosa. Donji 8-bitni prijenosa će se učitati u UBRRL, a gornji 8-bitni prijenosa će se učitati u UBRRH. Radi jednostavnosti, napravite funkciju inicijalizacije UART-a gdje će se brzina prijenosa prenositi po vrijednosti. Funkcija inicijalizacije UART uključuje:
- Postavljanje bitova prijenosa i prijema u registar UCSRB.
- Odabir 8-bitnih veličina znakova u registru UCSRC.
- Učitavanje donjeg i gornjeg bita brzine prijenosa u registru UBRRL i 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); }
Sljedeći korak bit će postavljanje funkcije za prijenos znakova. Ovaj korak uključuje čekanje da se završi prazni međuspremnik i zatim učitavanje vrijednosti char u UDR registar. Char se prenosi samo u funkciji.
void UART_TxChar (char c) { while (! (UCSRA & (1 <
Umjesto prijenosa znakova, napravite funkciju za slanje nizova kao u nastavku.
void UART_sendString (char * str) { nepotpisani char s = 0; while (str! = 0) { UART_TxChar (str); s ++; } }
U glavnoj () funkciji pozovite UART_init () da započnete prijenos. I napravite eho test slanjem TEST niza na NodeMCU.
UART_init (9600); UART_sendString ("TEST");
Počnite konfigurirati GPIO pin za LED i tipku.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); PORTA - = (1 << 1);
Ako tipka nije pritisnuta, zadržite uključenu LED diodu, a ako je pritisnuta tipka, započnite slanje naredbe "SEND" na NodeMCU i isključite LED.
if (bit_is_clear (PINA, 1)) { PORTA - = (1 << 0); _zakašnjenje_ms (20); } else { PORTA & = ~ (1 << 0); _zakašnjenje_ms (50); UART_sendString ("POŠALJI"); _zakašnjenje_ms (1200); }
Programiranje ESP8266 NodeMCU
Programiranje NodeMCU uključuje prijem naredbi od Atmega16 i slanje e-pošte pomoću jednog SMTP poslužitelja.
Prvo, uključite WIFI knjižnicu jer će se Internet koristiti za slanje e-pošte. Definirajte svoj WIFI ssid i lozinku za uspješno povezivanje. Također definirajte SMTP poslužitelj.
#include
U funkciji setup () , postavite brzinu prijenosa sličnu brzini prijenosa Atmega16 kao 9600 i spojite se na WIFI i prikažite IP adresu.
Serial.begin (9600); Serial.print ("Povezivanje s:"); Serial.println (ssid); WiFi.begin (ssid, lozinka); while (WiFi.status ()! = WL_CONNECTED) { delay (500); Serial.print ("."); }
U funkciji loop () , pročitajte prijemne bajtove na Rx pinu i pretvorite ih u oblik niza.
if (Serial.available ()> 0) { while (Serial.available ()> 0 && index1 <6) { delay (100); inChar = Serial.read (); inData = inChar; indeks1 ++; inData = '\ 0'; } varijabla.toUpperCase (); za (bajt i = 0; i <6; i ++) { variable.concat (String (inData)); } Serial.print ("varijabla je ="); Serial.println (varijabla); Serial.print ("indata is ="); Serial.println (inData); kašnjenje (20); } Niz niza = Niz (varijabla);
Ako se podudara naredba za primanje, pošaljite e-poštu primatelju pozivom funkcije sendEmail ().
if (string == "POŠALJI") { sendEmail (); Serial.print ("Mail sent to:"); Serial.println ("Primatelj"); Serial.println (""); }

Vrlo je važno postaviti SMTP poslužitelj i bez toga ne možete poslati e-poštu. Također imajte na umu da tijekom komunikacije postavite sličnu brzinu prijenosa za oba kontrolera.
Dakle, na ovaj se način ESP8266 može povezati s AVR mikrokontrolerom kako bi se omogućio za IoT komunikaciju. Također provjerite dolje navedeni radni video.
