- Choses à retenir avant de commencer
- Composants requis
- Schéma
- Configuration du serveur SMTP2GO pour l'envoi d'e-mails
- Programmation du microcontrôleur AVR Atmega16 et ESP8266
- Programmation d'ATmega16 pour l'envoi d'e-mails
- Programmation ESP8266 NodeMCU
Atmega16 est un microcontrôleur 8 bits à faible coût et est livré avec plus de GPIO que sa version précédente de microcontrôleurs. Il a tous les protocoles de communication couramment utilisés comme UART, USART, SPI et I2C. Il a de larges applications dans les industries de la robotique, de l'automobile et de l'automatisation en raison de son large soutien communautaire et de sa simplicité.
Atmega16 ne prend en charge aucun des protocoles de communication sans fil tels que Wi-Fi et Bluetooth, ce qui limite ses domaines d'application dans des domaines comme l'IoT. Pour surmonter cette limitation, d'autres contrôleurs peuvent être interfacés avec des protocoles sans fil. Il existe un certain nombre de contrôleurs qui prennent en charge les protocoles sans fil comme ESP8266 largement utilisé,
Aujourd'hui, nous allons interfacer Atmega16 avec ESP8266 NodeMCU pour le faire communiquer sans fil via Internet. ESP8266 NodeMCU est un module WiFi largement utilisé avec le support de la communauté et des bibliothèques facilement disponibles. ESP8266 NodeMCU est également facilement programmable avec Arduino IDE. L'ESP8266 peut être interfacé avec n'importe quel microcontrôleur:
Dans ce didacticiel, les e - mails seront envoyés à l'aide du module ESP8266 NodeMCU et d'Atmega16. Les instructions seront données par Atmega16 et lorsque ESP8266 recevra les instructions, il enverra un e-mail au destinataire sélectionné. ATmega16 et ESP8266 NodeMCU communiqueront via la communication série UART. Bien que n'importe quel protocole de communication puisse être utilisé pour interfacer ATmega16 et ESP8266 NodeMCU tel que SPI, I2C ou UART.
Choses à retenir avant de commencer
Notez que le microcontrôleur Atmega16 utilisé dans ce projet fonctionne au niveau logique 5V alors que ESP8266 NodeMCU fonctionne au niveau logique 3,3V. Les niveaux logiques des deux microcontrôleurs sont différents, ce qui peut entraîner une mauvaise communication entre Atmega16 et ESP8266 NodeMCU ou il peut également y avoir une perte de données si le niveau logique approprié n'est pas maintenu.
Cependant, après avoir parcouru les fiches techniques des deux microcontrôleurs, nous avons constaté que nous pouvons nous connecter sans aucun décalage de niveau logique car toutes les broches de l'ESP8266 NodeMCU sont tolérantes à partir d'un niveau de tension jusqu'à 6V. Donc, ça va avec le niveau logique 5V. En outre, la fiche technique d'Atmega16 indique clairement que le niveau de tension supérieur à 2V est considéré comme le niveau logique `` 1 '' et que l'ESP8266 NodeMCU fonctionne sur 3,3 V, cela signifie que si l'ESP8266 NodeMCU transmet 3,3 V, Atmega16 peut le prendre comme niveau logique `` 1 ''. La communication sera donc possible sans utiliser le décalage de niveau logique. Bien que vous soyez libre d'utiliser le décalage de niveau logique de 5 à 3,3 V.
Consultez tous les projets liés à l'ESP8266 ici.
Composants requis
- Module ESP8266 NodeMCU
- CI microcontrôleur Atmega16
- Oscillateur à cristal 16Mhz
- Deux condensateurs 100nF
- Deux condensateurs 22pF
- Bouton poussoir
- Fils de cavalier
- Planche à pain
- USBASP v2.0
- Led (toute couleur)
Schéma
Configuration du serveur SMTP2GO pour l'envoi d'e-mails
Avant de commencer la programmation, nous avons besoin d'un serveur SMTP pour envoyer du courrier via ESP8266. De nombreux serveurs SMTP sont disponibles en ligne. Ici, smtp2go.com sera utilisé comme serveur SMTP.
Donc, avant d'écrire le code, le nom d'utilisateur et le mot de passe SMTP seront requis. Pour obtenir ces deux informations d'identification, suivez les étapes ci-dessous qui couvriront la configuration du serveur SMTP pour l'envoi réussi des e-mails.
Étape 1: - Cliquez sur «Try SMTP2GO Free» pour vous inscrire avec un compte gratuit.
Étape 2: - Une fenêtre apparaîtra, dans laquelle vous devrez entrer des informations d'identification telles que le nom, l'identifiant de messagerie et le mot de passe.
Étape 3: - Après votre inscription, vous recevrez une demande d'activation sur l'e-mail saisi. Activez votre compte à partir du lien de vérification dans l'e-mail, puis connectez-vous à l'aide de votre identifiant de messagerie et de votre mot de passe.
Étape 4: - Une fois connecté, vous obtiendrez votre nom d'utilisateur et votre mot de passe SMTP. N'oubliez pas ou copiez-les dans votre bloc-notes pour une utilisation ultérieure. Après cela, cliquez sur «terminer».
Étape 5: - Maintenant sur la barre d'accès de gauche, cliquez sur «Paramètres» puis sur «Utilisateurs». Ici, vous pouvez voir les informations concernant le serveur SMTP et le numéro de PORT. C'est généralement comme suit:
Encoder le nom d'utilisateur et le mot de passe
Nous devons maintenant changer le nom d'utilisateur et le mot de passe au format encodé en base64 avec le jeu de caractères ASCII. Pour convertir l'e-mail et le mot de passe au format codé en base64, utilisez un site Web appelé BASE64ENCODE (https://www.base64encode.org/). Copiez le nom d'utilisateur et le mot de passe encodés pour une utilisation ultérieure:
Une fois ces étapes terminées, procédez à la programmation de l'ESP8266 NodeMCU et Atmega16 IC.
Programmation du microcontrôleur AVR Atmega16 et ESP8266
La programmation comprendra deux programmes, un pour Atmega16 pour agir en tant qu'expéditeur d'instructions et un second pour ESP8266 NodeMCU pour agir en tant que récepteur d'instructions. Les deux programmes sont donnés à la fin de ce tutoriel. Arduino IDE est utilisé pour graver ESP8266 et le programmeur USBasp et Atmel Studio est utilisé pour graver Atmega16.
Un bouton poussoir et une LED sont interfacés avec Atmega16 de sorte que lorsque nous appuyons sur le bouton poussoir, l'Atmega16 enverra des instructions à NodeMCU et NodeMCU enverra un e-mail en conséquence. La LED indiquera l'état de la transmission des données. Commençons donc à programmer Atmega16 puis ESP8266 NodeMCU.
Programmation d'ATmega16 pour l'envoi d'e-mails
Commencez par définir la fréquence de fonctionnement et inclure toutes les bibliothèques nécessaires. La bibliothèque utilisée est fournie avec le package Atmel Studio.
#define F_CPU 16000000UL #include #include
Après cela, le débit en bauds doit être défini afin de communiquer avec ESP8266. Notez que le débit en bauds doit être similaire pour les deux contrôleurs, à savoir Atmega16 et NodeMCU. Dans ce didacticiel, la vitesse de transmission est de 9600.
#define BAUD_PRESCALE ((( F_CPU / (USART_BAUDRATE * 16UL))) - 1)
Les deux registres UBRRL et UBRRH seront utilisés pour charger les valeurs de débit en bauds. Les 8 bits inférieurs du débit en bauds se chargeront en UBRRL et les 8 bits supérieurs du débit en bauds se chargeront en UBRRH. Pour plus de simplicité, faites fonction de l'initialisation UART où la vitesse de transmission sera passée par valeur. La fonction d'initialisation UART comprendra:
- Définition des bits d'émission et de réception dans le registre UCSRB.
- Sélection de tailles de caractères 8 bits dans le registre UCSRC.
- Chargement des bits inférieurs et supérieurs du débit en bauds dans les registres UBRRL et UBRRH.
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); }
L'étape suivante consistera à configurer la fonction de transmission des caractères. Cette étape comprend l'attente de la fin du tampon vide, puis le chargement de la valeur char dans le registre UDR. Le char sera passé en fonction uniquement.
void UART_TxChar (car c) { while (! (UCSRA & (1 <
Au lieu de transférer des caractères, créez une fonction pour envoyer des chaînes comme ci-dessous.
void UART_sendString (char * str) { unsigned char s = 0; while (str! = 0) { UART_TxChar (str); s ++; } }
Dans la fonction main () , appelez UART_init () pour démarrer la transmission. Et faites un test d'écho en envoyant la chaîne TEST à NodeMCU.
UART_init (9600); UART_sendString ("TEST");
Commencez à configurer la broche GPIO pour LED et bouton poussoir.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); PORTA - = (1 << 1);
Si le bouton poussoir n'est pas enfoncé, laissez la LED allumée et si le bouton poussoir est enfoncé, commencez à transmettre la commande «SEND» à NodeMCU et éteignez la LED.
if (bit_is_clear (PINA, 1)) { PORTA - = (1 << 0); _delay_ms (20); } else { PORTA & = ~ (1 << 0); _delay_ms (50); UART_sendString ("SEND"); _delay_ms (1 200); }
Programmation ESP8266 NodeMCU
La programmation de NodeMCU comprend la réception des commandes d'Atmega16 et l'envoi d'e-mails à l'aide d'un serveur SMTP.
Tout d'abord, incluez la bibliothèque WIFI car Internet sera utilisé pour envoyer des e-mails. Définissez votre ssid et votre mot de passe WIFI pour une connexion réussie. Définissez également le serveur SMTP.
#comprendre
Dans la fonction setup () , définissez le débit en bauds similaire à celui de l'Atmega16 sur 9600 et connectez-vous au WIFI et affichez l'adresse IP.
Serial.begin (9600); Serial.print ("Connexion à:"); Serial.println (ssid); WiFi.begin (ssid, mot de passe); while (WiFi.status ()! = WL_CONNECTED) { délai (500); Serial.print ("."); }
Dans la fonction loop () , lisez les octets de réception sur la broche Rx et convertissez-les en forme de chaîne.
if (Serial.available ()> 0) { while (Serial.available ()> 0 && index1 <6) { delay (100); inChar = Serial.read (); inData = inChar; index1 ++; inData = '\ 0'; } variable.toUpperCase (); for (octet i = 0; i <6; i ++) { variable.concat (String (inData)); } Serial.print ("variable is ="); Serial.println (variable); Serial.print ("indata is ="); Serial.println (inData); retard (20); } String string = String (variable);
Si la commande de réception correspond, envoyez un e-mail au destinataire en appelant la fonction sendEmail ().
if (string == "ENVOYER") { sendEmail (); Serial.print ("Mail envoyé à:"); Serial.println ("Le destinataire"); Serial.println (""); }
Il est très important de configurer le serveur SMTP et sans cela, aucun e-mail ne peut être envoyé. Notez également que pendant la communication, définissez une vitesse de transmission similaire pour les deux contrôleurs.
Donc, voici comment ESP8266 peut être interfacé avec microcontrôleur AVR pour lui permettre des communications IdO. Vérifiez également la vidéo de travail ci-dessous.