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. | ||