- Dingen om te onthouden voordat u begint
- Componenten vereist
- Schakelschema
- SMTP2GO-server instellen voor het verzenden van e-mail
- Programmering AVR Microcontroller Atmega16 en ESP8266
- ATmega16 programmeren voor het verzenden van e-mail
- Programmering ESP8266 NodeMCU
Atmega16 is een goedkope 8-bits microcontroller en wordt geleverd met meer GPIO's dan de vorige versie van microcontrollers. Het heeft alle veelgebruikte communicatieprotocollen zoals UART, USART, SPI en I2C. Het heeft brede toepassingen in de robotica-, auto- en automatiseringsindustrieën vanwege zijn brede gemeenschapsondersteuning en eenvoud.
Atmega16 ondersteunt geen van de draadloze communicatieprotocollen zoals Wi-Fi en Bluetooth, wat de toepassingsgebieden in domeinen zoals IoT beperkt. Om deze beperking te omzeilen, kunnen andere controllers worden gekoppeld die draadloze protocollen hebben. Er zijn een aantal controllers die draadloze protocollen ondersteunen, zoals de veelgebruikte ESP8266,
Vandaag zullen we communiceren ATmega16 met ESP8266 NodeMCU om het draadloos te communiceren via internet. ESP8266 NodeMCU is een veelgebruikte WiFi-module met community-ondersteuning en gemakkelijk verkrijgbare bibliotheken. Ook ESP8266 NodeMCU is eenvoudig programmeerbaar met Arduino IDE. ESP8266 kan worden gekoppeld aan elke microcontroller:
In deze zelfstudie wordt e-mail verzonden met behulp van de ESP8266 NodeMCU-module en Atmega16. De instructies worden gegeven door Atmega16 en wanneer ESP8266 de instructies ontvangt, stuurt het een e-mail naar de geselecteerde e-mailontvanger. ATmega16 en ESP8266 NodeMCU communiceren via UART seriële communicatie. Hoewel elk communicatieprotocol kan worden gebruikt om ATmega16 en ESP8266 NodeMCU te verbinden, zoals SPI, I2C of UART.
Dingen om te onthouden voordat u begint
Merk op dat de Atmega16-microcontroller die in dit project wordt gebruikt, werkt op 5V logisch niveau, terwijl ESP8266 NodeMCU werkt op 3.3V logisch niveau. De logische niveaus van beide microcontrollers zijn verschillend, wat kan leiden tot miscommunicatie tussen Atmega16 en ESP8266 NodeMCU of er kan ook gegevensverlies optreden als het juiste logische niveau niet wordt gehandhaafd.
Nadat we echter de datasheets van beide microcontrollers hadden doorgenomen, ontdekten we dat we kunnen communiceren zonder enige logische niveauverschuiving, aangezien alle pinnen van ESP8266 NodeMCU tolerant zijn van spanningsniveau tot 6V. Het is dus prima om door te gaan met 5V logisch niveau. In de datasheet van Atmega16 staat ook duidelijk dat het spanningsniveau boven 2V wordt beschouwd als logisch niveau '1' en ESP8266 NodeMCU op 3,3 V werkt, dit betekent dat als ESP8266 NodeMCU 3,3 V uitzendt, Atmega16 het als logisch niveau '1' kan beschouwen. Communicatie zal dus mogelijk zijn zonder gebruik te maken van logische niveauverschuiving. Hoewel u vrij bent om een logische niveau-shifter van 5 naar 3.3V te gebruiken.
Bekijk hier alle ESP8266-gerelateerde projecten.
Componenten vereist
- ESP8266 NodeMCU-module
- Atmega16 Microcontroller IC
- 16Mhz kristaloscillator
- Twee 100nF condensatoren
- Twee 22pF condensatoren
- Druk op de knop
- Doorverbindingsdraden
- Breadboard
- USBASP v2.0
- Led (elke kleur)
Schakelschema
SMTP2GO-server instellen voor het verzenden van e-mail
Voordat we beginnen met programmeren, hebben we een SMTP-server nodig om e-mail te verzenden via ESP8266. Er zijn tal van SMTP-servers online beschikbaar. Hier wordt smtp2go.com gebruikt als SMTP-server.
Dus voordat u code schrijft, zijn de SMTP-gebruikersnaam en het wachtwoord vereist. Om deze twee inloggegevens te krijgen, volgt u de onderstaande stappen die betrekking hebben op het instellen van de SMTP-server voor het succesvol verzenden van e-mails.
Stap 1: - Klik op "Probeer SMTP2GO gratis" om u te registreren met een gratis account.
Stap 2: - Er verschijnt een venster waarin u een inloggegevens moet invoeren, zoals naam, e-mailadres en wachtwoord.
Stap 3: - Nadat u zich heeft aangemeld, ontvangt u een activeringsverzoek op de ingevoerde e-mail. Activeer uw account via de verificatielink in de e-mail en log vervolgens in met uw e-mail-ID en wachtwoord.
Stap 4: - Zodra u zich heeft aangemeld, krijgt u uw SMTP-gebruikersnaam en SMTP-wachtwoord. Onthoud of kopieer deze naar uw notitieblok voor verder gebruik. Klik daarna op 'voltooien'.
Stap 5: - Klik nu in de linker toegangsbalk op "Instellingen" en vervolgens op "Gebruikers". Hier ziet u de informatie met betrekking tot de SMTP-server en het POORT-nummer. Het is gewoonlijk als volgt:
Codeer gebruikersnaam en wachtwoord
Nu moeten we de gebruikersnaam en het wachtwoord wijzigen in een base64-gecodeerde indeling met ASCII-tekenset. Gebruik een website met de naam BASE64ENCODE (https://www.base64encode.org/) voor het converteren van het e-mailadres en wachtwoord in een base64-gecodeerde indeling. Kopieer de gecodeerde gebruikersnaam en het wachtwoord voor verder gebruik:
Nadat u deze stappen hebt voltooid, gaat u verder met het programmeren van ESP8266 NodeMCU en Atmega16 IC.
Programmering AVR Microcontroller Atmega16 en ESP8266
De programmering omvat twee programma's, een voor Atmega16 om op te treden als afzender van instructies en een tweede voor ESP8266 NodeMCU om te fungeren als ontvanger van instructies. Beide programma's worden aan het einde van deze tutorial gegeven. Arduino IDE wordt gebruikt om ESP8266 en USBasp-programmeur te branden en Atmel Studio wordt gebruikt om Atmega16 te branden.
Eén drukknop en LED is gekoppeld aan Atmega16, zodat wanneer we op de drukknop drukken, de Atmega16 instructies naar NodeMCU stuurt en NodeMCU dienovereenkomstig een e-mail verzendt. De LED toont de status van de datatransmissie. Dus laten we beginnen met het programmeren van Atmega16 en dan ESP8266 NodeMCU.
ATmega16 programmeren voor het verzenden van e-mail
Begin met het definiëren van de bedieningsfrequentie en het opnemen van alle benodigde bibliotheken. De gebruikte bibliotheek wordt geleverd met Atmel Studio-pakket.
#define F_CPU 16000000UL #include #include
Hierna moet de baudrate worden gedefinieerd om te kunnen communiceren met ESP8266. Merk op dat de baudrate gelijk moet zijn voor beide controllers, dwz Atmega16 en NodeMCU. In deze tutorial is de baudrate 9600.
# definiëren BAUD_PRESCALE ((( F_CPU / (USART_BAUDRATE * 16UL))) - 1)
De twee registers UBRRL en UBRRH worden gebruikt om baudrate-waarden te laden. De onderste 8-bits baudsnelheid worden geladen in UBRRL en de bovenste 8-bits baudsnelheid worden geladen in UBRRH. Maak voor de eenvoud de functie van de UART-initialisatie waar de baudrate op waarde wordt doorgegeven. De UART-initialisatiefunctie omvat:
- Verzend- en ontvangstbits instellen in register UCSRB.
- 8-bits tekengrootten selecteren in register UCSRC.
- Laden van onderste en bovenste bits van baudrate in UBRRL- en UBRRH-register.
ongeldig UART_init (long USART_BAUDRATE) { UCSRB - = (1 << RXEN) - (1 << TXEN); UCSRC - = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRL = BAUD_PRESCALE; UBRRH = (BAUD_PRESCALE >> 8); }
De volgende stap is het instellen van een functie voor het verzenden van tekens. Deze stap omvat het wachten tot de lege buffer is voltooid en vervolgens de char-waarde in het UDR-register laden. Het teken wordt alleen in functie doorgegeven.
void UART_TxChar (char c) { while (! (UCSRA & (1 <
In plaats van tekens over te dragen, maakt u een functie om strings te verzenden zoals hieronder.
void UART_sendString (char * str) { unsigned char s = 0; while (str! = 0) { UART_TxChar (str); s ++; } }
In main () functie, bel UART_init () om de transmissie te starten. En voer een echotest uit door de TEST-string naar NodeMCU te sturen.
UART_init (9600); UART_sendString ("TEST");
Begin met het configureren van de GPIO-pin voor LED en drukknop.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); PORTA - = (1 << 1);
Als de drukknop niet wordt ingedrukt, houd de LED dan AAN en als de drukknop wordt ingedrukt, begin dan met het verzenden van het "SEND" -commando naar NodeMCU en maak de LED UIT.
if (bit_is_clear (PINA, 1)) { PORTA - = (1 << 0); _delay_ms (20); } anders { PORTA & = ~ (1 << 0); _delay_ms (50); UART_sendString ("SEND"); _delay_ms (1200); }
Programmering ESP8266 NodeMCU
NodeMCU programmeren omvat het ontvangen van commando's van Atmega16 en het verzenden van e-mail met behulp van één SMTP-server.
Voeg ten eerste de WIFI-bibliotheek toe, aangezien internet wordt gebruikt om e-mail te verzenden. Definieer uw WIFI ssid en wachtwoord voor een succesvolle verbinding. Definieer ook de SMTP-server.
# omvatten
In setup () functie, Stel de baud rate vergelijkbaar met ATmega16 baud rate als 9600 en verbinding maken met Wi-Fi en IP-adres weergeven.
Serial.begin (9600); Serial.print ("Verbinden met:"); Serial.println (ssid); WiFi.begin (ssid, wachtwoord); while (WiFi.status ()! = WL_CONNECTED) { vertraging (500); Serial.print ("."); }
In loop () functie, lees de ontvangende bytes op Rx pin en converteer deze naar string-vorm.
if (Serial.available ()> 0) { while (Serial.available ()> 0 && index1 <6) { delay (100); inChar = Serial.read (); inData = inChar; index1 ++; inData = '\ 0'; } variable.toUpperCase (); voor (byte i = 0; i <6; i ++) { variable.concat (String (inData)); } Serial.print ("variabele is ="); Serial.println (variabel); Serial.print ("indata is ="); Serial.println (inData); vertraging (20); } String string = String (variabele);
Als het ontvangende commando overeenkomt, stuur dan een e-mail naar de ontvanger door de functie sendEmail () aan te roepen.
if (string == "SEND") { sendEmail (); Serial.print ("Mail verzonden naar:"); Serial.println ("De ontvanger"); Serial.println (""); }
Het is erg belangrijk om een SMTP-server in te stellen en zonder dit te doen, kunnen er geen e-mails worden verzonden. Houd er ook rekening mee dat u tijdens de communicatie de baudrate voor beide controllers gelijk moet instellen.
Dus dit is hoe ESP8266 kan worden gekoppeld met AVR microcontroller om het mogelijk te maken voor ivd communicatie. Bekijk ook de onderstaande werkende video.