|     Inicio    |   |         |  |   FOROS      |  |      |      
   Elastix - VoIP B4A (Basic4Android) App inventor 2 PHP - MySQL
  Estación meteorológica B4J (Basic4Java) ADB Shell - Android Arduino
  Raspberry Pi Visual Basic Script (VBS) FireBase (BD autoactualizable) NodeMCU como Arduino
  AutoIt (Programación) Visual Basic Cosas de Windows Webs interesantes
Translate:
Búsqueda en este sitio:


.

Raspberry Pi

Tutorial de Rapberry Pi en español.
- Juan Antonio Villalpando -

Volver al índice del tutorial

____________________________

37.- Enviar correo mediante una cuenta de Gmail. Tomar una foto y enviarla por correo.

GPIO2 es SDA
GPIO3 es SCL

- Vamos a enviar un correo mediante una cuenta de Gmail.

- Tenemos una cuenta de Gmail y vamos a enviarle un correo a otra persona desde el Raspberry.

- Supongamos que tenemos micuenta@gmail.com y le queremos enviar un correo a correodeldestinatario@yahoo.com

______________________________
1.- Permitir la llegada de correo enviada por aplicaciones.

- Primero debemos permitir a nuestra cuenta de Gmail que puedan "Acceder aplicaciones poco seguras", para ello seguimos el siguiente proceso en nuestra cuenta de Gmail:

______________________________
2.- Código para enviar un texto.

- Es necesario poner tu cuenta de correo de Gmail y tu contraseña de esa cuenta de correo.

correo_2.py

#!/usr/bin/python3

import socket
import smtplib
import os
import sys

sender_address = "micuenta@gmail.com"
sender_password = "contraseña_de_mi_correo"
sender_server = 'smtp.gmail.com'
sender_port = 587
recipient_address = "correodeldestinatario@yahoo.com"

def get_device_ip_address():

    try: 
        if os.name == "nt":
            # On Windows
            result = "Running on Windows"
            hostname = socket.gethostname()
            result += "\nHostname:  " + hostname
            host = socket.gethostbyname(hostname)
            result += "\nHost-IP-Address:" + host
            return result

        elif os.name == "posix":
            gw = os.popen("ip -4 route show default").read().split()
            s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
            s.connect((gw[2], 0))
            ipaddr = s.getsockname()[0]
            gateway = gw[2]
            host = socket.gethostname()
            result = "OS:\t\tRaspbian\nIP:\t\t" + ipaddr + "\nGateway:\t" + gateway + "\nHost:\t\t" + host
            return result
        
        else:
            result = os.name + " no funciona en este sistema."
            return result
    except:
        return "No detecta la IP"

def send_email(text):
    try:
        message = "From: " + sender_address + "\nTo: " + recipient_address + "\nSubject: Raspberry\n\n" + text 

        server = smtplib.SMTP(sender_server, sender_port)
        server.ehlo()
        server.starttls()
        server.login(sender_address, sender_password)
        server.sendmail(sender_address, recipient_address, message)
        server.close()
        print("Mensaje enviado por:\n", message)

    except:
        print("Fallo. Lee el punto 1 del tutorial.")

message = get_device_ip_address()
print(message)
print("Enviando el mensaje.")
send_email(message)
print("Terminado.")

sys.exit()

- Obtendremos esta información.

-

______________________________
3.- Enviar una imagen o un texto.

- Tenemos esta imagen en el directorio: /home/pi/ladron.jpg, la vamos a enviar.

correo_3.py

# Envía texto o imagen
# Juan A. Villalpando
# kio4.com

import smtplib,ssl  
from time import sleep  
from email.mime.multipart import MIMEMultipart  
from email.mime.base import MIMEBase  
from email.mime.text import MIMEText  
from email.utils import formatdate  
from email import encoders  
  
def envia_email():  
    enviador = 'micuenta@gmail.com'
    asunto = "Te están robando"
    receptor = 'correodeldestinatario@yahoo.com'
    
    msg = MIMEMultipart()   
    msg['From'] = enviador
    msg['Subject'] = asunto 
    msg['To'] = receptor
    
    part = MIMEBase('application', "octet-stream")  
    part.set_payload(open("/home/pi/ladron.jpg", "rb").read())  
    encoders.encode_base64(part)  
    part.add_header('Content-Disposition', 'attachment; filename="ladron.jpg"')
    msg.attach(part)

    try:  
       s = smtplib.SMTP('smtp.gmail.com', 587)
       s.ehlo()  
       s.starttls()   
       s.login(user = enviador, password = 'contraseña_de_tu_correo')
       s.sendmail(enviador, receptor, "Envia este texto") # Envia texto. Consulta Spam.
       s.sendmail(enviador, receptor, msg.as_string()) # Envia imagen.
       s.quit()  
    except smtplib.SMTPException as error:  
          print ("Error")
  
envia_email()  

______________________________
4.- Enviar texto y una imagen.

correo_4.py

# Envía texto plano, código HTML e imagen.
# Modificado por Juan A. Villalpando
# kio4.com

import smtplib,ssl  
from email.mime.multipart import MIMEMultipart   
from email.mime.text import MIMEText
from email.mime.image import MIMEImage

enviador = 'micuenta@gmail.com'
receptor = 'correodeldestinatario@yahoo.com'

msgRoot = MIMEMultipart('related')
msgRoot['Subject'] = 'Te están robando'
msgRoot['From'] = enviador
msgRoot['To'] = receptor
msgRoot.preamble = 'Esto es el preambulo.'

msgAlternative = MIMEMultipart('alternative')
msgRoot.attach(msgAlternative)

# Envío en texto plano
msgText = MIMEText('Este texto se enviará, pero no en HTML.')
msgAlternative.attach(msgText)

# Envío en formato HTML
msgText = MIMEText('<b>Texto <i>en HTML</i> y además </b> una imagen.<br><img src="cid:image1"><br>Fin de página', 'html')
msgAlternative.attach(msgText)

# Dirección de la imagen
fp = open('/home/pi/ladron.jpg', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()

# Adjunta imagen1
msgImage.add_header('Content-ID', '<image1>')
msgRoot.attach(msgImage)

s = smtplib.SMTP('smtp.gmail.com', 587)
s.ehlo()  
s.starttls()  
s.login(user = enviador, password = 'contraseña_de_tu_correo')
s.sendmail(enviador, receptor, msgRoot.as_string())
s.quit()  
print ("Creo que ya se ha enviado el correo :)")

______________________________
5.- Al pulsar un botón se ha de enviar un correo con el código del ejemplo anterior.

- Conectamos un pulsador al terminal 10 de RP y a 3.3V.

- Al pulsar este Botón, se ejecutará el código del ejemplo anterior y se enviará el correo con la imagen.

pulsador_correo.py

import subprocess
import os
from time import sleep # Función sleep del módulo time					 
import RPi.GPIO as GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(10, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

while True:
    if GPIO.input(10) == GPIO.HIGH:
        print("Botón PULSADO.")
        p1 = subprocess.Popen(['python3','correo_4.py'])
        sleep(7)
        os.system("pkill -f 'python3 correo_4.py' "))

- Dejamos 7 segundos de espera. Luego cierra el script correo_4.py

______________________________
6.- Tenemos una cámara USB enfocando a un lugar, al pulsar un Botón debe tomar una foto y enviarla por correo.

- Nos basamos en el tutorial: 26.- Webcam USB en el Raspberry Pi. Timelapse.

- Conectamos la cámara USB, comprobamos si es reconocida.

lsusb
ls -al /dev/video*

sudo v4l2-compliance -d /dev/video0

Utilizamos las aplicaciones:
sudo apt-get install v4l-utils
sudo apt-get install fswebcam

- Creamos el siguiente script. Al pulsar el Botón se capturará la imagen de la cámara y se guardará en /home/pi/ladron.jpg

- Luego se ejecutará el script correo_4.py, visto anteriormente, que enviará esa imagen por correo.

- Por último terminará el proceso de correo_4.py

pulsador_cam.py

import subprocess
import os
import sys from time import sleep # Función sleep del módulo time import RPi.GPIO as GPIO GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) GPIO.setup(10, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) while True: if GPIO.input(10) == GPIO.HIGH: print("Botón PULSADO.") os.system("fswebcam -i 0 -d /dev/video0 -r 640x480 -q --title @kio4.com /home/pi/ladron.jpg") sleep(1) p1 = subprocess.Popen(['python3','correo_4.py']) sleep(7) os.system("pkill -f 'python3 correo_4.py' "))

- Si te sale error:

Error setting pixel format
VIDIOC_S_FMT device or resource busy

Probablemente está funcionando "motion" y pueden ser incompatibles.

- Consulta el ID de motion

sudo ps -aux | grep motion

- Termina el proceso

sudo kill -9 id_de_motion

- Comentarios.

- Se podría utilizar un fin de carreras en una ventana o puerta de manera que cuando se abriera actuara como el botón del ejemplo.

______________________________
7.- Tenemos una cámara USB enfocando a un lugar, cuando haya movimiento en su cercanía debe tomar una foto y enviarla por correo.

- Se puede hacer de varias formas, mediante "motion", esto es que la cámara enfoca a un sitio y si hay cambio de imagen hace una foto.

http://kio4.com/raspberry/25_webcam_motion.htm

- También se puede hacer mediante un detector de presencia. Ver tutorial: 7.- Sensor de proximidad HR 501. Detector de movimiento.

https://randomnerdtutorials.com/raspberry-pi-motion-detector-photo-capture/

___________________________________________________

 

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información