- Na čo treba pamätať pred začiatkom
- Súčasti sú povinné
- Schéma zapojenia
- Nastavenie servera SMTP2GO na odosielanie e-mailov
- Programovanie mikrokontrolérov AVR Atmega16 a ESP8266
- Programovanie ATmega16 pre odosielanie e-mailov
- Programovanie ESP8266 NodeMCU
Atmega16 je nízkonákladový 8-bitový mikrokontrolér a dodáva sa s väčším počtom GPIO ako jeho predchádzajúca verzia mikrokontrolérov. Má všetky bežne používané komunikačné protokoly ako UART, USART, SPI a I2C. Vďaka širokej komunitnej podpore a jednoduchosti má široké uplatnenie v robotickom, automobilovom a automatizačnom priemysle.
Atmega16 nepodporuje žiadny z bezdrôtových komunikačných protokolov ako Wi-Fi a Bluetooth, čo obmedzuje jeho aplikačné oblasti v doméne ako IoT. Na prekonanie tohto obmedzenia je možné prepojiť ďalšie radiče, ktoré majú bezdrôtové protokoly. Existuje množstvo radičov, ktoré podporujú bezdrôtové protokoly, ako napríklad široko používaný ESP8266,
Dnes budeme rozhranie ATmega16 s ESP8266 NodeMCU aby to bezdrôtovo komunikovať cez internet. ESP8266 NodeMCU je široko používaný WiFi modul s podporou komunity a ľahko dostupnými knižnicami. Tiež ESP8266 NodeMCU je ľahko programovateľný pomocou Arduino IDE. ESP8266 môže byť prepojený s akýmkoľvek mikrokontrolérom:
V tejto príručke sa e-mail odošle pomocou modulu ESP8266 NodeMCU a Atmega16. Pokyny poskytne Atmega16 a keď ESP8266 dostane pokyny, odošle e-mail vybranému príjemcovi e-mailu. ATmega16 a ESP8266 NodeMCU budú komunikovať prostredníctvom sériovej komunikácie UART. Na rozhranie ATmega16 a ESP8266 NodeMCU je možné použiť akýkoľvek komunikačný protokol, napríklad SPI, I2C alebo UART.
Na čo treba pamätať pred začiatkom
Všimnite si, že ATmega16 mikroradiče použitý v tomto projekte pracuje na logické úrovni 5V, zatiaľ čo ESP8266 NodeMCU pracuje na 3.3V logické úrovne. Logické úrovne oboch mikrokontrolérov sú odlišné, čo môže spôsobiť určitú nesprávnu komunikáciu medzi procesormi Atmega16 a ESP8266 NodeMCU alebo môže dôjsť aj k strate údajov, ak sa nezachová správna logická úroveň.
Po prechode údajovými listami oboch mikrokontrolérov sme však zistili, že môžeme pracovať bez akejkoľvek zmeny logickej úrovne, pretože všetky piny ESP8266 NodeMCU sú tolerantné od úrovne napätia do 6V. Takže s úrovňou logiky 5 V je v poriadku pokračovať. Aj dátový list Atmega16 jasne uvádza, že úroveň napätia nad 2 V sa považuje za logickú úroveň '1' a ESP8266 NodeMCU beží na 3,3 V, čo znamená, že ak ESP8266 NodeMCU vysiela 3,3 V, môže ju Atmega16 brať ako logickú úroveň '1'. Komunikácia bude teda možná bez použitia posunu logickej úrovne. Aj keď môžete slobodne používať radič logickej úrovne od 5 do 3,3 V.
Skontrolujte všetky projekty súvisiace s ESP8266 tu.
Súčasti sú povinné
- Modul ESP8266 NodeMCU
- Integrovaný obvod mikrokontroléra Atmega16
- Krištáľový oscilátor 16 MHz
- Dva kondenzátory 100nF
- Dva kondenzátory 22pF
- Tlačidlo
- Prepojovacie drôty
- Nepál
- USBASP v2.0
- LED (ľubovoľná farba)
Schéma zapojenia
Nastavenie servera SMTP2GO na odosielanie e-mailov
Pred začatím programovania potrebujeme server SMTP na odosielanie pošty cez ESP8266. Online je veľa serverov SMTP. Tu sa smtp2go.com použije ako server SMTP.
Pred napísaním kódu bude teda potrebné používateľské meno a heslo SMTP. Ak chcete získať tieto dve poverenia, postupujte podľa krokov uvedených nižšie, ktoré sa budú týkať nastavenia servera SMTP na úspešné odosielanie e-mailov.
Krok 1: - Kliknutím na „Vyskúšajte SMTP2GO zadarmo“ sa zaregistrujete pomocou bezplatného účtu.
Krok 2: - Zobrazí sa okno, kde musíte zadať poverenia, ako je meno, e-mailová adresa a heslo.
Krok 3: - Po registrácii dostanete na zadaný e-mail žiadosť o aktiváciu. Aktivujte svoj účet pomocou odkazu na overenie v e-maile a potom sa prihláste pomocou svojho e-mailového ID a hesla.
Krok 4: - Po prihlásení získate svoje používateľské meno a heslo SMTP. Pamätajte alebo ich skopírujte do poznámkového bloku pre ďalšie použitie. Po tomto kliknite na „dokončiť“.
Krok 5: - Teraz na ľavom paneli prístupu kliknite na „Nastavenia“ a potom na „Používatelia“. Tu vidíte informácie týkajúce sa servera SMTP a čísla PORT. Zvyčajne je to takto:
Zakódujte si užívateľské meno a heslo
Teraz musíme zmeniť užívateľské meno a heslo v zakódovanom formáte base64 so znakovou sadou ASCII. Na prevod e-mailu a hesla v zakódovanom formáte base64 použite webovú stránku s názvom BASE64ENCODE (https://www.base64encode.org/). Skopírujte zakódované užívateľské meno a heslo pre ďalšie použitie:
Po dokončení týchto krokov pokračujte v programovaní ESP8266 NodeMCU a Atmega16 IC.
Programovanie mikrokontrolérov AVR Atmega16 a ESP8266
Programovanie bude obsahovať dva programy, jeden pre Atmega16 ako odosielateľa pokynov a druhý pre ESP8266 NodeMCU ako prijímač pokynov. Oba programy sú uvedené na konci tohto tutoriálu. Arduino IDE sa používa na napaľovanie ESP8266 a programátora USBasp a Atmel Studio sa používa na napaľovanie Atmega16.
Jedno tlačidlo a kontrolka LED sú prepojené s Atmega16, takže keď stlačíme toto tlačidlo, Atmega16 odošle pokyny do NodeMCU a NodeMCU bude zodpovedajúcim spôsobom posielať e-maily. LED bude ukazovať stav prenosu dát. Takže začnime programovať Atmega16 a potom ESP8266 NodeMCU.
Programovanie ATmega16 pre odosielanie e-mailov
Začnite definovaním prevádzkovej frekvencie a zahrnutím všetkých potrebných knižníc. Použitá knižnica je dodávaná s balíkom Atmel Studio Package.
#define F_CPU 16000000UL #include #include
Potom je potrebné definovať prenosovú rýchlosť, aby bolo možné komunikovať s ESP8266. Pamätajte, že prenosová rýchlosť musí byť podobná pre oba radiče, tj. Atmega16 a NodeMCU. V tomto tutoriále je prenosová rýchlosť 9600.
#define BAUD_PRESCALE (((( F_CPU / (USART_BAUDRATE * 16UL))) - 1)
Dva registre UBRRL a UBRRH sa použijú na načítanie hodnôt prenosovej rýchlosti. Dolných 8 bitov prenosovej rýchlosti sa načíta v UBRRL a horných 8 bitov prenosovej rýchlosti sa načíta v UBRRH. Pre jednoduchosť urobte funkciu inicializácie UART, kde bude prenosová rýchlosť odovzdaná hodnotou. Inicializačná funkcia UART bude obsahovať:
- Nastavenie prenosových a prijímacích bitov v registri UCSRB.
- Výber 8-bitových veľkostí znakov v registri UCSRC.
- Načítanie dolných a horných bitov Baudovej rýchlosti do registra UBRRL a UBRRH.
void UART_init (dlhé USART_BAUDRATE) { UCSRB - = (1 << RXEN) - (1 << TXEN); UCSRC - = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRL = BAUD_PRESCALE; UBRRH = (BAUD_PRESCALE >> 8); }
Ďalším krokom bude nastavenie funkcie pre prenos znakov. Tento krok zahŕňa čakanie na dokončenie prázdneho bufferu a potom načítanie hodnoty char do registra UDR. Znak bude odovzdaný iba vo funkcii.
void UART_TxChar (char c) { while (! (UCSRA & (1 <
Namiesto prenosu znakov urobte funkciu na odosielanie reťazcov, ako je uvedené nižšie.
void UART_sendString (char * str) { unsigned char s = 0; while (str! = 0) { UART_TxChar (str); s ++; } }
Vo funkcii main () zavolajte UART_init (), aby sa spustil prenos. A urobte test ozveny zaslaním testovacieho reťazca do NodeMCU.
UART_init (9600); UART_sendString ("TEST");
Začnite konfigurovať pin GPIO pre LED a tlačidlo.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); PORTA - = (1 << 1);
Pokiaľ nie je stlačené tlačidlo, nechajte LED svietiť a pokiaľ je stlačené, začnite vysielať príkaz „ODOSLAŤ“ do NodeMCU a vypnite LED.
if (bit_is_clear (PINA, 1)) { PORTA - = (1 << 0); _delay_ms (20); } else { PORTA & = ~ (1 << 0); _delay_ms (50); UART_sendString („ODOSLAŤ“); _delay_ms (1200); }
Programovanie ESP8266 NodeMCU
Programovanie NodeMCU zahŕňa príjem príkazov z Atmega16 a posielanie e-mailov pomocou jedného servera SMTP.
Najskôr zahrňte knižnicu WIFI, pretože na odosielanie e-mailov sa použije internet. Definujte svoje SSI a heslo WIFI pre úspešné pripojenie. Definujte tiež server SMTP.
#include
Vo funkcii setup () nastavte prenosovú rýchlosť podobnú prenosovej rýchlosti Atmega16 ako 9600, pripojte sa k sieti WIFI a zobrazte adresu IP.
Serial.begin (9600); Serial.print ("Pripojenie k:"); Serial.println (ssid); WiFi.begin (ssid, heslo); while (WiFi.status ()! = WL_CONNECTED) { oneskorenie (500); Serial.print ("."); }
Vo funkcii loop () prečítajte prijímajúce bajty na kolíku Rx a konvertujte ich do reťazcového tvaru.
if (Serial.available ()> 0) { while (Serial.available ()> 0 && index1 <6) { delay (100); inChar = Serial.read (); inData = inChar; index1 ++; inData = '\ 0'; } variable.toUpperCase (); for (byte i = 0; i <6; i ++) { variable.concat (String (inData)); } Serial.print ("premenná je ="); Serial.println (premenná); Serial.print ("indata is ="); Serial.println (inData); oneskorenie (20); } String string = String (variable);
Ak je príkaz na príjem zhody, pošlite e-mail príjemcovi volaním funkcie sendEmail ().
if (string == "ODOSLAŤ") { sendEmail (); Serial.print ("Pošta odoslaná na:"); Serial.println ("Príjemca"); Serial.println (""); }
Je veľmi dôležité nastaviť server SMTP a bez toho nebude možné odosielať žiadne e-maily. Pamätajte tiež na to, že pri komunikácii nastavte prenosovú rýchlosť podobnú pre oba radiče.
Takto je možné prepojiť ESP8266 s mikrokontrolérom AVR, aby sa umožnila komunikácia IoT. Skontrolujte tiež funkčné video uvedené nižšie.