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.

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 rp2
import utime as time
import umail

# WLAN-Konfiguration
wlanSSID = 'WLANNAME'
wlanPW = 'WLANPASSWORD'
rp2.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:

Teilen:

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

Online-Workshop Mehr Informationen Elektronik-Set jetzt bestellen

Programmieren mit dem Raspberry Pi Pico
Online-Workshop

Programmieren mit dem Raspberry Pi Pico

Online-Workshop mit einer Einführung ins Physical Computing mit Leuchtdioden, Taster und Temperatursensor.

  • Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython ohne Vorkenntnisse
  • Optimaler Einstieg, um eigene Ideen zu verwirklichen und Steuerungen zu programmieren
  • Inklusive Elektronik-Set mit einem Raspberry Pi Pico, Zubehör und elektronischen Bauteilen

Für Ihre Fragen zu unseren Online-Workshops mit dem Raspberry Pi Pico besuchen Sie unseren PicoTalk (Online-Meeting). (Headset empfohlen)

Zum PicoTalk Mehr Informationen Am Online-Workshop teilnehmen

Elektronik-Set Pico Edition
Elektronik-Set Pico Edition

Hardware-nahes Programmieren mit dem Raspberry Pi Pico

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 Mehr Informationen Elektronik-Set jetzt bestellen