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:
- 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)
Teilen:
Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython
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
Online-Workshop: 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.
Für Ihre Fragen zu unseren Online-Workshops mit dem Raspberry Pi Pico besuchen Sie unseren PicoTalk (Online-Meeting). (Headset empfohlen)