- Dinge, an die Sie sich erinnern sollten, bevor Sie beginnen
- Erforderliche Komponenten
- Schaltplan
- Einrichten des SMTP2GO-Servers zum Senden von E-Mails
- Programmierung des AVR-Mikrocontrollers Atmega16 und ESP8266
- Programmieren von ATmega16 zum Senden von E-Mails
- Programmierung ESP8266 NodeMCU
Atmega16 ist ein kostengünstiger 8-Bit-Mikrocontroller mit mehr GPIOs als seine vorherige Version von Mikrocontrollern. Es verfügt über alle gängigen Kommunikationsprotokolle wie UART, USART, SPI und I2C. Aufgrund seiner breiten Community-Unterstützung und Einfachheit hat es breite Anwendungen in der Robotik-, Automobil- und Automatisierungsindustrie.
Atmega16 unterstützt keines der drahtlosen Kommunikationsprotokolle wie Wi-Fi und Bluetooth, wodurch die Anwendungsbereiche in Domänen wie IoT eingeschränkt werden. Um diese Einschränkung zu überwinden, können andere Controller mit drahtlosen Protokollen angeschlossen werden. Es gibt eine Reihe von Controllern, die drahtlose Protokolle wie den weit verbreiteten ESP8266 unterstützen.
Heute werden wir eine Schnittstelle Atmega16 mit Esp8266 NodeMCU um drahtlos über das Internet zu machen kommunizieren. ESP8266 NodeMCU ist ein weit verbreitetes WiFi-Modul mit Community-Unterstützung und leicht verfügbaren Bibliotheken. Auch ESP8266 NodeMCU ist mit Arduino IDE leicht programmierbar. ESP8266 kann mit jedem Mikrocontroller verbunden werden:
In diesem Tutorial werden E-Mails mit dem ESP8266 NodeMCU-Modul und Atmega16 gesendet. Die Anweisungen werden von Atmega16 gegeben. Wenn ESP8266 die Anweisungen erhält, wird eine E-Mail an den ausgewählten E-Mail-Empfänger gesendet. ATmega16 und ESP8266 NodeMCU kommunizieren über die serielle UART-Kommunikation. Obwohl jedes Kommunikationsprotokoll verwendet werden kann, um ATmega16- und ESP8266-NodeMCU wie SPI, I2C oder UART zu verbinden.
Dinge, an die Sie sich erinnern sollten, bevor Sie beginnen
Beachten Sie, dass der in diesem Projekt verwendete Atmega16-Mikrocontroller auf 5-V-Logikpegel arbeitet, während ESP8266 NodeMCU auf 3,3-V-Logikpegel arbeitet. Die Logikpegel beider Mikrocontroller sind unterschiedlich, was zu einer Fehlkommunikation zwischen Atmega16 und ESP8266 NodeMCU führen kann, oder es kann auch zu Datenverlust kommen, wenn der richtige Logikpegel nicht eingehalten wird.
Nachdem wir jedoch die Datenblätter beider Mikrocontroller durchgesehen hatten, stellten wir fest, dass wir eine Schnittstelle ohne Verschiebung des Logikpegels herstellen können, da alle Pins der ESP8266 NodeMCU von einem Spannungspegel bis zu 6 V tolerant sind. Es ist also in Ordnung, mit einem 5-V-Logikpegel fortzufahren. Das Datenblatt von Atmega16 gibt außerdem eindeutig an, dass der Spannungspegel über 2 V als Logikpegel '1' betrachtet wird und die ESP8266-NodeMCU mit 3,3 V betrieben wird. Wenn die ESP8266-NodeMCU 3,3 V sendet, kann Atmega16 sie als Logikpegel '1' annehmen. Die Kommunikation ist also ohne logische Pegelverschiebung möglich. Es steht Ihnen jedoch frei, einen Logikpegel-Shifter von 5 bis 3,3 V zu verwenden.
Überprüfen Sie hier alle ESP8266-bezogenen Projekte.
Erforderliche Komponenten
- ESP8266 NodeMCU-Modul
- Atmega16 Mikrocontroller IC
- 16 MHz Kristalloszillator
- Zwei 100nF Kondensatoren
- Zwei 22pF-Kondensatoren
- Druckknopf
- Überbrückungsdrähte
- Steckbrett
- USBASP v2.0
- LED (beliebige Farbe)
Schaltplan
Einrichten des SMTP2GO-Servers zum Senden von E-Mails
Bevor wir mit der Programmierung beginnen, benötigen wir einen SMTP-Server, um E-Mails über ESP8266 zu senden. Es sind viele SMTP-Server online verfügbar. Hier wird smtp2go.com als SMTP-Server verwendet.
Vor dem Schreiben von Code sind daher der SMTP-Benutzername und das Kennwort erforderlich. Um diese beiden Anmeldeinformationen zu erhalten, führen Sie die folgenden Schritte aus, in denen Sie den SMTP-Server für das erfolgreiche Senden von E-Mails einrichten.
Schritt 1: - Klicken Sie auf "SMTP2GO Free testen", um sich mit einem kostenlosen Konto zu registrieren.
Schritt 2: - Ein Fenster wird geöffnet, in dem Sie einige Anmeldeinformationen wie Name, E-Mail-ID und Passwort eingeben müssen.
Schritt 3: - Nach der Anmeldung erhalten Sie eine Aktivierungsanfrage für die eingegebene E-Mail. Aktivieren Sie Ihr Konto über den Bestätigungslink in der E-Mail und melden Sie sich dann mit Ihrer E-Mail-ID und Ihrem Passwort an.
Schritt 4: - Sobald Sie sich angemeldet haben, erhalten Sie Ihren SMTP-Benutzernamen und Ihr SMTP-Passwort. Denken Sie daran oder kopieren Sie diese zur weiteren Verwendung auf Ihren Notizblock. Danach klicken Sie auf "Fertig stellen".
Schritt 5: - Klicken Sie nun in der linken Zugriffsleiste auf "Einstellungen" und dann auf "Benutzer". Hier sehen Sie die Informationen zum SMTP-Server und zur PORT-Nummer. Es ist normalerweise wie folgt:
Benutzername und Passwort verschlüsseln
Jetzt müssen wir Benutzername und Passwort im Base64-codierten Format mit ASCII-Zeichensatz ändern. Verwenden Sie zum Konvertieren von E-Mail und Kennwort in das Base64-codierte Format eine Website namens BASE64ENCODE (https://www.base64encode.org/). Kopieren Sie den verschlüsselten Benutzernamen und das Passwort zur weiteren Verwendung:
Nach Abschluss dieser Schritte fahren Sie mit der Programmierung von ESP8266 NodeMCU und Atmega16 IC fort.
Programmierung des AVR-Mikrocontrollers Atmega16 und ESP8266
Die Programmierung umfasst zwei Programme, eines für Atmega16 als Absender von Anweisungen und das zweite für ESP8266 NodeMCU als Empfänger von Anweisungen. Beide Programme finden Sie am Ende dieses Tutorials. Arduino IDE wird zum Brennen von ESP8266 und USBasp-Programmiergerät verwendet, und Atmel Studio wird zum Brennen von Atmega16 verwendet.
Ein Druckknopf und eine LED sind mit Atmega16 verbunden, sodass der Atmega16 beim Drücken des Druckknopfs Anweisungen an NodeMCU sendet und NodeMCU entsprechend E-Mails sendet. Die LED zeigt den Status der Datenübertragung an. Beginnen wir also mit der Programmierung von Atmega16 und dann von ESP8266 NodeMCU.
Programmieren von ATmega16 zum Senden von E-Mails
Beginnen Sie mit der Definition der Betriebsfrequenz und der Einbeziehung aller erforderlichen Bibliotheken. Die verwendete Bibliothek wird mit dem Atmel Studio-Paket geliefert.
#define F_CPU 16000000UL #include #include
Danach muss die Baudrate definiert werden, um mit ESP8266 zu kommunizieren. Beachten Sie, dass die Baudrate für beide Controller, dh Atmega16 und NodeMCU, ähnlich sein muss. In diesem Tutorial beträgt die Baudrate 9600.
#define BAUD_PRESCALE ((( F_CPU / (USART_BAUDRATE * 16UL))) - 1)
Die beiden Register UBRRL und UBRRH werden zum Laden von Baudratenwerten verwendet. Die unteren 8-Bit-Baudraten werden in UBRRL und die oberen 8-Bit-Baudraten in UBRRH geladen. Machen Sie der Einfachheit halber eine Funktion der UART-Initialisierung, bei der die Baudrate als Wert übergeben wird. Die UART-Initialisierungsfunktion umfasst:
- Setzen von Sende- und Empfangsbits im Register UCSRB.
- Auswahl von 8-Bit-Zeichengrößen im Register UCSRC.
- Laden der unteren und oberen Bits der Baudrate in das UBRRL- und UBRRH-Register.
void UART_init (long USART_BAUDRATE) { UCSRB - = (1 << RXEN) - (1 << TXEN); UCSRC - = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRL = BAUD_PRESCALE; UBRRH = (BAUD_PRESCALE >> 8); }}
Im nächsten Schritt wird die Funktion zum Übertragen von Zeichen eingerichtet. Dieser Schritt umfasst das Warten auf das Beenden des leeren Puffers und das Laden des Zeichenwerts in das UDR-Register. Das Zeichen wird nur in Funktion übergeben.
void UART_TxChar (char c) { while (! (UCSRA & (1 <)
Anstatt Zeichen zu übertragen, erstellen Sie eine Funktion zum Senden von Zeichenfolgen wie unten.
void UART_sendString (char * str) { vorzeichenloses Zeichen s = 0; while (str! = 0) { UART_TxChar (str); s ++; } }
In main () Funktion ruft UART_init () , um die Übertragung zu starten. Und tun Echotest durch TEST String NodeMCU Senden.
UART_init (9600); UART_sendString ("TEST");
Beginnen Sie mit der Konfiguration des GPIO-Pins für LED und Drucktaste.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); PORTA - = (1 << 1);
Wenn der Druckknopf nicht gedrückt wird, halten Sie die LED eingeschaltet. Wenn der Druckknopf gedrückt wird, senden Sie den Befehl „SENDEN“ an NodeMCU und schalten Sie die LED aus.
if (bit_is_clear (PINA, 1)) { PORTA - = (1 << 0); Verzögerung (20); } else { PORTA & = ~ (1 << 0); Verzögerung (50); UART_sendString ("SEND"); Verzögerung (1200); }}
Programmierung ESP8266 NodeMCU
Die Programmierung von NodeMCU umfasst den Empfang von Befehlen von Atmega16 und das Senden von E-Mails über einen SMTP-Server.
Fügen Sie zunächst die WIFI-Bibliothek hinzu, da das Internet zum Senden von E-Mails verwendet wird. Definieren Sie Ihre WIFI-SSID und Ihr Passwort für eine erfolgreiche Verbindung. Definieren Sie auch den SMTP-Server.
#einschließen
In setup () Funktion, die Baudrate ähnlich wie Atmega16 Baudrate als 9600 und eine Verbindung zum Internet und Anzeige IP - Adresse.
Serial.begin (9600); Serial.print ("Herstellen einer Verbindung zu:"); Serial.println (ssid); WiFi.begin (ssid, Passwort); while (WiFi.status ()! = WL_CONNECTED) { delay (500); Serial.print ("."); }}
In Schleife () Funktion, lesen die Empfangs bei Rx pin - Bytes und wandelt es in Fadenform.
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 ("Variable ist ="); Serial.println (Variable); Serial.print ("indata is ="); Serial.println (inData); Verzögerung (20); } String string = String (Variable);
Wenn der Empfangsbefehl übereinstimmt, senden Sie eine E-Mail an den Empfänger, indem Sie die Funktion sendEmail () aufrufen.
if (string == "SEND") { sendEmail (); Serial.print ("Mail gesendet an:"); Serial.println ("Der Empfänger"); Serial.println (""); }}
Es ist sehr wichtig, den SMTP-Server einzurichten. Andernfalls können keine E-Mails gesendet werden. Beachten Sie auch, dass Sie während der Kommunikation die Baudrate für beide Controller ähnlich einstellen.
Auf diese Weise kann der ESP8266 mit dem AVR-Mikrocontroller verbunden werden, um ihn für die IoT-Kommunikation zu aktivieren. Überprüfen Sie auch das unten angegebene Arbeitsvideo.