- Ting å huske før du starter
- Komponenter kreves
- Kretsdiagram
- Sette opp SMTP2GO Server for sending av e-post
- Programmering AVR Microcontroller Atmega16 og ESP8266
- Programmering ATmega16 for sending av e-post
- Programmering ESP8266 NodeMCU
Atmega16 er en billig 8-biters mikrokontroller og kommer med flere GPIO-er enn den forrige versjonen av mikrokontrollere. Den har alle de vanlige kommunikasjonsprotokollene som UART, USART, SPI og I2C. Den har brede applikasjoner innen robotikk-, bil- og automatiseringsindustrien på grunn av sin brede fellestøtte og enkelhet.
Atmega16 støtter ikke noen av de trådløse kommunikasjonsprotokollene som Wi-Fi og Bluetooth, som begrenser applikasjonsområdene i domenet som IoT. For å overvinne denne begrensningen kan andre kontrollere være grensesnitt som har trådløse protokoller. Det er mange kontrollere som støtter trådløse protokoller som mye brukt ESP8266,
I dag vil vi grensesnitt Atmega16 med ESP8266 NodeMCU for å få den til å kommunisere trådløst via internett. ESP8266 NodeMCU er mye brukt WiFi-modul med fellestøtte og lett tilgjengelige biblioteker. ESP8266 NodeMCU er også lett programmerbar med Arduino IDE. ESP8266 kan grensesnitt med hvilken som helst mikrokontroller:
I denne opplæringen vil e-post bli sendt med ESP8266 NodeMCU-modulen og Atmega16. Instruksjonene blir gitt av Atmega16, og når ESP8266 mottar instruksjonene, vil den sende en e-post til valgt e-postmottaker. ATmega16 og ESP8266 NodeMCU vil kommunisere over UART seriell kommunikasjon. Selv om en hvilken som helst kommunikasjonsprotokoll kan brukes til å grensesnitt ATmega16 og ESP8266 NodeMCU som SPI, I2C eller UART.
Ting å huske før du starter
Merk at Atmega16-mikrokontrolleren som brukes i dette prosjektet fungerer på 5V-logikknivå, mens ESP8266 NodeMCU fungerer på 3,3V-logikknivå. Logikknivåene til begge mikrokontrollerne er forskjellige, noe som kan forårsake misforståelse mellom Atmega16 og ESP8266 NodeMCU, eller det kan også være datatap hvis riktig logikknivå ikke opprettholdes.
Men etter å ha gått gjennom databladene til begge mikrokontrolleren, fant vi ut at vi kan grensesnitt uten at det logiske nivået skifter, ettersom alle pinnene til ESP8266 NodeMCU er tolerante fra spenningsnivå opp til 6V. Så det går bra å fortsette med 5V-logikknivå. Dataarket til Atmega16 sier også tydelig at spenningsnivået over 2V regnes som logisk nivå '1' og ESP8266 NodeMCU går på 3,3 V, det betyr at hvis ESP8266 NodeMCU overfører 3,3 V, kan Atmega16 ta det som logisk nivå '1'. Så kommunikasjon vil være mulig uten å bruke logisk nivåforskyvning. Selv om du er fri til å bruke logisk nivåskifter fra 5 til 3,3V.
Sjekk alle ESP8266-relaterte prosjekter her.
Komponenter kreves
- ESP8266 NodeMCU-modul
- Atmega16 Microcontroller IC
- 16Mhz krystalloscillator
- To kondensatorer på 100nF
- To 22pF kondensatorer
- Trykknapp
- Jumper Wires
- Brettbrett
- USBASP v2.0
- Led (hvilken som helst farge)
Kretsdiagram
Sette opp SMTP2GO Server for sending av e-post
Før vi begynner å programmere trenger vi en SMTP-server for å sende e-post via ESP8266. Det er mange SMTP-servere tilgjengelig online. Her vil smtp2go.com brukes som SMTP-server.
Så før du skriver kode, vil SMTP brukernavn og passord være påkrevd. For å få disse to legitimasjonene, følg trinnene nedenfor som dekker konfigurering av SMTP-server for vellykket sending av e-post.
Trinn 1: - Klikk på “Prøv SMTP2GO Free” for å registrere deg med en gratis konto.
Trinn 2: - Et vindu vil dukke opp, der du må oppgi noe legitimasjon som navn, e-post-ID og passord.
Trinn 3: - Etter påmelding vil du motta en aktiveringsforespørsel på den oppgitte e-posten. Aktiver kontoen din fra bekreftelseskoblingen i e-post, og logg inn med e-post-ID og passord.
Trinn 4: - Når du har logget på, får du SMTP-brukernavnet og SMTP-passordet. Husk eller kopier disse til notisblokken for videre bruk. Etter dette klikker du på 'fullfør'.
Trinn 5: - Nå på venstre tilgangslinje, klikk på "Innstillinger" og deretter på "Brukere". Her kan du se informasjonen om SMTP-serveren og PORT-nummeret. Det er vanligvis som følger:
Kod brukernavn og passord
Nå må vi endre brukernavn og passord i base64-kodet format med ASCII-tegnsett. For å konvertere e-post og passord i base64-kodet format, bruk et nettsted som heter BASE64ENCODE (https://www.base64encode.org/). Kopier det kodede brukernavnet og passordet, for videre bruk:
Etter å ha fullført disse trinnene, fortsett med programmeringen av ESP8266 NodeMCU og Atmega16 IC.
Programmering AVR Microcontroller Atmega16 og ESP8266
Programmering vil omfatte to programmer, ett for Atmega16 å fungere som avsender av instruksjoner og andre for ESP8266 NodeMCU for å fungere som mottaker av instruksjoner. Begge programmene er gitt på slutten av denne opplæringen. Arduino IDE brukes til å brenne ESP8266 og USBasp-programmerer, og Atmel Studio brukes til å brenne Atmega16.
Én trykknapp og LED er grensesnitt med Atmega16 slik at når vi trykker på trykknappen, vil Atmega16 sende instruksjoner til NodeMCU og NodeMCU vil sende e-post tilsvarende. LED-en vil vise status for dataoverføring. Så la oss begynne å programmere Atmega16 og deretter ESP8266 NodeMCU.
Programmering ATmega16 for sending av e-post
Begynn med å definere driftsfrekvens og inkludere alle nødvendige biblioteker. Biblioteket som brukes følger med Atmel Studio Package.
#define F_CPU 16000000UL #include #include
Etter dette må overføringshastigheten defineres for å kommunisere med ESP8266. Merk at overføringshastigheten må være lik for begge kontrollerne, dvs. Atmega16 og NodeMCU. I denne opplæringen er baudratet 9600.
#define BAUD_PRESCALE (((( F_CPU / (USART_BAUDRATE * 16UL))) - 1)
De to registrene UBRRL og UBRRH vil bli brukt til å laste overføringshastighetsverdier. De nedre 8-biters overføringshastighet vil lastes i UBRRL, og de øvre 8-bits overføringshastigheten vil lastes inn i UBRRH. For enkelhets skyld, gjør funksjon av UART initialisering der baudhastigheten vil bli overført av verdi. UART initialiseringsfunksjonen vil omfatte:
- Sette overførings- og mottaksbiter i register UCSRB.
- Velge 8-biters tegnstørrelser i register UCSRC.
- Lasting av nedre og øvre biter av overføringshastighet i UBRRL og UBRRH-registeret.
ugyldig UART_init (lang USART_BAUDRATE) { UCSRB - = (1 << RXEN) - (1 << TXEN); UCSRC - = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRL = BAUD_PRESCALE; UBRRH = (BAUD_PRESCALE >> 8); }
Neste trinn vil være å sette opp funksjon for overføring av tegn. Dette trinnet inkluderer å vente på at tom buffer skal fullføres, og deretter laste char-verdi til UDR-register. Røya blir kun gitt i funksjon.
ugyldig UART_TxChar (char c) { while (! (UCSRA & (1 <
I stedet for å overføre tegn, gjør du en funksjon for å sende strenger som nedenfor.
ugyldig UART_sendString (char * str) { usignert char s = 0; mens (str! = 0) { UART_TxChar (str); s ++; } }
I hovedfunksjonen () , ring UART_init () for å starte overføringen. Og gjør ekkotest ved å sende TEST-streng til NodeMCU.
UART_init (9600); UART_sendString ("TEST");
Begynn å konfigurere GPIO-pin for LED og trykknapp.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); PORTA - = (1 << 1);
Hvis du ikke trykker på trykknappen, så hold lysdioden slått PÅ, og trykk på trykknappen, og start deretter å sende "SEND" -kommandoen til NodeMCU og gjør LED slått AV.
hvis (bit_is_clear (PINA, 1)) { PORTA - = (1 << 0); _forsink_ms (20); } annet { PORTA & = ~ (1 << 0); _forsink_ms (50); UART_sendString ("SEND"); _forsink_ms (1200); }
Programmering ESP8266 NodeMCU
Programmering av NodeMCU inkluderer mottak av kommando fra Atmega16 og Sending av e-post ved hjelp av en SMTP-server.
For det første inkluderer WIFI-biblioteket ettersom internett vil bli brukt til å sende e-post. Definer WIFI-sid og passord for vellykket tilkobling. Definer også SMTP-serveren.
#inkludere
I oppsett () -funksjonen, angi overføringshastigheten som tilsvarer Atmega16 overføringshastighet som 9600 og koble til WIFI og vise IP-adressen.
Serial.begin (9600); Serial.print ("Koble til:"); Serial.println (ssid); WiFi.begin (ssid, passord); mens (WiFi.status ()! = WL_CONNECTED) { forsinkelse (500); Serial.print ("."); }
I funksjonen loop () kan du lese mottaksbyte ved Rx-pin og konvertere den til strengform.
hvis (Serial.available ()> 0) { mens (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 ("variabel er ="); Serial.println (variabel); Serial.print ("indata is ="); Serial.println (inData); forsinkelse (20); } Strengstreng = Streng (variabel);
Hvis mottakerkommandoen samsvarer, send e-post til mottakeren ved å ringe sendEmail () -funksjonen.
hvis (streng == "SEND") { sendEmail (); Serial.print ("Mail sendt til:"); Serial.println ("Mottakeren"); Serial.println (""); }
Det er veldig viktig å konfigurere SMTP-serveren, og uten å gjøre dette kan ingen e-post sendes. Vær også oppmerksom på at når du kommuniserer, må du angi baudrate som er lik for begge kontrollerne.
Så dette er hvordan ESP8266 kan kobles til AVR-mikrokontroller for å aktivere den for IoT-kommunikasjon. Sjekk også arbeidsvideoen gitt nedenfor.