fbpixel
Etiquetas:
0
(0)

Quando um microcontrolador tem conexão remota, é interessante que possa comunicar com o exterior e, em particular, enviar informações por e-mail. Veremos neste tutorial como enviar um e-mail utilizando um Arduino com conexão Wifi e um script JavaScript.

Este tutorial pode ser aplicado a qualquer microcontrolador com conexão Wifi. Basta adaptar a parte do código referente à conexão à rede. A única desvantagem é que a interface web deve ser aberta num navegador para que o e-mail possa ser enviado.

Material

  • Arduino
  • Módulo Wifi ou Ethernet
  • Conta Gmail

Para relembrar, veja alguns exemplos de módulos com conexão Wifi:

Princípio de funcionamento

Para enviar um e-mail com o Arduino, usaremos o protocolo SMTP (Simple Mail Transfer Protocol). Desse modo, passaremos por um servidor que gerencia o envio do e-mail, como o servidor smtp do Gmail. Para utilizar o servidor, é preciso ter uma conta Gmail (criação gratuita) e ativar a validação em duas etapas.

Configuração de conta Gmail

Na página de gerenciamento de contas, vá para a aba “Segurança” e procure a caixa “Iniciar sessão no Google”.

Ative a validação em duas etapas.

Gere uma senha de acesso à conta para uma aplicação.

Basta copiar o ID do usuário (o endereço Gmail) e a senha gerada pelo Google (retângulo amarelo acima) no código JavaScript abaixo.

Código JavaScript para enviar um e-mail

O código que permitirá enviar e-mails é o código JavaScript presente no código HTML da interface web. Antes de criar a função de envio de e-mails, importamos a biblioteca smtp.js

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

Depois, acrescentamos a definição da função 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>

Esta função é propositalmente simplificada para mostrar o envio de e-mails, mas é possível modificá-la para enviar diferentes assuntos, corpos de mensagens e informações.

Código completo com o 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);
}

Resultado

É possível abrir a interface web num navegador utilizando o endereço IP apresentado no monitor serial. A página a seguir deverá aparecer.

Quando clicamos no botão “Enviar e-mail”, um e-mail é enviado conforme o endereço e o texto escritos na função JavaScript descrita acima.

Se pesquisar na sua caixa de entrada do Gmail, deverá encontrar uma mensagem semelhante.

Fontes

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

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?