Laboratorul 07: Trimiterea de Email-uri Direct de pe Raspberry Pi Pico

Scopul Laboratorului:

Acest laborator vă va învăța cum să configurați Raspberry Pi Pico pentru:

  • Conectarea la internet prin Wi-Fi.
  • Trimiterea unui email direct de pe dispozitiv folosind MicroPython
  • Utilizarea senzorilor pentru monitorizarea condițiilor critice și notificarea automată prin email.

Notiuni Teoretice

SMTP (Simple Mail Transfer Protocol)

  • Este protocolul folosit pentru trimiterea email-urilor.
  • Pe Raspberry Pi Pico, implementăm conexiunea SMTP folosind modulele ussl și socket pentru securizarea comunicației.
  • Gmail oferă un server SMTP gratuit: smtp.gmail.com, pe portul 465 (SSL).

Configurarea Mediului de Lucru

Cum să generezi o parolă de aplicație Gmail

  • Accesați contul Google: https://myaccount.google.com.
  • Navigați la „Securitate”.
  • Activează autentificarea în doi pași.
  • Generează o parolă de aplicație: Selectați aplicația „Mail” și dispozitivul „Alt dispozitiv” (ex. „Raspberry Pi Pico”).
  • Utilizați această parolă în scriptul MicroPython în locul parolei contului principal.

Trimiterea de Email-uri

Cod complet pentru trimiterea unui email:

import network
import usocket as socket
import ssl
import ubinascii
import time
 
SSID = 'Numele_Retelei'
PASSWORD = 'Parola_Retelei'
SMTP_SERVER = "smtp.gmail.com"
SMTP_PORT = 465
EMAIL_ADDRESS = "email_tau@gmail.com"
EMAIL_PASSWORD = "parola_ta_aplicatie"
RECIPIENT = "destinatar@gmail.com"
 
MESSAGE = """From: %s
To: %s
Subject: Hello from Raspberry Pi Pico
 
Hello World!
""" % (EMAIL_ADDRESS, RECIPIENT)
 
def connect_wifi():
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    wlan.connect(SSID, PASSWORD)
    while not wlan.isconnected():
        print("Conectare la Wi-Fi...")
        time.sleep(1)
    print("Conectat la Wi-Fi:", wlan.ifconfig())
 
def send_email():
    addr = socket.getaddrinfo(SMTP_SERVER, SMTP_PORT)[0][-1]
    sock = socket.socket()
    sock.connect(addr)
    sock = ssl.wrap_socket(sock)
    print("Conexiune la serverul SMTP realizată")
 
    def send_command(command, expect_response=True):
        print(f">>> {command.strip()}")
        sock.write(command.encode('utf-8') + b"\r\n")
        if expect_response:
            response = sock.readline().decode('utf-8').strip()
            print(f"<<< {response}")
            return response
 
    try:
        send_command("HELO RaspberryPi")
        send_command("AUTH LOGIN")
        send_command(ubinascii.b2a_base64(EMAIL_ADDRESS.encode('utf-8')).decode('utf-8').strip())
        send_command(ubinascii.b2a_base64(EMAIL_PASSWORD.encode('utf-8')).decode('utf-8').strip())
        send_command(f"MAIL FROM:<{EMAIL_ADDRESS}>")
        send_command(f"RCPT TO:<{RECIPIENT}>")
        send_command("DATA")
        send_command(MESSAGE + "\r\n.")
        send_command("QUIT", expect_response=False)
        print("Email trimis cu succes!")
    except Exception as e:
        print(f"Eroare la trimiterea email-ului: {e}")
    finally:
        sock.close()
 
connect_wifi()
send_email()

Exercitii

Task: Creați un sistem care:

  • Măsoară temperature, presiunea atmosferică si luminozitatea folosind senzori conectați la Raspberry Pi Pico.
  • Trimite un email de notificare dacă:
    • Temperatura depășește 30°C.
    • Presiunea atmosferică depășește 1 atmosferă.
    • Daca luminozitatea atinge pragul maxim.
priot/laboratoare/07.txt · Last modified: 2024/11/18 15:32 by vlad.radulescu2901
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0