Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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.
  
  
priot/laboratoare/07.1727791296.txt.gz · Last modified: 2024/11/18 15:27 (external edit)
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