🛠 Alerte email : bouton sur la Yún et envoi via sendmail
Objetivos
Construir una alerta física → email: un botón en un pin del 32U4 dispara el envío de un email desde Linino OS. Se comparan dos vías: la ruta REST /mail/send (cero dependencias) y la biblioteca YunMail (API limpia en el sketch). Configurarás una cuenta SMTP (proveedor o Gmail con contraseña de aplicación) en la página de administración de la placa.
Material
- 1 Arduino Yún conectado a Internet (se requiere salida SMTP por puerto 465/587 — algunos ISP bloquean el 25)
- 1 botón pulsador entre el pin 2 y GND (pull-up interno)
- Una cuenta SMTP testeable (la tuya, o una cuenta de prueba)
- PC para configurar arduino.local > pestaña «Mail»
Configuración SMTP
En la página de administración (http://arduino.local, contraseña root), rellena: servidor SMTP, puerto, usuario, contraseña, remitente. Linino OS utiliza un sendmail ligero; los logs SMTP consultables por SSH (logread) ayudan en la depuración.
Código completo
// Alerte email sur appui, avec anti-répetition de 30 s.
#include <Bridge.h>
#include <YunMail.h>
const uint8_t BTN = 2;
const uint32_t PAUSE = 30000;
uint32_t dernierEnvoi = 0;
bool dernierEtat = HIGH;
void setup {
pinMode(BTN, INPUT_PULLUP);
Bridge.begin;
Console.begin;
Mail.begin; // YunMail : pilote la file sendmail côté Linux
Mail.from("alerte@exemple.fr");
Mail.to("moi@exemple.fr", "Moi");
Mail.subject("Yun : bouton presse");
Console.println(F("pret"));
}
void loop {
bool etat = digitalRead(BTN);
bool front = (etat == LOW && dernierEtat == HIGH);
dernierEtat = etat;
if (front && millis - dernierEnvoi >= PAUSE) {
dernierEnvoi = millis;
Mail.println(F("Quelqu'un a appuye sur le bouton."));
Mail.println(F("Cordialement, votre Yuniste."));
int id = Mail.send; // met en file ; l'envoi part côté Linux
Console.print(F("mail mis en file, id=")); Console.println(id);
}
// L'alternative REST, sans YunMail :
// Process p; p.runShellCommandOnLinux(
// "curl -s 'http://localhost/mail/send/moi@example.fr/Alerte/Bouton'");
}
Verificación esperada
Pulsación → unos segundos después, llega el email (el envío es asíncrono: la cola se procesa vía sendmail en el lado Linux). El Monitor muestra el id de encolado. Prueba el fallo: contraseña SMTP incorrecta → no llega nada; entonces revisa logread por SSH en el lado Linux, allí quedan trazados los errores de autenticación. La anti-repetición de 30 s evita el spam en caso de pulsaciones múltiples.
Errores frecuentes
- SMTP bloqueado por el ISP: el puerto 25 saliente suele estar cortado en el router — usa 465 (SSL) o 587 (STARTTLS) según el proveedor.
- Gmail sin «contraseña de aplicación»: la autenticación básica simple está rechazada desde 2021; crea una contraseña de aplicación dedicada (o usa otro proveedor SMTP).
- Esperar un envío síncrono: Mail.send encola; el sketch continúa. Para saber si se ha enviado, hay que releer los logs de Linux.
- Exponer tus credenciales en el código: las credenciales SMTP viven en la configuración de Linux (pasadas por la página web), no en el sketch — nunca las codifiques en duro en el croquis.
- Confundir /mail/send (ruta REST, cuerpo en la URL, limitado en longitud) y YunMail (cuerpo multilínea limpio): prefiere YunMail para cualquier contenido no trivial.
- El cuerpo pasado en la URL debe codificar los espacios (+) y evitar los caracteres reservados — fuente de emails truncados misteriosos.
Otros tutoriales para esta placa
- Premiers pas sur la Yún : Bridge, Console et LED
- Connecter la Yún au WiFi et piloter une broche depuis le navigateur
- Envoyer un capteur analogique sur le réseau : potentiomètre et Bridge REST
- runShellCommandOnLinux : faire exécuter des commandes Linux depuis le sketch
- L'API REST du Bridge en détail : /arduino, /data et routes personnalisées
- Serveur web embarqué : YunServer, YunClient et pages dynamiques
Ejemplos de código para esta placa
clignotant-rest.inoArduinoconsole-bridge.inoArduinovaleurs-partagees.inoArduinoprocess-shell.inoArduinoserveur-json.inoArduinolecture-fichier.inoArduino