- Věci, které si musíte pamatovat před zahájením
- Požadované komponenty
- Kruhový diagram
- Nastavení serveru SMTP2GO pro odesílání e-mailů
- Programování mikrokontroléru AVR Atmega16 a ESP8266
- Programování ATmega16 pro odesílání e-mailů
- Programování ESP8266 NodeMCU
Atmega16 je nízkonákladový 8bitový mikrokontrolér a přichází s větším počtem GPIO než jeho předchozí verze mikrokontrolérů. Má všechny běžně používané komunikační protokoly jako UART, USART, SPI a I2C. Díky široké komunitní podpoře a jednoduchosti má široké uplatnění v robotickém, automobilovém a automatizačním průmyslu.
Atmega16 nepodporuje žádný z bezdrátových komunikačních protokolů, jako je Wi-Fi a Bluetooth, což omezuje jeho aplikační oblasti v doméně, jako je IoT. K překonání tohoto omezení lze propojit další řadiče, které mají bezdrátové protokoly. Existuje řada řadičů, které podporují bezdrátové protokoly, jako je široce používaný ESP8266,
Dnes budeme propojovat Atmega16 s ESP8266 NodeMCU, abychom mohli bezdrátově komunikovat přes internet. ESP8266 NodeMCU je široce používaný WiFi modul s podporou komunity a snadno dostupnými knihovnami. Také ESP8266 NodeMCU je snadno programovatelný pomocí Arduino IDE. ESP8266 lze propojit s jakýmkoli mikrokontrolérem:
V tomto výukovém programu bude e-mail odeslán pomocí modulu ESP8266 NodeMCU a Atmega16. Pokyny vydá Atmega16 a když ESP8266 obdrží pokyny, odešle e-mail vybranému příjemci e-mailu. ATmega16 a ESP8266 NodeMCU budou komunikovat přes sériovou komunikaci UART. I když k propojení rozhraní ATmega16 a ESP8266 NodeMCU lze použít jakýkoli komunikační protokol, například SPI, I2C nebo UART.
Věci, které si musíte pamatovat před zahájením
Všimněte si, že ATmega16 mikrořadiče použitý v tomto projektu pracuje na logické úrovni 5V, zatímco ESP8266 NodeMCU pracuje na 3.3V logické úrovně. Logické úrovně obou mikrokontrolérů se liší, což může způsobit nedorozumění mezi Atmega16 a ESP8266 NodeMCU nebo může dojít ke ztrátě dat, pokud nebude zachována správná logická úroveň.
Po projití datových listů obou mikrokontrolérů jsme však zjistili, že můžeme komunikovat bez jakéhokoli posunu logické úrovně, protože všechny piny ESP8266 NodeMCU jsou tolerantní od úrovně napětí až do 6V. Takže je v pořádku pokračovat s logickou úrovní 5V. Datový list Atmega16 také jasně uvádí, že úroveň napětí nad 2 V je považována za logickou úroveň '1' a ESP8266 NodeMCU běží na 3,3 V, to znamená, že pokud ESP8266 NodeMCU vysílá 3,3 V, může ji Atmega16 brát jako logickou úroveň '1'. Komunikace tedy bude možná bez použití posunu logické úrovně. I když můžete volně používat logický posunovač úrovně od 5 do 3,3 V.
Zkontrolujte všechny projekty související s ESP8266 zde.
Požadované komponenty
- Modul ESP8266 NodeMCU
- IC mikrokontroléru Atmega16
- 16MHz krystalový oscilátor
- Dva 100nF kondenzátory
- Dva kondenzátory 22pF
- Stiskněte tlačítko
- Propojovací dráty
- Nepájivá deska
- USBASP v2.0
- LED (libovolná barva)
Kruhový diagram
Nastavení serveru SMTP2GO pro odesílání e-mailů
Před zahájením programování potřebujeme server SMTP pro odesílání pošty přes ESP8266. Online je spousta serverů SMTP. Zde bude smtp2go.com použit jako server SMTP.
Před napsáním kódu bude tedy vyžadováno uživatelské jméno a heslo SMTP. Chcete-li získat tato dvě pověření, postupujte podle níže uvedených kroků, které budou pokrývat nastavení serveru SMTP pro úspěšné odesílání e-mailů.
Krok 1: - Kliknutím na „Vyzkoušejte SMTP2GO Free“ se zaregistrujte pomocí bezplatného účtu.
Krok 2: - Otevře se okno, kde musíte zadat pověření, jako je jméno, e-mailová adresa a heslo.
Krok 3: - Po registraci obdržíte na zadaný e-mail požadavek na aktivaci. Aktivujte svůj účet pomocí odkazu pro ověření v e-mailu a poté se přihlaste pomocí svého e-mailového ID a hesla.
Krok 4: - Jakmile se přihlásíte, obdržíte své uživatelské jméno SMTP a heslo SMTP. Nezapomeňte je zkopírovat do poznámkového bloku pro další použití. Po tomto klikněte na 'dokončit'.
Krok 5: - Nyní na levé přístupové liště klikněte na „Nastavení“ a poté na „Uživatelé“. Zde vidíte informace týkající se serveru SMTP a čísla PORT. Obvykle je to takto:
Zakódujte uživatelské jméno a heslo
Nyní musíme změnit uživatelské jméno a heslo v zakódovaném formátu base64 se znakovou sadou ASCII. Pro převod e-mailu a hesla v zakódovaném formátu base64 použijte web s názvem BASE64ENCODE (https://www.base64encode.org/). Zkopírujte zakódované uživatelské jméno a heslo pro další použití:
Po dokončení těchto kroků pokračujte v programování ESP8266 NodeMCU a Atmega16 IC.
Programování mikrokontroléru AVR Atmega16 a ESP8266
Programování bude zahrnovat dva programy, jeden pro Atmega16 jako odesílatele instrukcí a druhý pro ESP8266 NodeMCU jako příjemce instrukcí. Oba programy jsou uvedeny na konci tohoto tutoriálu. Arduino IDE se používá k vypalování ESP8266 a programátoru USBasp a Atmel Studio se používá k vypalování Atmega16.
Jedno tlačítko a kontrolka LED jsou propojeny s Atmega16, takže když stiskneme toto tlačítko, Atmega16 odešle pokyny NodeMCU a NodeMCU odpovídajícím způsobem pošle e-mail. LED dioda zobrazuje stav přenosu dat. Začněme tedy programovat Atmega16 a poté ESP8266 NodeMCU.
Programování ATmega16 pro odesílání e-mailů
Začněte definováním provozní frekvence a zahrnutím všech nezbytných knihoven. Použitá knihovna je dodávána s balíčkem Atmel Studio.
#define F_CPU 16000000UL #include #include
Poté musí být definována přenosová rychlost pro komunikaci s ESP8266. Pamatujte, že přenosová rychlost musí být u obou řadičů podobná, tj. Atmega16 a NodeMCU. V tomto tutoriálu je přenosová rychlost 9600.
#define BAUD_PRESCALE (((( F_CPU / (USART_BAUDRATE * 16UL))) - 1)
K načtení hodnot přenosové rychlosti se použijí dva registry UBRRL a UBRRH. Dolních 8 bitů přenosové rychlosti se načte v UBRRL a horních 8 bitů přenosové rychlosti se načte v UBRRH. Pro zjednodušení proveďte funkci inicializace UART, kde bude přenosová rychlost předána hodnotou. Funkce inicializace UART bude zahrnovat:
- Nastavení přenosových a přijímacích bitů v registru UCSRB.
- Výběr 8bitových velikostí znaků v registru UCSRC.
- Načítání dolních a horních bitů přenosové rychlosti v registru UBRRL a UBRRH.
void UART_init (dlouhý USART_BAUDRATE) { UCSRB - = (1 << RXEN) - (1 << TXEN); UCSRC - = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRL = BAUD_PRESCALE; UBRRH = (BAUD_PRESCALE >> 8); }
Dalším krokem bude nastavení funkce pro přenos znaků. Tento krok zahrnuje čekání na dokončení prázdné vyrovnávací paměti a poté načtení hodnoty char do registru UDR. Znak bude předán pouze ve funkci.
void UART_TxChar (char c) { while (! (UCSRA & (1 <
Místo přenosu znaků vytvořte funkci pro odesílání řetězců, jak je uvedeno níže.
void UART_sendString (char * str) { unsigned char s = 0; while (str! = 0) { UART_TxChar (str); s ++; } }
Ve funkci main () zavolejte UART_init () pro zahájení přenosu. A proveďte test ozvěny odesláním testovacího řetězce do NodeMCU.
UART_init (9600); UART_sendString ("TEST");
Začněte konfigurovat pin GPIO pro LED a tlačítko.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); PORTA - = (1 << 1);
Pokud není stisknuto tlačítko, ponechte LED rozsvícenou a pokud je stisknuto tlačítko, začněte vysílat povel „ODESLAT“ do NodeMCU a vypněte LED.
if (bit_is_clear (PINA, 1)) { PORTA - = (1 << 0); _delay_ms (20); } else { PORTA & = ~ (1 << 0); _delay_ms (50); UART_sendString ("ODESLAT"); _delay_ms (1200); }
Programování ESP8266 NodeMCU
Programování NodeMCU zahrnuje příjem příkazů z Atmega16 a odesílání e-mailů pomocí jednoho SMTP serveru.
Nejprve zahrňte knihovnu WIFI, protože k odesílání e-mailů bude používán internet. Definujte své SSID a heslo WIFI pro úspěšné připojení. Také definujte server SMTP.
#zahrnout
Ve funkci setup () nastavte přenosovou rychlost podobnou přenosové rychlosti Atmega16 jako 9600 a připojte se k WIFI a zobrazte IP adresu.
Serial.begin (9600); Serial.print ("Připojení k:"); Serial.println (ssid); WiFi.begin (ssid, heslo); while (WiFi.status ()! = WL_CONNECTED) { zpoždění (500); Serial.print ("."); }
V smyčky () funkci číst přijímací bajty na Rx pin a převést na řetězec formě.
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 ("variable is ="); Serial.println (proměnná); Serial.print ("indata is ="); Serial.println (inData); zpoždění (20); } Řetězec řetězce = Řetězec (proměnná);
Pokud je přijímací příkaz spárován, odešlete e-mail příjemci voláním funkce sendEmail ().
if (string == "ODESLAT") { sendEmail (); Serial.print („Mail sent to:“); Serial.println ("Příjemce"); Serial.println (""); }
Je velmi důležité nastavit server SMTP a bez toho nelze odesílat žádné e-maily. Uvědomte si také, že během komunikace nastavte podobnou přenosovou rychlost pro oba řadiče.
Takto lze ESP8266 propojit s mikrokontrolérem AVR, aby se umožnilo komunikaci IoT. Zkontrolujte také níže uvedené pracovní video.