- Ting at huske inden du starter
- Komponenter, der kræves
- Kredsløbsdiagram
- Opsætning af SMTP2GO-server til afsendelse af e-mail
- Programmering AVR Microcontroller Atmega16 og ESP8266
- Programmering ATmega16 til afsendelse af e-mail
- Programmering ESP8266 NodeMCU
Atmega16 er en billig 8-bit mikrokontroller og leveres med flere antal GPIO'er end den tidligere version af mikrokontroller. Det har alle de almindeligt anvendte kommunikationsprotokoller som UART, USART, SPI og I2C. Det har brede applikationer inden for robot-, bil- og automatiseringsindustrien på grund af dets brede samfundsstøtte og enkelhed.
Atmega16 understøtter ikke nogen af de trådløse kommunikationsprotokoller som Wi-Fi og Bluetooth, som begrænser dets applikationsområder i domæne som IoT. For at overvinde denne begrænsning kan andre controllere have grænseflade, som har trådløse protokoller. Der er et antal controllere, der understøtter trådløse protokoller som meget brugt ESP8266,
I dag vil vi interface Atmega16 med ESP8266 NodeMCU for at få den til at kommunikere trådløst via internettet. ESP8266 NodeMCU er meget brugt WiFi-modul med community-support og let tilgængelige biblioteker. ESP8266 NodeMCU er også let programmerbar med Arduino IDE. ESP8266 kan forbindes med enhver mikrokontroller:
I denne vejledning sendes e-mail ved hjælp af ESP8266 NodeMCU-modul og Atmega16. Instruktionerne gives af Atmega16, og når ESP8266 modtager instruktionerne, sender den en e-mail til den valgte e-mail-modtager. ATmega16 og ESP8266 NodeMCU kommunikerer via UART seriel kommunikation. Selvom enhver kommunikationsprotokol kan bruges til at grænseflade ATmega16 og ESP8266 NodeMCU såsom SPI, I2C eller UART.
Ting at huske inden du starter
Bemærk, at Atmega16-mikrocontrolleren, der bruges i dette projekt, fungerer på 5V-logikniveau, mens ESP8266 NodeMCU fungerer på 3,3V-logikniveau. Logikniveauerne for begge mikrocontrollere er forskellige, hvilket kan forårsage misforståelse mellem Atmega16 og ESP8266 NodeMCU, eller der kan også være datatab, hvis korrekt logikniveau ikke opretholdes.
Men efter at have gennemgået databladene for begge mikrocontroller, fandt vi ud af, at vi kan interface uden nogen forskydning af det logiske niveau, da alle ben på ESP8266 NodeMCU er tolerante fra spændingsniveau op til 6V. Så det går fint med 5V-logikniveau. Dataark over Atmega16 angiver også tydeligt, at spændingsniveauet over 2V betragtes som logisk niveau '1' og ESP8266 NodeMCU kører på 3,3 V, det betyder, at hvis ESP8266 NodeMCU transmitterer 3,3 V, kan Atmega16 tage det som logisk niveau '1'. Så kommunikation vil være mulig uden brug af logisk niveauforskydning. Selvom du er fri til at bruge logisk niveauskifter fra 5 til 3,3 V.
Tjek alle ESP8266-relaterede projekter her.
Komponenter, der kræves
- ESP8266 NodeMCU-modul
- Atmega16 Microcontroller IC
- 16Mhz krystaloscillator
- To 100nF kondensatorer
- To 22pF kondensatorer
- Trykknap
- Jumper Wires
- Brødbræt
- USBASP v2.0
- Led (enhver farve)
Kredsløbsdiagram
Opsætning af SMTP2GO-server til afsendelse af e-mail
Før vi starter programmeringen, har vi brug for en SMTP-server til at sende e-mail via ESP8266. Der er masser af SMTP-servere tilgængelige online. Her vil smtp2go.com blive brugt som SMTP-server.
Så før du skriver kode, kræves SMTP-brugernavnet og adgangskoden. For at få disse to legitimationsoplysninger skal du følge nedenstående trin, der dækker opsætning af SMTP-server til succesfuld afsendelse af e-mails.
Trin 1: - Klik på “Prøv SMTP2GO Free” for at registrere dig med en gratis konto.
Trin 2: - Der vises et vindue, hvor du skal indtaste nogle legitimationsoplysninger som navn, e-mail-id og adgangskode.
Trin 3: - Efter tilmelding modtager du en aktiveringsanmodning i den indtastede e-mail. Aktiver din konto fra bekræftelseslinket i e-mail, og log ind med dit e-mail-id og din adgangskode.
Trin 4: - Når du er logget ind, får du dit SMTP-brugernavn og SMTP-adgangskode. Husk eller kopier disse til din notesblok til videre brug. Klik derefter på 'finish'.
Trin 5: - Klik nu på venstre adgangslinje på "Indstillinger" og derefter på "Brugere". Her kan du se oplysningerne om SMTP-serveren og PORT-nummeret. Det er normalt som følger:
Kod brugernavn og adgangskode
Nu skal vi ændre brugernavn og adgangskode i base64-kodet format med ASCII-tegnsæt. Brug en webside kaldet BASE64ENCODE (https://www.base64encode.org/) til at konvertere e-mail og adgangskode i base64-kodet format. Kopier det kodede brugernavn og adgangskode til yderligere brug:
Når disse trin er afsluttet, fortsæt til programmeringen af ESP8266 NodeMCU og Atmega16 IC.
Programmering AVR Microcontroller Atmega16 og ESP8266
Programmering vil omfatte to programmer, et for Atmega16 til at fungere som afsender af instruktioner og et andet for ESP8266 NodeMCU til at fungere som modtager af instruktioner. Begge programmer er givet i slutningen af denne vejledning. Arduino IDE bruges til at brænde ESP8266 og USBasp-programmør, og Atmel Studio bruges til at brænde Atmega16.
Én trykknap og LED er grænseflade med Atmega16, så når vi trykker på trykknappen, sender Atmega16 instruktioner til NodeMCU, og NodeMCU sender e-mail i overensstemmelse hermed. LED'en viser status for datatransmission. Så lad os begynde at programmere Atmega16 og derefter ESP8266 NodeMCU.
Programmering ATmega16 til afsendelse af e-mail
Start med at definere driftsfrekvens og inkludere alle nødvendige biblioteker. Det anvendte bibliotek leveres med Atmel Studio-pakke.
#define F_CPU 16000000UL #include #include
Herefter skal baudhastigheden defineres for at kommunikere med ESP8266. Bemærk, at baudhastigheden skal være ens for begge controllere, dvs. Atmega16 og NodeMCU. I denne vejledning er baudratet 9600.
#definer BAUD_PRESCALE (((( F_CPU / (USART_BAUDRATE * 16UL))) - 1)
De to registre UBRRL og UBRRH vil blive brugt til at indlæse baudrate-værdier. De lavere 8-bit baudhastighed indlæses i UBRRL, og de øverste 8-bit baudhastighed indlæses i UBRRH. For enkelhedens skyld skal du anvende UART-initialisering, hvor baudhastigheden overføres med værdi. UART-initialiseringsfunktionen inkluderer:
- Indstilling af transmissions- og modtagelsesbits i registret UCSRB.
- Valg af 8-bit tegnstørrelser i UCSRC-registeret.
- Indlæsning af nedre og øvre bit af Baud rate i UBRRL og UBRRH register.
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); }
Næste trin er opsætning af funktion til transmission af tegn. Dette trin inkluderer at vente på, at tom buffer er færdig, og derefter indlæse char-værdi i UDR-register. Tegnen overføres kun i funktion.
ugyldigt UART_TxChar (char c) { while (! (UCSRA & (1 <
I stedet for at overføre tegn, lav en funktion til at sende strenge som nedenfor.
ugyldigt UART_sendString (char * str) { usigneret char s = 0; mens (str! = 0) { UART_TxChar (str); s ++; } }
I hovedfunktionen () skal du ringe til UART_init () for at starte transmissionen. Og lav ekkotest ved at sende TEST-streng til NodeMCU.
UART_init (9600); UART_sendString ("TEST");
Begynd at konfigurere GPIO-pin til LED og trykknap.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); PORTA - = (1 << 1);
Hvis der ikke trykkes på trykknap, skal du holde LED'en tændt, og hvis der trykkes på trykknappen, start derefter med at sende “SEND” -kommandoen til NodeMCU, og gør LED slukket.
hvis (bit_is_clear (PINA, 1)) { PORTA - = (1 << 0); _forsink_ms (20); } andet { PORTA & = ~ (1 << 0); _forsink_ms (50); UART_sendString ("SEND"); _forsink_ms (1200); }
Programmering ESP8266 NodeMCU
Programmering af NodeMCU inkluderer modtagelse af kommando fra Atmega16 og afsendelse af e-mail ved hjælp af en SMTP-server.
For det første skal du inkludere WIFI-biblioteket, da internet vil blive brugt til at sende e-mail. Definer din WIFI-ssid og adgangskode for en vellykket forbindelse. Definer også SMTP-serveren.
#omfatte
I opsætningsfunktionen () skal du indstille baudhastigheden svarende til Atmega16 baudhastigheden som 9600 og oprette forbindelse til WIFI og vise IP-adressen.
Serial.begin (9600); Serial.print ("Opretter forbindelse til:"); Serial.println (ssid); WiFi.begin (ssid, password); mens (WiFi.status ()! = WL_CONNECTED) { forsinkelse (500); Serial.print ("."); }
I funktionen loop () skal du læse de modtagende bytes 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 er ="); Serial.println (inData); forsinkelse (20); } Strengstreng = Streng (variabel);
Hvis modtagerkommandoen matches, skal du sende e-mail til modtageren ved at ringe til sendEmail () -funktionen.
hvis (streng == "SEND") { sendEmail (); Serial.print ("Mail sendt til:"); Serial.println ("Modtageren"); Serial.println (""); }
Det er meget vigtigt at konfigurere SMTP-serveren og uden at gøre dette kan der ikke sendes e-mails. Bemærk også, at under kommunikation skal du indstille baudrate ens for begge controllere.
Så dette er, hvordan ESP8266 kan interfaces med AVR-mikrocontroller for at aktivere det til IoT-kommunikation. Tjek også nedenstående arbejdsvideo.