- Amire emlékezni kell, mielőtt elkezdené
- Szükséges alkatrészek
- Kördiagramm
- Az SMTP2GO Server beállítása e-mail küldéséhez
- Az AVR mikrokontroller, az Atmega16 és az ESP8266 programozása
- Az ATmega16 programozása e-mail küldéshez
- ESP8266 NodeMCU programozása
Az Atmega16 egy olcsó, 8 bites mikrovezérlő, és több GPIO-val rendelkezik, mint az előző mikrovezérlő verzió. Minden olyan általánosan használt kommunikációs protokollal rendelkezik, mint az UART, USART, SPI és I2C. Széles körű alkalmazása a robotika, az autóipar és az automatizálás területén széles körű közösségi támogatása és egyszerűsége miatt.
Az Atmega16 nem támogatja a vezeték nélküli kommunikációs protokollok egyikét, mint például a Wi-Fi és a Bluetooth, amely korlátozza alkalmazási területeit olyan tartományokban, mint az IoT. Ennek a korlátozásnak a leküzdése érdekében más vezérlőket lehet összekapcsolni, amelyek vezeték nélküli protokollokkal rendelkeznek. Számos vezérlő támogatja a vezeték nélküli protokollokat, mint például a széles körben használt ESP8266,
Ma összekapcsoljuk az Atmega16-ot az ESP8266 NodeMCU-val, hogy vezeték nélkül kommunikálhasson az interneten keresztül. ESP8266 A NodeMCU széles körben használt WiFi modul, közösségi támogatással és könnyen elérhető könyvtárakkal. Az ESP8266 NodeMCU szintén könnyen programozható az Arduino IDE segítségével. Az ESP8266 bármilyen mikrovezérlővel összekapcsolható:
Ebben az oktatóanyagban az e-maileket az ESP8266 NodeMCU modul és az Atmega16 segítségével küldjük el. Az utasításokat az Atmega16 adja meg, és amikor az ESP8266 megkapja az utasításokat, e-mailt küld a kiválasztott e-mail címzettnek. Az ATmega16 és az ESP8266 NodeMCU az UART soros kommunikáción keresztül fog kommunikálni. Bár bármilyen kommunikációs protokoll használható az ATmega16 és az ESP8266 NodeMCU összekötésére, mint például az SPI, az I2C vagy az UART.
Amire emlékezni kell, mielőtt elkezdené
Vegye figyelembe, hogy a projektben használt Atmega16 mikrovezérlő 5 V-os logikai szinten működik, míg az ESP8266 NodeMCU 3,3 V-os logikai szinten működik. Mindkét mikrovezérlő logikai szintje különbözik, ami némi félreértést okozhat az Atmega16 és az ESP8266 NodeMCU között, vagy adatvesztést is okozhat, ha nem tartja fenn a megfelelő logikai szintet.
Ám miután átnéztük mindkét mikrovezérlő adatlapját, azt tapasztaltuk, hogy logikai szinteltolódás nélkül tudunk interfészt létrehozni, mivel az ESP8266 NodeMCU összes csapja toleráns a 6 V-ig terjedő feszültségszinttől. Tehát 5V logikai szint mellett jó. Az Atmega16 adatlapja egyértelműen kimondja, hogy a 2V feletti feszültségszintet „1” logikai szintnek tekintik, és az ESP8266 NodeMCU 3,3 V feszültséggel működik, ez azt jelenti, hogy ha az ESP8266 NodeMCU 3,3 V-ot továbbít, akkor az Atmega16 „1” logikai szintnek tudja venni. Tehát a kommunikáció logikai szinteltolás használata nélkül lesz lehetséges. Bár szabadon használhat logikai szintű váltót 5 és 3,3 V között.
Itt tekintheti meg az ESP8266 összes kapcsolódó projektjét.
Szükséges alkatrészek
- ESP8266 NodeMCU modul
- Atmega16 mikrokontroller IC
- 16Mhz kristályoszcillátor
- Két 100nF kondenzátor
- Két 22pF kondenzátor
- Nyomógomb
- Jumper huzalok
- Kenyérlemez
- USBASP v2.0
- Led (bármilyen színű)
Kördiagramm
Az SMTP2GO Server beállítása e-mail küldéséhez
A programozás megkezdése előtt szükségünk van egy SMTP szerverre az e-mail küldéséhez az ESP8266-on keresztül. Rengeteg SMTP szerver érhető el az interneten. Itt az smtp2go.com lesz használva SMTP szerverként.
Tehát a kód megírása előtt meg kell adni az SMTP felhasználónevet és jelszót. A két hitelesítő adat megszerzéséhez kövesse az alábbi lépéseket, amelyek kiterjednek az SMTP-kiszolgáló beállítására az e-mailek sikeres küldéséhez.
1. lépés: - Kattintson a „Try SMTP2GO Free” gombra, hogy regisztráljon egy ingyenes fiókkal.
2. lépés: - Megjelenik egy ablak, ahol meg kell adnia bizonyos hitelesítő adatokat, például nevet, e-mail azonosítót és jelszót.
3. lépés: - A regisztráció után aktiválási kérelmet kap a megadott e-mailre. Aktiválja fiókját az e-mailben található ellenőrző linkről, majd jelentkezzen be e-mail azonosítójával és jelszavával.
4. lépés: - Miután bejelentkezett, megkapja SMTP felhasználónevét és SMTP jelszavát. Ne feledje vagy másolja ezeket a jegyzettömbjébe további felhasználás céljából. Ezt követően kattintson a 'Befejezés' gombra.
5. lépés: - Most kattintson a bal oldali hozzáférési sávon a „Beállítások”, majd a „Felhasználók” elemre. Itt láthatja az SMTP kiszolgálóval és a PORT számmal kapcsolatos információkat. Általában a következő:
Kódolja a felhasználónevet és a jelszót
Most meg kell változtatnunk a Felhasználónév és Jelszó alapkódolású formátumban, ASCII karakterkészlettel. Az e-mail és a jelszó konvertálásához base64 kódolású formátumban használja a BASE64ENCODE nevű weboldalt (https://www.base64encode.org/). Másolja a kódolt felhasználónevet és jelszót további felhasználásra:
Miután befejezte ezeket a lépéseket, folytassa az ESP8266 NodeMCU és az Atmega16 IC programozásával.
Az AVR mikrokontroller, az Atmega16 és az ESP8266 programozása
A programozás két programot fog tartalmazni, az egyiket az Atmega16 fogja működtetni az utasítások feladójaként, a másikat pedig az ESP8266 NodeMCU az utasítások vevőjeként. Mindkét program a bemutató végén található. Az Arduino IDE az ESP8266, az USBasp programozó, az Atmel Studio pedig az Atmega16.
Egy nyomógomb és a LED kapcsolódik az Atmega16-hoz, így amikor megnyomjuk a nyomógombot, az Atmega16 utasításokat küld a NodeMCU-nak, a NodeMCU pedig ennek megfelelően küld e-mailt. A LED mutatja az adatátvitel állapotát. Kezdjük tehát az Atmega16, majd az ESP8266 NodeMCU programozását.
Az ATmega16 programozása e-mail küldéshez
Kezdje a működési frekvencia meghatározásával és az összes szükséges könyvtár beillesztésével. A használt könyvtárhoz az Atmel Studio Package tartozik.
#define F_CPU 16000000UL #include #include
Ezt követően meg kell határozni az adatátviteli sebességet az ESP8266-tal való kommunikációhoz. Ne feledje, hogy az adatátviteli sebességnek hasonlónak kell lennie mindkét vezérlő, azaz az Atmega16 és a NodeMCU esetében. Ebben az oktatóanyagban a baudráta 9600.
#define BAUD_PRESCALE (((( F_CPU / (USART_BAUDRATE * 16UL))) - 1)
A két UBRRL és UBRRH regisztert fogják használni az átviteli sebesség értékeinek betöltésére. Az alsó 8 bites adatsebesség UBRRL-ben, a felső 8-bites sebesség pedig UBRRH-ban lesz betöltve. Az egyszerűség kedvéért állítsuk be az UART inicializálás függvényét, ahol az adatátviteli sebesség érték szerint kerül átadásra. Az UART inicializálási funkció a következőket tartalmazza:
- Átviteli és vételi bitek beállítása az UCSRB regiszterben.
- 8 bites karakterméretek kiválasztása az UCSRC regiszterben.
- Az átviteli sebesség alsó és felső bitjének betöltése az UBRRL és UBRRH regiszterbe.
érvénytelen UART_init (hosszú USART_BAUDRATE) { UCSRB - = (1 << RXEN) - (1 << TXEN); UCSRC - = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRL = BAUD_PRESCALE; UBRRH = (BAUD_PRESCALE >> 8); }
A következő lépés a karakterek továbbítására szolgáló funkció beállítása. Ez a lépés magában foglalja az üres puffer befejezésének megvárását, majd a char érték betöltését az UDR regiszterbe. A karakter csak funkcióban kerül átadásra.
void UART_TxChar (char c) { while (! (UCSRA & (1 <
Karakterek átvitele helyett készítsen egy függvényt az alábbiakhoz hasonló karakterláncok küldéséhez.
void UART_sendString (char * str) { unsigned char s = 0; while (str! = 0) { UART_TxChar (str); s ++; } }
A main () függvényben hívja az UART_init () gombot az átvitel megkezdéséhez. És tegyen visszhangtesztet a TEST karaktersorozat elküldésével a NodeMCU-hoz.
UART_init (9600); UART_sendString ("TESZT");
Kezdje el konfigurálni a GPIO tűt a LED-hez és a nyomógombhoz.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); PORTA - = (1 << 1);
Ha nem nyomja meg a nyomógombot, tartsa bekapcsolt állapotban a LED-t, és ha megnyomja a nyomógombot, akkor kezdje el elküldeni a „SEND” parancsot a NodeMCU-nak, és kapcsolja ki a LED-et.
if (bit_is_clear (PINA, 1)) { PORTA - = (1 << 0); késedelem_ms (20); } else { PORTA & = ~ (1 << 0); késedelem_ms (50); UART_sendString ("KÜLDÉS"); késedelem_ms (1200); }
ESP8266 NodeMCU programozása
A NodeMCU programozása magában foglalja a parancs fogadását az Atmega16-tól és az e-mail küldését egy SMTP szerver segítségével.
Először is vegye fel a WIFI könyvtárat, mivel az internet az e-mailek küldésére szolgál. Határozza meg a WIFI támogatást és jelszót a sikeres kapcsolódáshoz. Adja meg az SMTP szervert is.
#include
A setup () funkcióban állítsa az Atmega16 adatátviteli sebességhez hasonló átviteli sebességet 9600-ra, és csatlakozzon a WIFI-hez, és jelenítse meg az IP-címet.
Serial.begin (9600); Serial.print ("Csatlakozás:"); Soros.println (ssid); WiFi.begin (ssid, jelszó); while (WiFi.status ()! = WL_CONNECTED) { késleltetés (500); Soros.nyomtatás ("."); }
A loop () függvényben olvassa el a fogadó bájtokat az Rx tűnél, és alakítsa át karakterlánc formává.
if (Soros.elérhető ()> 0) { míg (Soros.elérhető ()> 0 && index1 <6) { késleltetés (100); inChar = Soros.olvasás (); inData = inChar; index1 ++; inData = '\ 0'; } változó.toUpperCase (); for (byte i = 0; i <6; i ++) { változó.concat (String (inData)); } Serial.print ("változó ="); Soros.println (változó); Soros.nyomtatás ("indata is ="); Soros.println (inData); késés (20); } String string = Karakterlánc (változó);
Ha a fogadó parancs megegyezik, küldjön e-mailt a címzettnek a sendEmail () függvény meghívásával.
if (string == "KÜLDÉS") { sendEmail (); Serial.print ("Mail küldve:"); Serial.println ("A címzett"); Soros.println (""); }
Nagyon fontos az SMTP szerver beállítása, és ennek nélkül e-maileket nem lehet küldeni. Vegye figyelembe azt is, hogy kommunikáció közben állítson hasonló sebességet mindkét vezérlőhöz.
Így az ESP8266 összekapcsolható az AVR mikrovezérlővel, hogy lehetővé tegye az IoT kommunikációt. Ellenőrizze az alábbi működő videót is.