This shows you the differences between two versions of the page.
priot:laboratoare:07 [2024/10/01 17:01] 127.0.0.1 external edit |
priot:laboratoare:07 [2024/11/18 15:32] (current) vlad.radulescu2901 |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== Laboratorul 07. ===== | + | ===== 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: | ||
+ | <code send_mail.py> | ||
+ | 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() | ||
+ | |||
+ | </code> | ||
+ | |||
+ | ==== 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. | ||