Raspberry Pi Pico W als schnurloser Taster (E-Mail senden)

Wenn man einen Taster an einen Raspberry Pi Pico W anbringt, dann soll damit in der Regel eine Funktion ausgelöst werden. Wir nutzen hier einen Raspberry Pi Pico W als schnurlosen bzw. drahtlosen Taster, der eine E-Mail verschickt, wenn ein Taster gedrückt wird. Die Netzwerk-Verbindung erfolgt über ein lokales WLAN.

Damit eine E-Mail versendet werden kann, benötigen wir eine externe MicroPython-Bibliothek und die Zugangsdaten von einem vorhandenen E-Mail-Account.

SMTP-Bibliothek für MicroPython

MicroPython verfügt über keine eigenen Funktionen, um E-Mails zu versenden. Hierfür muss man auf eine externe MicroPython -Bibliothek zurückgreifen, mit der E-Mails per SMTP versendet werden können.
Das SMTP-Protokoll ist für die Übertragung von E-Mails vom SMTP-Client des Absenders zum SMTP-Server (Postausgang) und zwischen Mail-Servern zuständig.

Die einfachste Lösung zum Senden von E-Mails ist die Bibliothek µMail (MicroMail). Sie funktioniert mit den meisten Mail-Providern.

Die Bibliothek (Datei) muss heruntergeladen und auf dem Raspberry Pi Pico W mit dem Dateinamen umail.py gespeichert werden.

Hinweis zur sicheren Übertragung von E-Mails: Die Bibliothek „umail“ verwendet zum Senden der E-Mails an den SMTP-Server „STARTTLS“. Das heißt, die Übertragung der E-Mails erfolgt mit TLS und damit verschlüsselt.

Programmcode: E-Mails verschicken mit µMail (MicroMail)

Im folgenden Programmcode wird zuerst eine Verbindung mit einem WLAN hergestellt. Hierzu sind die Zugangsdaten korrekt einzutragen.

  • wlanSSID: Das ist der Name des WLANs zu dem eine Verbindung hergestellt werden soll.
  • wlanPW: Das ist das WLAN-Passwort von dem WLAN.

Desweiteren muss hier die SMTP-Login-Konfiguration hinterlegt werden, wie sie in jedem E-Mail-Client eingerichtet ist (smtpHost, smtpPort, fromName, fromMail, fromPW). Desweiteren muss die E-Mail-Adresse und ein Name angegeben werden, an die die E-Mail verschickt werden soll (toName, toMail). Das kann auch die eigene E-Mail-Adresse sein. Außerdem hat eine E-Mail typischerweise einen Betreff (Subject) und einen Text als Nachricht.

  • smtpHost: Das ist die Host-Adresse des SMTP-Servers. Es handelt sich in der Regel um einen Domain-Namen.
  • smtpPort: Portnummer auf dem SMTP-Server. In der Regel 587.
  • fromName: Hier wird der Name oder die Bezeichnung eingetragen, wem die E-Mail-Adresse gehört, von der die E-Mail verschickt werden soll.
  • fromMail: Die verwendete E-Mail-Adresse, von der die E-Mail verschickt werden soll.
  • fromPW: Zugehöriges Passwort der E-Mail-Adresse für die Authentifizierung gegenüber dem SMTP-Server.
  • toName: Name oder Bezeichnung des Empfängers der E-Mail.
  • toMail: E-Mail-Adresse, an die die E-Mail gesendet wird.
  • mailSubject: Betreffzeile der E-Mail. Kann im Verlauf des Programmcodes auch dynamisch erzeugt werden.
  • mailText: Text der E-Mail. Kann im Verlauf des Programmcodes auch dynamisch erzeugt werden.

Nach dem die WLAN-Verbindung hergestellt und der Taster initialisiert wurde, wird in einer Endlos-Schleife der Taster-Zustand abgefragt. Wenn er betätigt wird, wird die Verbindung zum SMTP-Server hergestellt und die E-Mail an den SMTP-Server gesendet. Der übernimmt die Zustellung an den Empfänger. Danach wird eine mehrsekündige Pause eingelegt, bis der Programmcode erneut auf die Betätigung des Tasters wartet.

# Bibliotheken laden
import machine
import network
import time
import umail

# WLAN-Konfiguration
wlanSSID = 'WLANNAME'
wlanPW = 'WLANPASSWORD'
network.country('DE')

# E-Mail-Konfiguration (Sender)
smtpHost = 'smtp-host'
smtpPort = 587
fromName = 'Name'
fromMail = 'E-Mail-Adresse'
fromPW = 'Passwort'

# E-Mail-Konfiguration (Empfänger)
toName = 'Name'
toMail = 'E-Mail-Adresse'

# E-Mail: Betreff und Text
mailSubject = 'Taster gedrückt'
mailText = 'Der Taster wurde gedrückt.'

# Status-LED für die WLAN-Verbindung
led_onboard = machine.Pin('LED', machine.Pin.OUT, value=0)

# WLAN-Verbindung herstellen
wlan = network.WLAN(network.STA_IF)
if not wlan.isconnected():
    print('WLAN-Verbindung herstellen')
    wlan.active(True)
    wlan.connect(wlanSSID, wlanPW)
    for i in range(10):
        if wlan.status() < 0 or wlan.status() >= 3:
            break
        led_onboard.toggle()
        print('.')
        time.sleep(1)

# WLAN-Verbindung prüfen
if wlan.isconnected():
    print('WLAN-Verbindung hergestellt / WLAN-Status:', wlan.status())
    led_onboard.on()
    ipconfig = wlan.ifconfig()
    print('IPv4-Adresse:', ipconfig[0])
else:
    led_onboard.off()
    print('WLAN-Status:', wlan.status())
    raise RuntimeError('Keine WLAN-Verbindung')

# Button initialisieren
btn = machine.Pin(15, machine.Pin.IN, machine.Pin.PULL_UP)
led_onboard.off()
print()
print('Bitte Taster drücken')

# Funktion zur Taster-Auswertung
while True:
    time.sleep_ms(100)
    if not btn.value():
        print()
        print('Taster wurde gedrückt')
        print('E-Mail wird gesendet')
        # Verbindung zum eigenen Mail-Server aufbauen
        smtp = umail.SMTP(fromHost, fromPort)
        smtp.login(fromMail, fromPW)
        smtp.to(toMail)
        smtp.write('From: ' + fromName + ' <' + fromMail + '>' + "\r\n")
        smtp.write('To: ' + toName + ' <' + toMail + '>' + "\r\n")
        smtp.write('Subject: ' + mailSubject + "\r\n\r\n")
        smtp.write(mailText + "\r\n")
        smtp.send()
        smtp.quit()
        print('E-Mail wurde gesendet')
        # Entprell-Pause
        time.sleep_ms(200)
        # Warte-Pause, bevor Taster erneut gedrückt werden darf
        time.sleep(5)
        print()
        print('Bitte Taster drücken')

Erweiterungen

In diesem Beispiel wird ein Taster gedrückt, damit die E-Mail gesendet wird. Das kann aber auch ein Sensor, zum Beispiel ein Bewegungsmelder sein oder das Erreichen eines bestimmten Sensor-Werts.
Bei der Implementierung muss man nur darauf achten, dass der Programmcode nicht ständig E-Mails sendet. Die E-Mail-Kommunikation ist nicht dafür geeignet, im Sekunden- oder Minutentakt E-Mails zu versenden.

Weitere verwandte Themen:

Frag Elektronik-Kompendium.de

Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython

Elektronik-Set Pico Edition

Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.

  • LED: Einschalten, ausschalten, blinken und Helligkeit steuern
  • Taster: Entprellen und Zustände anzeigen
  • LED mit Taster einschalten und ausschalten
  • Ampel- und Lauflicht-Steuerung
  • Elektronischer Würfel
  • Eigene Steuerungen programmieren

Elektronik-Set jetzt bestellen Online-Workshop buchen

Online-Workshop: Programmieren mit dem Raspberry Pi Pico

Programmieren mit dem Raspberry Pi Pico

Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.

Online-Workshop buchen

Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.

Termine und Newsletter-Anmeldung

 

Elektronik-Sets für das Hardware-nahe Programmieren