- Stvari, ki si jih morate zapomniti pred začetkom
- Potrebne komponente
- Shema vezja
- Nastavitev strežnika SMTP2GO za pošiljanje e-pošte
- Programiranje AVR mikrokrmilnika Atmega16 in ESP8266
- Programiranje ATmega16 za pošiljanje e-pošte
- Programiranje ESP8266 NodeMCU
Atmega16 je poceni 8-bitni mikrokrmilnik in ima več GPIO-jev kot prejšnja različica mikrokrmilnikov. Ima vse najpogosteje uporabljene komunikacijske protokole, kot so UART, USART, SPI in I2C. Zaradi široke podpore skupnosti in preprostosti ima široko uporabo v robotiki, avtomobilski industriji in industriji avtomatizacije.
Atmega16 ne podpira nobenega protokola za brezžično komunikacijo, kot sta Wi-Fi in Bluetooth, kar omejuje področja uporabe v domeni, kot je IoT. Da bi odpravili to omejitev, je mogoče povezati druge krmilnike, ki imajo brezžične protokole. Obstaja več krmilnikov, ki podpirajo brezžične protokole, kot je pogosto uporabljen ESP8266,
Danes bomo vmesnik Atmega16 z ESP8266 NodeMCU, da bo brezžično komunikacijo preko interneta. ESP8266 NodeMCU je široko uporabljen modul WiFi s podporo skupnosti in lahko dostopnimi knjižnicami. Tudi ESP8266 NodeMCU je enostavno programirati z Arduino IDE. ESP8266 je mogoče povezati s katerim koli mikrokrmilnikom:
V tej vadnici bo e-poštno sporočilo poslano z modulom ESP8266 NodeMCU in Atmega16. Navodila bo dala Atmega16 in ko bo ESP8266 prejela navodila, bo poslala e-pošto izbranemu prejemniku e-pošte. ATmega16 in ESP8266 NodeMCU bosta komunicirala prek serijske komunikacije UART. Čeprav se lahko kateri koli komunikacijski protokol uporablja za vmesnike ATmega16 in ESP8266 NodeMCU, kot so SPI, I2C ali UART.
Stvari, ki si jih morate zapomniti pred začetkom
Upoštevajte, da mikrokrmilnik Atmega16, uporabljen v tem projektu, deluje na 5V logični ravni, medtem ko ESP8266 NodeMCU deluje na 3,3V logični ravni. Logična raven obeh mikrokrmilnikov je različna, kar lahko povzroči napačne komunikacije med Atmega16 in ESP8266 NodeMCU ali pa pride do izgube podatkov, če se ne ohrani ustrezna logična raven.
Po pregledu podatkovnih listov obeh mikrokrmilnikov smo ugotovili, da lahko vzpostavimo vmesnik brez kakršnega koli premika logične ravni, saj so vsi zatiči ESP8266 NodeMCU tolerantni od napetosti do 6V. Torej je v redu, če nadaljujete s 5V logično stopnjo. Tudi v obrazcu Atmega16 jasno piše, da se napetost nad 2V šteje za logično raven '1' in ESP8266 NodeMCU deluje na 3,3 V, kar pomeni, da če ESP8266 NodeMCU oddaja 3,3 V, potem lahko Atmega16 to sprejme kot logično raven '1'. Komunikacija bo torej mogoča brez uporabe logičnega premika nivoja. Čeprav lahko prosto uporabljate preklopnik nivoja logike od 5 do 3,3 V.
Tukaj preverite vse projekte, povezane z ESP8266.
Potrebne komponente
- ESP8266 NodeMCU modul
- IC mikrokrmilnik Atmega16
- Kristalni oscilator 16 MHz
- Dva kondenzatorja 100nF
- Dva kondenzatorja 22pF
- Pritisni gumb
- Jumper žice
- Breadboard
- USBASP v2.0
- Led (poljubne barve)
Shema vezja
Nastavitev strežnika SMTP2GO za pošiljanje e-pošte
Pred začetkom programiranja potrebujemo strežnik SMTP za pošiljanje pošte prek ESP8266. V spletu je na voljo veliko strežnikov SMTP. Tu bo smtp2go.com uporabljen kot strežnik SMTP.
Pred pisanjem kode boste torej morali uporabniško ime in geslo za SMTP. Za pridobitev teh dveh poverilnic sledite spodnjim korakom, ki bodo zajemali nastavitev strežnika SMTP za uspešno pošiljanje e-pošte.
1. korak: - Kliknite »Preizkusite SMTP2GO Free«, da se registrirate z brezplačnim računom.
2. korak: - Pojavi se okno, kjer morate vnesti nekatere poverilnice, kot so ime, e-poštni ID in geslo.
3. korak: - Po prijavi boste na vneseno e-pošto prejeli zahtevo za aktivacijo. Aktivirajte svoj račun s povezavo za preverjanje v e-pošti in se nato prijavite s svojim e-poštnim ID-jem in geslom.
4. korak: - Ko se prijavite, boste dobili uporabniško ime SMTP in geslo SMTP. Zapomnite si jih ali jih kopirajte v beležko za nadaljnjo uporabo. Po tem kliknite na 'končaj'.
5. korak: - Zdaj v levi vrstici za dostop kliknite »Nastavitve« in nato »Uporabniki«. Tu si lahko ogledate informacije o strežniku SMTP in številki PORT-a. Običajno je naslednje:
Kodirajte uporabniško ime in geslo
Zdaj moramo uporabniško ime in geslo spremeniti v formatu, kodiranem z base64, z naborom znakov ASCII. Za pretvorbo e-pošte in gesla v format, kodiran z base64, uporabite spletno mesto BASE64ENCODE (https://www.base64encode.org/). Kopirajte zakodirano uporabniško ime in geslo za nadaljnjo uporabo:
Po končanih korakih nadaljujte s programiranjem ESP8266 NodeMCU in Atmega16 IC.
Programiranje AVR mikrokrmilnika Atmega16 in ESP8266
Programiranje bo vključevalo dva programa, enega za Atmega16 kot pošiljatelja navodil in drugega za ESP8266 NodeMCU kot sprejemnika navodil. Oba programa sta podana na koncu te vaje. Arduino IDE se uporablja za zapisovanje ESP8266 in USBasp programer, Atmel Studio pa za zapisovanje Atmega16.
En gumb in LED je povezan z Atmega16, tako da bo Atmega16, ko pritisnemo na tipko, poslal navodila NodeMCU in NodeMCU bo poslal e-pošto. Lučka LED prikazuje stanje prenosa podatkov. Začnimo s programiranjem Atmega16 in nato ESP8266 NodeMCU.
Programiranje ATmega16 za pošiljanje e-pošte
Začnite z določitvijo delovne frekvence in vključitvijo vseh potrebnih knjižnic. Uporabljena knjižnica je priložena paketu Atmel Studio.
#define F_CPU 16000000UL #include #include
Po tem je treba določiti hitrost prenosa za komunikacijo z ESP8266. Upoštevajte, da mora biti hitrost prenosa podatkov podobna za oba krmilnika, tj. Atmega16 in NodeMCU. V tej vadnici je hitrost prenosa 9600.
#define BAUD_PRESCALE ((( F_CPU / (USART_BAUDRATE * 16UL))) - 1)
Dva registra UBRRL in UBRRH bosta uporabljena za nalaganje vrednosti hitrosti prenosa. Spodnji 8-bitni hitrosti prenosa se bodo naložili v UBRRL, zgornji 8-bitni pretoki pa se bodo naložili v UBRRH. Za poenostavitev naredite funkcijo inicializacije UART, kjer bo hitrost prenosa prenesena po vrednosti. Funkcija inicializacije UART bo vključevala:
- Nastavitev prenosnih in sprejemnih bitov v registru UCSRB.
- Izbira 8-bitnih velikosti znakov v registru UCSRC.
- Nalaganje spodnjih in zgornjih bitov Baudove hitrosti v registru UBRRL in 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); }
Naslednji korak bo nastavitev funkcije za prenos znakov. Ta korak vključuje čakanje na zaključek praznega vmesnega pomnilnika in nato nalaganje vrednosti char v register UDR. Znak bo prenesen samo v funkciji.
void UART_TxChar (char c) { while (! (UCSRA & (1 <
Namesto prenosa znakov naredite funkcijo za pošiljanje nizov, kot je prikazano spodaj.
void UART_sendString (char * str) { nepodpisan char s = 0; medtem ko (str! = 0) { UART_TxChar (str); s ++; } }
V glavni () funkciji pokličite UART_init (), da začnete prenos. In izvedite preskus odmeva, tako da pošljete niz TEST NodeMCU.
UART_init (9600); UART_sendString ("TEST");
Začnite konfigurirati GPIO pin za LED in tipko.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); PORTA - = (1 << 1);
Če gumba ne pritisnete, naj LED ostane vklopljen in če pritisnete gumb, nato začnite pošiljati ukaz »SEND« na NodeMCU in izklopite LED.
če (bit_is_clear (PINA, 1)) { PORTA - = (1 << 0); _delay_ms (20); } else { PORTA & = ~ (1 << 0); _delay_ms (50); UART_sendString ("POŠLJI"); _delay_ms (1200); }
Programiranje ESP8266 NodeMCU
Programiranje NodeMCU vključuje sprejem ukaza od Atmega16 in pošiljanje e-pošte z enim strežnikom SMTP.
Najprej vključite knjižnico WIFI, saj se bo internet uporabljal za pošiljanje e-pošte. Za uspešno vzpostavitev povezave določite ssid in geslo za WIFI. Določite tudi strežnik SMTP.
#include
V funkciji setup () nastavite hitrost prenosa, podobno hitrosti prenosa Atmega16, kot 9600 in se povežite z WIFI ter prikažite naslov IP.
Serial.begin (9600); Serial.print ("Povezovanje z:"); Serial.println (ssid); WiFi.begin (ssid, geslo); medtem ko (WiFi.status ()! = WL_CONNECTED) { zamuda (500); Serial.print ("."); }
V funkciji loop () preberite prejemne bajte na Rx pinu in jih pretvorite v niz.
if (Serial.available ()> 0) { while (Serial.available ()> 0 && index1 <6) { delay (100); inChar = Serial.read (); inData = inChar; indeks1 ++; inData = '\ 0'; } variable.toUpperCase (); for (bajt i = 0; i <6; i ++) { variable.concat (String (inData)); } Serial.print ("spremenljivka je ="); Serial.println (spremenljivka); Serial.print ("indata is ="); Serial.println (inData); zamuda (20); } Niz niza = Niz (spremenljivka);
Če se ukaz za sprejem ujema, pošljite e-pošto prejemniku s klicem funkcije sendEmail ().
if (string == "POŠLJI") { sendEmail (); Serial.print ("Pošta poslana na:"); Serial.println ("Prejemnik"); Serial.println (""); }
Zelo pomembno je, da nastavite strežnik SMTP in brez tega ne morete pošiljati e-pošte. Upoštevajte tudi, da med komunikacijo nastavite podobno hitrost prenosa za oba krmilnika.
Tako lahko ESP8266 povežemo z mikrokrmilnikom AVR, da ga omogočimo za IoT komunikacije. Preverite tudi spodnji delovni video.