Raspberry Pi Pico W: Sensor-Daten per E-Mail senden
Wenn man mit einem Raspberry Pi Pico Sensor-Daten aufzeichnet, dann will man diese Daten in der Regel irgendwann aus dem System bekommen. Man muss also irgendwie eine Kommunikationsmöglichkeit oder Schnittstelle für die Datenausgabe vorsehen.
Die Möglichkeiten sind vielfältig und auch beliebig komplex. Die einfachste Variante wäre einfach eine E-Mail mit den Sensor-Daten zu schicken.
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 ist, wird in einer Endlos-Schleife alle 3 Minuten (180 Sekunden) die Temperatur mit dem internen Temperatursensor ermittelt und gespeichert. Nach 3 Durchgängen (insgesamt 9 Minuten) wird eine E-Mail mit den Daten verschickt.
# 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 = 'E-Mail von Raspberry Pi Pico W' mailText = "\n" + 'Diese E-Mail wurde von einem Raspberry Pi Pico W verschickt.' # Status-LED für die WLAN-Verbindung led_onboard = machine.Pin('LED', machine.Pin.OUT, value=0) # Initialisierung des Sensors sensor_temp = machine.ADC(4) # Funktion: Temperatur abrufen und umrechnen def getTemp(): read = sensor_temp.read_u16() spannung = read * 3.3 / (65535) temperatur = 27 - (spannung - 0.706) / 0.001721 return str(temperatur) # 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') # Wiederholung (Endlos-Schleife) while True: # Variablen leeren tempLog = () temp = '' # Alle 3 Minuten einen Sensor-Wert lesen und loggen for i in range(3): print('Sensor lesen') # Temperatur lesen und loggen tempLog += (getTemp(),) time.sleep(180) # Nach 9 Minuten eine E-Mail schicken c = len(tempLog) for i in range (c): temp += tempLog[i] + "\n" print('E-Mail senden') 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(temp + mailText + "\r\n") smtp.send() smtp.quit()
Hinweis: Um die Anzahl der E-Mails zu reduzieren kann man die Abstände der Sensorwert-Aufnahme verlängern und/oder die Anzahl der Durchgänge erhöhen.
Erweiterungen
Wenn die E-Mail zu einer bestimmten Uhrzeit gesendet werden soll, dann muss nach einer initialen WLAN-Verbindung die interne RTC gesetzt werden. Diese Uhrzeit kann über die WLAN-Verbindung von einem NTP-Server bezogen werden.
Weitere verwandte Themen:
- Raspberry Pi Pico W als WLAN-Client
- Raspberry Pi Pico W: E-Mail senden
- Raspberry Pi Pico W: Sensor-Daten-Logging übers Netzwerk (mit Webservice)
- Raspberry Pi Pico W als schnurloses Thermometer (mit MQTT)
- Raspberry Pi Pico W als schnurloser Taster (E-Mail senden)
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)