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(smtpHost, smtpPort)
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:
- Raspberry Pi Pico W als WLAN-Client
- Raspberry Pi Pico W: E-Mail senden
- Raspberry Pi Pico W: Sensor-Daten per E-Mail senden
- Raspberry Pi Pico W: Internet-Verbindung prüfen
- Raspberry Pi Pico W als schnurloser Taster (mit Webservice)
- Raspberry Pi Pico W als schnurloser Taster (mit MQTT)
Elektronik-Sets für das Hardware-nahe Programmieren
Elektronik-Sets für das Hardware-nahe Programmieren
Online-Meeting
Programmieren mit dem Raspberry Pi Pico
Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.




