Étiquettes :
5
(2)

Lorsque un microcontrôleur possède une connexion à distance, il est intéressant qu’il puisse communiquer avec l’extérieur et, notamment, envoyer des informations sous forme de mail. Nous allons voir dans ce tutoriel comment envoyer un mail à l’aide d’un Arduino muni d’une connexion Wifi et d’un script JavaScript.

Ce tutoriel peut être appliqué pour tout microcontrôleur muni d’une connexion Wifi. Il suffit pour cela d’adapter la partie du code relatif à la connexion au réseau. Le seul inconvénient est que l’interface Web doit être ouverte dans un navigateur internet pour que le mail puissent être envoyé.

Matériel

  • Arduino
  • Module Wifi ou Ethernet
  • Compte Gmail

Pour rappel, quelques exemples de modules avec connexion Wifi:

Principe de fonctionnement

Pour envoyer un mail avec Arduino, nous allons utiliser le protocole SMTP (Simple Mail Transfer Protocol), nous allons donc passer par un serveur qui gère l’envoi de mail. Comme le serveur smtp de Gmail. Pour pouvoir utiliser ce serveur, il faut un compte Gmail (création gratuite) et il faut activer la validation en deux étapes.

Configuration du compte Gmail

Sur la page de gestion du compte, aller dans l’onglet « Sécurité », puis cherchez l’encart « Connexion à Google ».

Ajouter la validation en deux étapes.

Générer un mot de passe d’accès au compte pour une application donnée

Il vous suffit de recopier dans le code JavaScript ci-dessous, l’identifiant utilisateur (l’adresse Gmail) et le mot de passe délivré par Google (encart jaune ci-dessus).

Code JavaScript pour envoyer un mail

Le code qui va nous permettre d’envoyer des mails est le code JavaScript présent dans le code HTML de l’interface Web. Avant de créer la fonction d’envoi de mail, nous allons importer la librairies smtp.js

  <script src='https://smtpjs.com/v3/smtp.js'></script>

Puis nous pouvons ajouter la définition de la fonction sendEmail.

  <script>
  function sendEmail() {
  Email.send({
    Host: 'smtp.gmail.com',
    Username : '*************@gmail.com',
    Password : '**********************',
    To : 'destinataire@gmail.com',
    From : 'emetteur@aranacorp.com',
    Subject : 'Data from "+nom+"',
    Body : 'The sensor value is : "+String(analogRead(A0))+"',
    }).then(
      message => alert('mail sent successfully')
    );
  }
  </script>

Cette fonction est volontairement simplifier pour montrer l’envoie de mail mais il est possible de la modifier afin d’envoyer des sujet, corps de message et informations différentes.

Code complet avec l’Ethernet Shield W5100

//Libraries
#include <Ethernet.h>//https://github.com/CisecoPlc/Arduino-W5100-W5200/tree/master/Ethernet
//Parameters
String request ;
unsigned long refreshCounter  = 0;
IPAddress ip(192, 168, 1, 179) ;
byte mac [6] = {0x54, 0x34, 0x41, 0x30, 0x30, 0x31};
//Objects
EthernetServer server(80);
EthernetClient client;
void setup() {
 //Init Serial USB
 Serial.begin(9600);
 Serial.println(F("Initialize System"));
 //Init W5100
 Ethernet.begin(mac, ip);
 while (!Ethernet.begin(mac)) {
   Serial.println(F("failed. Retrying in 1 seconds."));
   delay(1000);
   Serial.print(F("Starting W5100..."));
 }
 pinMode(2, OUTPUT);
 server.begin();
 Serial.println(F("W5100 initialized"));
 Serial.print(F("IP Address: "));
 Serial.println(Ethernet.localIP());
}
void loop() {
 client = server.available();
 clientRequest();
 handleRequest();
}
void clientRequest( ) { /* function clientRequest */
 ////Get client request
 if (!client) {
   return;
 }
 // Wait until the client sends some data
 while (!client.available()) {
   delay(1);
 }
 request = client.readStringUntil('\r'); // Read the first line of the request
 Serial.println(request);
 client.flush();
}
void handleRequest( ) { /* function handleRequest */
 ////Handle web client request
 if (request.indexOf("/dig2on") > 0) {
   digitalWrite(2, HIGH);
 }
 if (request.indexOf("/dig2off") > 0) {
   digitalWrite(2, LOW);
 }
 if (request.indexOf("GET") >= 0) {
   webpage(client);
   client.stop();
 }
}
void webpage((EthernetClient client){/* function webpage */ 
////Send wbepage to client
 client.println("HTTP/1.1 200 OK");
 client.println("Content-Type: text/html");
 client.println(""); //  do not forget this one
 client.println("<!DOCTYPE HTML>");
 client.println("<html>");
 client.println("<head>");
 client.println("<meta name='apple-mobile-web-app-capable' content='yes' />");
 client.println("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' />");
 client.println("<script src='https://smtpjs.com/v3/smtp.js'></script>");
 client.println("<script>");
 client.println("function sendEmail() {");
 client.println("Email.send({");
 client.println("  Host: 'smtp.gmail.com',");
 client.println("  Username : '*************@gmail.com',");
 client.println("  Password : '**********************',");
 client.println("  To : 'destinataire@gmail.com',");
 client.println("  From : 'emetteur@aranacorp.com',");
 client.println("  Subject : 'Data from "+nom+"',");
 client.println("  Body : 'The sensor value is : "+String(analogRead(A0))+"',");
 client.println("  }).then(");
 client.println("    message => alert('mail sent successfully')");
 client.println("  );");
 client.println("}");
 client.println("</script>");
 client.println("</head>");
 client.println("<body bgcolor = '#70706F'>"); 
 client.println("<hr/><hr>");
 client.println("<h1 style='color : #3AAA35;'><center> "+nom+" Device Control </center></h1>");
 client.println("<hr/><hr>");
 client.println("<br><br>");
 client.println("<br><br>");
 client.println("<center>");
 client.println("  Pin A0");
 client.println("  <input value="+String(analogRead(A0))+" readonly></input>");
 client.println("  </center>");
 client.println("<center>");
 client.println("Send email");
 client.println("<input type='button' value='Send Email' onclick='sendEmail()'/>");
 client.println("</center>");   
 client.println("<br><br>");
 client.println("<center>");
 client.println("<a style='color : #3AAA35;' href='https://www.aranacorp.com'>www.aranacorp.com</a>");
 client.println("</center>");   
 
 client.println("<br><br>");
  client.println("</body></html>"); 
  client.println();
  delay(1);
}

Résultat

Vous pouvez ouvrir l’interface web, dans un navigateur, à l’aide de l’adresse IP qui s’affiche dans le moniteur série. La page suivante devrait s’afficher.

Lorsqu’on presse sur le bouton « Send Email », un email est envoyé en accord avec l’adresse et le texte écrits dans la fonction JavaScript décrite plus haut.

Si vous allez chercher dans votre boite Gmail, vous devriez tomber sur un message similaire.

Sources

How useful was this post?

Click on a star to rate it!

Average rating 5 / 5. Vote count: 2

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?