Mit dem ESP8266 E-Mails versenden

© Chris Dorney, 123RF

Postbote

Der ESP8266 benachrichtigt bei sporadischen Ereignissen per Mail. Wir zeigen, wie das geht.

In der Regel nimmt der ESP8266 [1] über angeschlossene Sensoren Daten aus der Umgebung auf. Dank WLAN greifen Sie unkompliziert auf die Hardware zu, um diese Werte abzurufen. Treten die Ereignisse aber unregelmäßig auf, bietet es sich an, dass der kleine Rechenknecht sich selbstständig rührt und mit einer E-Mail Bericht erstattet.

Um eine solche Aufgabe zu erledigen, braucht der Mikrocontroller nicht durchgehend zu laufen. Es genügt, wenn er beim Eintritt eines Ereignisses aus dem Tiefschlaf erwacht, die Nachricht verschickt und sich anschließend wieder zur Ruhe legt. Beim nächsten Mal geht das Spiel von Neuem los.

Schnell aufgebaut

Für das erste Beispiel in diesem Workshop kommt ein relativ einfacher Aufbau mit wenigen Teilen zum Einsatz (Abbildung 1). Der Schaltplan (Abbildung 2) sieht daher diesmal ebenfalls sehr übersichtlich aus. Er enthält im Großen und Ganzen nur den ESP8266 mit der Standardbeschaltung. Dazu gehört der USB-zu-Seriell-Adapter, um Programme in den Mikrocontroller zu laden. Der Reset-Taster übernimmt im Beispiel die Funktion als Auslöser für den Mailversand.

Abbildung 1: Der Aufbau gestaltet sich einfach: Um den Versand der Mails zu testen, benötigen Sie lediglich einige wenige Komponenten.
Abbildung 2: Der Schaltplan zeigt, wie Sie die Komponenten für den ersten Testaufbau miteinander verbinden.

Zum Schreiben der eigentlichen Software kommt wieder die Arduino IDE [2] zum Einsatz, die Sie vielleicht schon aus dem ersten Teil dieser Reihe oder von anderen Experimenten her kennen. Der Kasten "Installation" beschreibt die zum Aufsetzen notwendigen Schritte noch einmal kurz.

Installation

Die Arduino IDE zielt eigentlich auf Mikrocontroller der Atmel-Familie ab. Sie lässt sich leicht bedienen, enthält alle notwendigen Tools, und bei Bedarf erweitern Sie sie über Module. Das macht sie insbesondere bei Entwicklern populär, die nahe an der Hardware arbeiten. Daher verwundert es nicht, dass es auch ein Modul gibt, das die Programmierung des ESP8266 ermöglicht.

Um die Software zu installieren, laden Sie sie in der für das verwendete Betriebssystem passenden Version (32/64 Bit) von der Homepage herunter. Aufgrund der zügigen Entwicklung des Projekts finden Sie vermutlich eine neuere Version zum Download vor als in unserem Beispiel. Die Schritte für die Installation bleiben aber dieselben. Unter Linux entpacken Sie das Archiv wie in der ersten Zeile von Listing 1 gezeigt. Haben Sie keine entsprechende Version von Tar zur Hand, installieren Sie erst das Paket xz-utils und verwenden dann das entsprechende Tool.

Die IDE starten Sie von der Kommandozeile aus, indem Sie in das Verzeichnis wechseln und den Namen des Binaries eingeben (Listing 1, Zeile 2 und 3). Anschließend tragen Sie unter Datei | Voreinstellungen | Zusätzliche Boardverwalter-URL's die URL aus Listing 2 ein. Damit veranlassen Sie das Programm, den für den ESP8266 nötigen Board-Manager zu laden. Als Nächstes starten Sie den Board-Manager für den ESP8266 unter Werkzeuge | Board | Boardmanager starten. Nach erfolgreicher Installation dürfen Sie jetzt das Generic ESP Modul unter Werkzeuge | Board auswählen.

Jetzt geben Sie für den aktuellen Benutzer noch den Zugriff auf die serielle Schnittstelle frei, indem Sie ihn in die Gruppe dialout aufnehmen (Listing 1, Zeile 4 und 5). Ein Reboot ist danach nicht unbedingt nötig, es genügt im Prinzip eine erneute Anmeldung des aktuellen Benutzers. Ein Reboot hat aber den Vorteil, dass sich das System danach in einem konsistenten Zustand befindet.

Listing 1

 

$ tar xvJf arduino-1.6.6-linux64.tar.xz
$ cd arduino-1.6.6/
$ ./arduino
$ sudo usermod -a -G dialout $USER
$ sudo reboot

Listing 2

 

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Das Programm

Um das Rad nicht neu zu erfinden, kommt für den Versand der E-Mails eine vorhandene Bibliothek zum Einsatz [1]. Nach dem Herunterladen entpacken Sie die ZIP-Datei in den Bibliothekenordner der Arduino IDE unter ~/arduino-1.6.6/libraries/. Achten Sie darauf, den Ordner libraries/ zu wählen, in dem die Bibliotheken für das Kompilieren der Mikrocontroller-Programme liegen. Im Ordner lib/ hingegen finden Sie die Bibliotheken, die die IDE selbst für den Betrieb benötigt.

Wenn Sie die IDE nun direkt starten, meldet sie eine defekte Bibliothek. Um die Fehlermeldung zu vermeiden, verschieben Sie die zwei Dateien sendemail.h und sendemail.cpp in den Ordner esp8266-sendemail-master und löschen danach den Unterordner src sowie die Datei README.md. Danach erkennt die Arduino IDE die Bibliothek.

Das Testprogramm (Listing 3) hat zum Ziel, dass der ESP8266 nur aufwacht, wenn ein Ereignis vorliegt. Nachdem er die E-Mail versendet hat, legt er sich wieder schlafen. Daher bleibt die Funktion loop() im Beispiel leer; das komplette Programm steht in setup(). Passen Sie alle Variablen zu Beginn an die Parameter des verwendeten Providers an.

Um das Programm zu bauen und in den ESP8266 zu laden, klicken Sie in der IDE wie gewohnt auf den kleinen Pfeil nach rechts. Stoßen Sie dabei auf Probleme, dann werfen Sie einen Blick in den ersten Teil dieser Reihe: Dort lesen Sie detailliert, wie Sie die IDE einrichten, damit alles klappt.

Listing 3

 

#include <ESP8266WiFi.h>
#include <sendemail.h>
const char* wlan_ssid = "WLAN-SSID";
const char* wlan_pass = "WLAN-Passwort";
const char* smtp_server = "SMTP-Server";
const int   smtp_port = 25;
const char* smtp_login = "SMTP-Login";
const char* smtp_password = "SMTP-Passwort";
const int   smtp_timeout = 5000;
const bool  smtp_ssl = false;
const char* mail_from = "Adresse Sender";
const char* mail_to = "Adresse Empfänger";
const char* mail_subject = "Betreff";
const char* mail_text = "Text";
void setup() {
  Serial.begin(115200);
  Serial.println("\r\n");
  WiFi.begin(wlan_ssid, wlan_pass);
  while (WiFi.status() != WL_CONNECTED) {
     delay(500);
     Serial.print(".");
  }
  Serial.println("");
  Serial.print("Verbunden mit ");
  Serial.println(wlan_ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  SendEmail e(smtp_server, smtp_port, smtp_login, smtp_password, smtp_timeout, smtp_ssl);
  e.send(mail_from, mail_to, mail_subject, mail_text);
  delay(1500);
  ESP.deepSleep(0);
}
void loop() {}

Innerhalb von setup() verbindet sich der Controller als Erstes mit dem lokalen WLAN. Bei Erfolg geht er direkt daran, die E-Mail zu versenden. Danach lassen Sie dem Controller noch etwas Zeit, sich um den Versand zu kümmern. Der letzte Befehl schickt den kleinen Rechner bis zum nächsten Ereignis schlafen.

Sehen wir uns nun die zwei Zeilen für den Mailversand etwas genauer an. Die erste (Zeile 31) erzeugt ein Objekt vom Typ SendEmail. Diesem übergeben Sie alle Parameter, um sich mit einen SMTP-Server zu verbinden. Die Tabelle "SendEmail-Objekt" beschreibt diese Parameter der Reihe nach. Ein Objekt des Typs SendEmail hat eine Methode send() (Zeile 32), mit der Sie die E-Mails versenden. Die dazu notwendigen Parameter beschreibt die Tabelle "Send-Methode".

SendEmail-Objekt

Parameter

Beschreibung

smtp_server

providerspezifisch (Beispiel: smtp.gmail.com)

smtp_port

häufig 25, bei Gmail 465

smtp_login

providerspezifisch (oft die E-Mail-Adresse)

smtp_password

das zum SMTP-Login passende Passwort

smtp_timeout

maximale Wartezeit für Netzwerkoperationen

smtp_ssl

true/false: SSL aktivieren oder abschalten

Send-Methode

Parameter

Beschreibung

mail_from

E-Mail-Adresse des Absenders

mail_to

E-Mail-Adresse des Empfängers

mail_subject

Betreff der E-Mail

mail_text

Inhalt der E-Mail

Jetzt kommt der kniffelige Part: Alle Provider verwenden zwar denselben Satz an Parametern, erwarten dafür aber häufig unterschiedliche Werte. Anders als ein moderner Client kann der ESP8266 die Parameter nicht "erraten". Hier liegt der Teufel im Detail – tragen Sie also die Parameter gewissenhaft ein.

Google nutzt für seinen Dienst Gmail beispielsweise den Server smtp.gmail.com, den Sie auf dem Port 465 erreichen. Als Login dient hier die E-Mail-Adresse samt entsprechendem Passwort. Als Wert für den Timeout hat sich im Test 5000 bewährt; SSL aktivieren Sie über true für die entsprechende Variable.

Die E-Mail-Adressen innerhalb der Send-Anweisung umschließen Sie mit spitzen Klammern (<>). Zusätzlich aktivieren Sie noch das Login für weniger sichere Apps. Um das zu erreichen, folgen Sie den Anweisungen in der Warnnachricht, die Sie von Gmail erhalten. Vermutlich verwenden andere Provider ähnliche Mechanismen – geben Sie also nicht so schnell auf, wenn es nicht auf Anhieb klappt.

Auch die allgegenwärtige Spam-Flut macht Probleme: Die Provider greifen auf immer neue Verfahren zurück, um ihre Systeme abzusichern. Versuchen Sie es unter Umständen erst einmal mit einem lokalen Mailserver auf einem NAS oder einem RasPi: Hier haben Sie die volle Kontrolle über alle Mechanismen und Parameter.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Raspberry Pi Geek kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

Aktuelle Ausgabe

02/2018
Digital Signage

Diese Ausgabe als PDF kaufen

Preis € 7,99
(inkl. 19% MwSt.)

Stellenmarkt

Neuigkeiten

  • Neues auf der Heft-DVD

    Nur mit dem optimalen System und der richtigen Software nutzen Sie das volle Potenzial des Raspberry Pi. Mit der Heft-DVD erhalten Sie nicht nur die neusten Distributionen für den RasPi und Co., sondern gleichzeitig auch die passenden Programme zu den Artikeln.

  • Ferngebootet

    Das Booten über das Netzwerk beherrscht auch der RasPi 3 – und bietet damit sehr viel mehr Flexibilität, als Sie mit SD-Cards erzielen können.

  • Bleibende Werte

    Ein EEPROM dient dazu, Daten auch nach Abschalten der Energiezufuhr zu speichern, etwa als Kanalspeicher in Autoradios. Wir zeigen, wie Sie einen solchen Speicher beschreiben und wieder auslesen.

  • Auf Wolke 1

    Mit einem schnellen Netzwerkanschluss und einer SATA-Schnittstelle dient sich der Odroid HC1 als NAS-Alternative an – allerdings nicht für jedermann.

  • Wohnungsfunker

    Der kompakte Router GL.iNet dockt problemlos am Raspberry Pi an und erweitert diesen um einen Access Point samt Server-Funktion.

  • Satter Sound

  • Wer klopfet an?

    Wechselsprechanlagen mit Bild- und Tonübertragung gibt es zwar von der Stange, allerdings zu gesalzenen Preisen. Günstiger und obendrein flexibler ist ein Eigenbau mit Pi Zero und RasPi 3.

  • Wiedergeburt

    Mit dem Keyrah-Tastaturadapter und einem Raspberry Pi machen Sie aus einem defekten C64 eine optimale Emulator-Station, bei der Sie die originale Tastatur und die Joystick-Ports nutzen.

  • Kleine Nachtmusik

    Waveform8 beseitigt einige Ecken und Kanten des Vorgängers Tracktion – und macht die DAW endgültig fit für den Einsatz auf dem Raspberry Pi.

  • Recycling

    Mit einer Dockingstation lassen sich ausgemusterte IDE/SATA-Festplatten im 2,5- und 3,5-Zoll-Format am Raspberry Pi betreiben. Mit dem Samba-Server gliedern Sie den Mini-Rechner dann als Datenspeicher in Ihr lokales Netzwerk ein.