- Dalykai, kuriuos reikia atsiminti prieš pradedant
- Būtini komponentai
- Grandinės schema
- SMTP2GO serverio nustatymas el. Laiškams siųsti
- AVR mikrovaldiklio „Atmega16“ ir ESP8266 programavimas
- „ATmega16“ programavimas el. Pašto siuntimui
- ESP8266 „NodeMCU“ programavimas
„Atmega16“ yra nebrangus 8 bitų mikrovaldiklis, kuriame yra daugiau GPIO nei ankstesnėje mikrovaldiklių versijoje. Jame yra visi dažniausiai naudojami ryšio protokolai, tokie kaip UART, USART, SPI ir I2C. Dėl plataus bendruomenės palaikymo ir paprastumo jis plačiai pritaikomas robotikos, automobilių ir automatikos pramonėje.
„Atmega16“ nepalaiko jokių belaidžio ryšio protokolų, tokių kaip „Wi-Fi“ ir „Bluetooth“, o tai riboja jo taikymo sritis tokiuose domenuose kaip IoT. Norint įveikti šį apribojimą, galima valdyti kitus valdiklius, turinčius belaidžius protokolus. Yra keletas valdiklių, kurie palaiko belaidžius protokolus, pvz., Plačiai naudojamą ESP8266,
Šiandien mes sąsaja ATmega16 su ESP8266 NodeMCU, kad jis bendrauja bevieliu per internetą. ESP8266 „NodeMCU“ yra plačiai naudojamas „WiFi“ modulis su bendruomenės palaikymu ir lengvai pasiekiamomis bibliotekomis. ESP8266 „NodeMCU“ taip pat lengvai programuojamas su „Arduino IDE“. ESP8266 galima susieti su bet kuriuo mikrovaldikliu:
Šioje pamokoje el. Laiškai bus siunčiami naudojant ESP8266 „NodeMCU“ modulį ir „Atmega16“. Nurodymus pateiks „Atmega16“, o gavęs ESP8266 instrukcijas, jis išsiųs el. Laišką pasirinktam el. Pašto gavėjui. „ATmega16“ ir „ESP8266 NodeMCU“ palaikys ryšį per UART nuoseklųjį ryšį. Nors bet koks ryšio protokolas gali būti naudojamas sąsajai ATmega16 ir ESP8266 NodeMCU, pavyzdžiui, SPI, I2C ar UART.
Dalykai, kuriuos reikia atsiminti prieš pradedant
Atkreipkite dėmesį, kad šiame projekte naudojamas mikrovaldiklis „Atmega16“ veikia 5 V logikos lygiu, o ESP8266 „NodeMCU“ - 3,3 V logikos lygiu. Abiejų mikrovaldiklių loginiai lygiai yra skirtingi, o tai gali sukelti tam tikrą nesusikalbėjimą tarp „Atmega16“ ir „ESP8266 NodeMCU“, taip pat gali prarasti duomenis, jei nebus išlaikytas tinkamas loginis lygis.
Tačiau perėję abiejų mikrovaldiklių duomenų lapus, mes nustatėme, kad galime sąveikauti be jokio loginio lygio pokyčio, nes visi ESP8266 „NodeMCU“ kaiščiai yra tolerantiški nuo įtampos lygio iki 6 V. Taigi gerai, kai einama su 5 V logikos lygiu. Be to, „Atmega16“ duomenų lape aiškiai nurodyta, kad įtampos lygis, viršijantis 2 V, laikomas loginiu lygiu „1“, o ESP8266 „NodeMCU“ veikia esant 3,3 V įtampai, tai reiškia, kad jei „ESP8266 NodeMCU“ perduoda 3,3 V įtampą, „Atmega16“ gali tai laikyti loginiu lygiu „1“. Taigi komunikacija bus įmanoma nenaudojant loginio lygio keitimo. Nors galite laisvai naudoti loginio lygio perjungiklį nuo 5 iki 3,3 V.
Čia rasite visus su ESP8266 susijusius projektus.
Būtini komponentai
- ESP8266 „NodeMCU“ modulis
- „Atmega16“ mikrovaldiklio IC
- 16Mhz kristalinis osciliatorius
- Du 100nF kondensatoriai
- Du 22pF kondensatoriai
- Paspauskite mygtuką
- Šuolių laidai
- Bandomoji Lenta
- „USBASP v2.0“
- Led (bet kokios spalvos)
Grandinės schema
SMTP2GO serverio nustatymas el. Laiškams siųsti
Prieš pradedant programuoti, mums reikia SMTP serverio, kad galėtume siųsti laiškus per ESP8266. Internete yra daugybė SMTP serverių. Čia smtp2go.com bus naudojamas kaip SMTP serveris.
Taigi prieš rašant kodą reikės SMTP vartotojo vardo ir slaptažodžio. Norėdami gauti šiuos du kredencialus, atlikite toliau nurodytus veiksmus, kurie apims SMTP serverio nustatymą, kad sėkmingai būtų galima siųsti el. Laiškus.
1 žingsnis: - Norėdami užregistruoti nemokamoje paskyroje, spustelėkite „Išbandyti„ SMTP2GO Free ““.
2 žingsnis: - pasirodys langas, kuriame turėsite įvesti tam tikrus kredencialus, pvz., Vardą, el. Pašto adresą ir slaptažodį.
3 žingsnis: - Prisiregistravę gausite suaktyvinimo užklausą įvestame el. Laiške. Suaktyvinkite savo sąskaitą naudodami el. Pašto patvirtinimo nuorodą ir prisijunkite naudodami savo el. Pašto adresą ir slaptažodį.
4 žingsnis: - Kai prisijungsite, gausite savo SMTP vartotojo vardą ir SMTP slaptažodį. Prisiminkite arba nukopijuokite juos į savo bloknotą tolesniam naudojimui. Po šio mygtuko spustelėkite „baigti“.
5 žingsnis: - Dabar kairėje prieigos juostoje spustelėkite „Nustatymai“, tada - „Vartotojai“. Čia galite pamatyti informaciją apie SMTP serverį ir Uosto numerį. Paprastai tai yra taip:
Užkoduokite vartotojo vardą ir slaptažodį
Dabar mes turime pakeisti vartotojo vardą ir slaptažodį „base64“ koduotu formatu su ASCII simbolių rinkiniu. Norėdami konvertuoti el. Pašto adresą ir slaptažodį „base64“ koduotu formatu, naudokite svetainę, pavadintą BASE64ENCODE (https://www.base64encode.org/). Nukopijuokite užkoduotą vartotojo vardą ir slaptažodį tolesniam naudojimui:
Baigę šiuos veiksmus, programuokite ESP8266 NodeMCU ir Atmega16 IC.
AVR mikrovaldiklio „Atmega16“ ir ESP8266 programavimas
Programavimas apims dvi programas: vieną „Atmega16“ atliks kaip instrukcijų siuntėją, o antrąją - „ESP8266 NodeMCU“, kad ji imtųsi nurodymų. Abi programos pateikiamos šios pamokos pabaigoje. „Arduino IDE“ naudojamas įrašyti ESP8266, o „USBasp“ programuotojas, o „Atmel Studio“ - „Atmega16“.
Vienas mygtukas ir šviesos diodas yra susieti su „Atmega16“, todėl, kai paspausime mygtuką, „Atmega16“ išsiųs instrukcijas „NodeMCU“, o „NodeMCU“ atitinkamai atsiųs el. Laišką. Šviesos diodas parodys duomenų perdavimo būseną. Taigi pradėkime programuoti „Atmega16“, tada - „ESP8266 NodeMCU“.
„ATmega16“ programavimas el. Pašto siuntimui
Pradėkite apibrėždami veikimo dažnį ir įtraukdami visas reikalingas bibliotekas. Naudojama biblioteka yra su „Atmel Studio Package“.
# define F_CPU 16000000UL #include #include
Po to, norint bendrauti su ESP8266, reikia apibrėžti duomenų perdavimo greitį. Atkreipkite dėmesį, kad duomenų perdavimo sparta turi būti panaši abiems valdikliams, ty „Atmega16“ ir „NodeMCU“. Šioje mokymo programoje baudos greitis yra 9600.
#define BAUD_PRESCALE ((( F_CPU / (USART_BAUDRATE * 16UL))) - 1)
Dvi registrai UBRRL ir UBRRH bus naudojami perkėlimo greičio vertėms įkelti. Apatiniai 8 bitų perdavimo sparta bus įkeliami į UBRRL, o viršutiniai - 8 bitai - į UBRRH. Kad būtų paprasčiau, atlikite UART inicializavimo funkciją, kur duomenų perdavimo greitis bus perduotas pagal vertę. UART inicializavimo funkcijoje bus:
- Perdavimo ir priėmimo bitų nustatymas UCSRB registre.
- 8 bitų simbolių dydžių pasirinkimas UCSRC registre.
- Apatinių ir viršutinių perdavimo spartos bitų įkėlimas į UBRRL ir UBRRH registrą.
negaliojantis UART_init (ilgas USART_BAUDRATE) { UCSRB - = (1 << RXEN) - (1 << TXEN); UCSRC - = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRL = BAUD_PRESCALE; UBRRH = (BAUD_PRESCALE >> 8); }
Kitas žingsnis bus nustatyti simbolių perdavimo funkciją. Šis žingsnis apima laukimą, kol baigsis tuščias buferis, tada įkelkite char reikšmę į UDR registrą. Simbolis bus perduotas tik veikiant.
anuliuoti UART_TxChar (char c) { while (! (UCSRA & (1 <
Užuot perkėlę simbolius, padarykite funkciją, kad siųstumėte eilutes, kaip nurodyta toliau.
void UART_sendString (char * str) { nepasirašytas char s = 0; o (str! = 0) { UART_TxChar (str); s ++; } }
Be main () funkcija, skambinkite UART_init () pradėti siuntimą. Ir daryti echo testą siunčiant TEST eilutę NodeMCU.
UART_init (9600); UART_sendString ("TESTAS");
Pradėkite konfigūruoti GPIO kaištį LED ir mygtukui.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); PORTA - = (1 << 1);
Jei mygtukas nespaudžiamas, palaikykite įjungtą šviesos diodą ir, jei paspaudžiamas mygtukas, pradėkite „SEND“ komandą perduoti „ NodeMCU“ ir išjunkite šviesos diodą.
if (bit_is_clear (PINA, 1)) { PORTA - = (1 << 0); _delay_ms (20); } dar { PORTA & = ~ (1 << 0); _delay_ms (50); UART_sendString ("SEND"); _delay_ms (1200); }
ESP8266 „NodeMCU“ programavimas
„NodeMCU“ programavimas apima komandų priėmimą iš „Atmega16“ ir el. Pašto siuntimą naudojant vieną SMTP serverį.
Pirma, įtraukite WIFI biblioteką, nes internetas bus naudojamas el. Laiškams siųsti. Norėdami sėkmingai prisijungti, apibrėžkite savo WIFI standartą ir slaptažodį. Taip pat apibrėžkite SMTP serverį.
# įtraukti
Naudodamiesi sąrankos () funkcija, nustatykite perdavimo greitį, panašų į „Atmega16“ perdavimo greitį, kaip 9600 ir prisijunkite prie WIFI ir rodykite IP adresą.
Serijos pradžia (9600); Serial.print ("Prisijungimas prie:"); Serial.println (ssid); „WiFi.begin“ (ssid, slaptažodis); while (WiFi.status ()! = WL_CONNECTED) { delsa (500); Serijinis spaudinys ("."); }
Į kilpą () funkciją, skaitykite gaunančioji baitų ne Rx pin ir konvertuoti jį į styginių forma.
if (Serial.available ()> 0) { while (Serial.available ()> 0 && index1 <6) { delay (100); inChar = Serial.read (); inData = inChar; indeksas1 ++; inData = '\ 0'; } kintamasis.toUpperCase (); for (baitas i = 0; i <6; i ++) { kintamasis. concat (String (inData)); } Serial.print („kintamasis yra =“); Serial.println (kintamasis); Serial.print ("indata is ="); Serial.println („inData“); vėlavimas (20); } String string = String (kintamasis);
Jei priimanti komanda yra suderinta, tada išsiųskite el. Laišką gavėjui paskambinę funkcija sendEmail ().
if (string == "SEND") { sendEmail (); „Serial.print“ („Laiškas išsiųstas:“); Serial.println („Gavėjas“); Serial.println (""); }
Labai svarbu sukonfigūruoti SMTP serverį ir to nedarant negalima siųsti el. Laiškų. Taip pat atkreipkite dėmesį, kad bendraudami nustatykite panašų duomenų perdavimo greitį abiem valdikliams.
Taigi tokiu būdu ESP8266 galima susieti su AVR mikrovaldikliu, kad jis būtų įmanomas IoT ryšiui. Taip pat patikrinkite žemiau pateiktą veikiantį vaizdo įrašą.