- Saker att komma ihåg innan du börjar
- Komponenter krävs
- Kretsschema
- Konfigurera SMTP2GO-server för att skicka e-post
- Programmering av AVR-mikrokontroller Atmega16 och ESP8266
- Programmering ATmega16 för att skicka e-post
- Programmering ESP8266 NodeMCU
Atmega16 är en billig 8-bitars mikrokontroller och kommer med fler GPIO-enheter än den tidigare versionen av mikrokontroller. Den har alla vanliga kommunikationsprotokoll som UART, USART, SPI och I2C. Det har breda applikationer inom robotik-, bil- och automationsindustrin på grund av dess breda community-stöd och enkelhet.
Atmega16 stöder inte något av de trådlösa kommunikationsprotokollen som Wi-Fi och Bluetooth som begränsar dess applikationsområden i domän som IoT. För att övervinna denna begränsning kan andra styrenheter ha gränssnitt som har trådlösa protokoll. Det finns ett antal styrenheter som stöder trådlösa protokoll, som i stor utsträckning ESP8266,
Idag kommer vi att gränssnitt Atmega16 med ESP8266 NodeMCU för att få den att kommunicera trådlöst via internet. ESP8266 NodeMCU används i stor utsträckning WiFi-modul med gemenskapsstöd och lättillgängliga bibliotek. ESP8266 NodeMCU är också lätt programmerbar med Arduino IDE. ESP8266 kan anslutas till vilken mikrokontroller som helst:
I denna handledning skickas e-post med ESP8266 NodeMCU-modulen och Atmega16. Instruktionerna kommer att ges av Atmega16 och när ESP8266 tar emot instruktionerna skickar den ett e-postmeddelande till den valda e-postmottagaren. ATmega16 och ESP8266 NodeMCU kommer att kommunicera via UART seriell kommunikation. Även om vilket kommunikationsprotokoll som helst kan användas för att gränssnitt ATmega16 och ESP8266 NodeMCU såsom SPI, I2C eller UART.
Saker att komma ihåg innan du börjar
Observera att Atmega16-mikrokontrollern som används i detta projekt fungerar på 5V-logiknivå medan ESP8266 NodeMCU fungerar på 3,3V-logiknivå. Logiknivåerna för båda mikrokontrollerna är olika, vilket kan orsaka viss felkommunikation mellan Atmega16 och ESP8266 NodeMCU eller det kan också förekomma dataförlust om korrekt logiknivå inte upprätthålls.
Men efter att ha gått igenom datablad för båda mikrokontroller fann vi att vi kan gränssnitt utan att någon logisk nivå skiftar eftersom alla stift i ESP8266 NodeMCU är toleranta från spänningsnivå upp till 6V. Så det går bra med 5V logiknivå. Datablad över Atmega16 säger också tydligt att spänningsnivån över 2V betraktas som logisk nivå '1' och ESP8266 NodeMCU körs på 3,3 V, det betyder att om ESP8266 NodeMCU sänder 3,3 V kan Atmega16 ta det som logisk nivå '1'. Så kommunikation är möjlig utan att logisk nivåförskjutning används. Även om du har frihet att använda logisk nivåväxlare från 5 till 3,3 V.
Kontrollera alla ESP8266-relaterade projekt här.
Komponenter krävs
- ESP8266 NodeMCU-modul
- Atmega16 Microcontroller IC
- 16Mhz kristalloscillator
- Två 100nF kondensatorer
- Två 22pF kondensatorer
- Tryckknapp
- Bygeltrådar
- Bakbord
- USBASP v2.0
- Led (valfri färg)
Kretsschema
Konfigurera SMTP2GO-server för att skicka e-post
Innan vi börjar programmera behöver vi en SMTP-server för att skicka e-post via ESP8266. Det finns många SMTP-servrar tillgängliga online. Här kommer smtp2go.com att användas som SMTP-server.
Så innan du skriver kod krävs SMTP-användarnamn och lösenord. För att få dessa två referenser följer du stegen nedan som kommer att täcka inställningen av SMTP-servern för att lyckas skicka e-post.
Steg 1: - Klicka på “Testa SMTP2GO Free” för att registrera dig med ett gratis konto.
Steg 2: - Ett fönster kommer att dyka upp, där du måste ange någon referens som namn, e-post-ID och lösenord.
Steg 3: - Efter registreringen kommer du att få en aktiveringsbegäran i det angivna e-postmeddelandet. Aktivera ditt konto från verifieringslänken i e-post och logga sedan in med ditt e-post-ID och lösenord.
Steg 4: - När du har loggat in får du ditt SMTP-användarnamn och SMTP-lösenord. Kom ihåg eller kopiera dessa till anteckningsblocket för vidare användning. Klicka sedan på "finish".
Steg 5: - Klicka nu på vänster åtkomstfält på "Inställningar" och sedan på "Användare". Här kan du se information om SMTP-server och PORT-nummer. Det är vanligtvis följande:
Koda användarnamn och lösenord
Nu måste vi ändra användarnamn och lösenord i base64-kodat format med ASCII-teckenuppsättning. Använd en webbplats som heter BASE64ENCODE (https://www.base64encode.org/) för att konvertera e-post och lösenord i base64-kodat format. Kopiera det kodade användarnamnet och lösenordet för vidare användning:
Efter att ha avslutat dessa steg fortsätter du med programmeringen av ESP8266 NodeMCU och Atmega16 IC.
Programmering av AVR-mikrokontroller Atmega16 och ESP8266
Programmeringen kommer att innehålla två program, ett för Atmega16 att fungera som avsändare av instruktioner och ett för ESP8266 NodeMCU för att fungera som mottagare av instruktioner. Båda programmen ges i slutet av denna handledning. Arduino IDE används för att bränna ESP8266 och USBasp-programmerare och Atmel Studio används för att bränna Atmega16.
En tryckknapp och LED är gränssnitt med Atmega16 så att när vi trycker på tryckknappen kommer Atmega16 att skicka instruktioner till NodeMCU och NodeMCU kommer att skicka e-post i enlighet därmed. Lysdioden visar status för dataöverföring. Så låt oss börja programmera Atmega16 och sedan ESP8266 NodeMCU.
Programmering ATmega16 för att skicka e-post
Börja med att definiera driftsfrekvens och inkludera alla nödvändiga bibliotek. Biblioteket som används levereras med Atmel Studio Package.
#define F_CPU 16000000UL #include #include
Efter detta måste baudhastigheten definieras för att kommunicera med ESP8266. Observera att överföringshastigheten måste vara lika för båda styrenheterna, dvs. Atmega16 och NodeMCU. I denna handledning är baudrat 9600.
#define BAUD_PRESCALE (((( F_CPU / (USART_BAUDRATE * 16UL))) - 1)
De två registren UBRRL och UBRRH kommer att användas för att ladda överföringshastighetsvärden. De lägre 8-bitars baudhastigheten laddas i UBRRL och de övre 8-bitarna av baudhastigheten laddas i UBRRH. För enkelhetens skull gör du funktionen av UART-initialisering där baudhastigheten kommer att passeras med värde. UART-initialiseringsfunktionen inkluderar:
- Ställa in sändnings- och mottagningsbitar i registret UCSRB.
- Välja 8-bitars teckenstorlekar i registret UCSRC.
- Lastning av nedre och övre bitar av överföringshastighet i UBRRL- och UBRRH-registret.
ogiltig UART_init (lång USART_BAUDRATE) { UCSRB - = (1 << RXEN) - (1 << TXEN); UCSRC - = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRL = BAUD_PRESCALE; UBRRH = (BAUD_PRESCALE >> 8); }
Nästa steg är att ställa in funktion för överföring av tecken. Detta steg inkluderar att vänta på att tom buffert är klar och sedan ladda char-värde till UDR-registret. Charen kommer endast att skickas i funktion.
ogiltig UART_TxChar (char c) { medan (! (UCSRA & (1 <
Istället för att överföra tecken gör du en funktion för att skicka strängar som nedan.
ogiltig UART_sendString (char * str) { osignerad char s = 0; medan (str! = 0) { UART_TxChar (str); s ++; } }
I huvudfunktionen () , ring UART_init () för att starta överföringen. Och gör ekotest genom att skicka TEST-sträng till NodeMCU.
UART_init (9600); UART_sendString ("TEST");
Börja konfigurera GPIO-stift för LED och tryckknapp.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); PORTA - = (1 << 1);
Om inte tryckknappen trycks in, håll då LED-lampan PÅ och om tryckknappen trycks in, börja sända ”SEND” -kommandot till NodeMCU och gör LED avstängd.
if (bit_is_clear (PINA, 1)) { PORTA - = (1 << 0); _fördröja_ms (20); } annat { PORTA & = ~ (1 << 0); _fördröjning_ms (50); UART_sendString ("SEND"); _fördröja_ms (1200); }
Programmering ESP8266 NodeMCU
Programmering av NodeMCU inkluderar mottagning av kommando från Atmega16 och Sändning av e-post med en SMTP-server.
För det första, inkludera WIFI-biblioteket eftersom internet kommer att användas för att skicka e-post. Definiera ditt WIFI-sid och lösenord för lyckad anslutning. Definiera även SMTP-servern.
#omfatta
I inställningsfunktionen () ställer du in överföringshastigheten som liknar Atmega16-överföringshastigheten som 9600 och ansluter till WIFI och visar IP-adressen.
Serial.begin (9600); Serial.print ("Ansluter till:"); Serial.println (ssid); WiFi.begin (ssid, lösenord); medan (WiFi.status ()! = WL_CONNECTED) { fördröjning (500); Serial.print ("."); }
I funktionen loop () läser du de mottagande byten vid Rx-stift och konverterar den till strängform.
if (Serial.available ()> 0) { while (Serial.available ()> 0 && index1 <6) { delay (100); inChar = Serial.read (); inData = inChar; index1 ++; inData = '\ 0'; } variable.toUpperCase (); för (byte i = 0; i <6; i ++) { variable.concat (String (inData)); } Serial.print ("variabel är ="); Serial.println (variabel); Serial.print ("indata is ="); Serial.println (inData); fördröjning (20); } Strängsträng = Sträng (variabel);
Om mottagningskommandot matchas, skicka e-post till mottagaren genom att ringa sendEmail () -funktionen.
if (string == "SEND") { sendEmail (); Serial.print ("E-post skickad till:"); Serial.println ("Mottagaren"); Serial.println (""); }
Det är mycket viktigt att ställa in SMTP-servern och utan att göra detta kan inga e-postmeddelanden skickas. Observera också att under kommunikation, ställ in baudhastighet liknande för båda styrenheterna.
Så detta är hur ESP8266 kan anslutas till AVR-mikrokontroller för att möjliggöra den för IoT-kommunikation. Kontrollera också arbetsvideoen nedan.