Startseite>Mit dem ESP8266 E-Mails versenden
Aus Raspberry Pi Geek 02/2017

Mit dem ESP8266 E-Mails versenden

© Chris Dorney, 123RF

Postbote

Martin Mohr

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 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.

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

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 4 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland