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:
- Ethernet Shield VM04
- Ethernet Shield W5100
- WiFi Shield
- ESP-01
- NodeMCU ESP8266 ou ESP32
- Raspberry Pi
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.
