Arduino + Python [Alertas por E-Mail]

Iniciado por Riojas, Abril 12, 2017, 01:20:34 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Que hay de nuevo gente!!!
Les traigo esta practica en la cual haremos uso de Python para enviarnos alertas de E-mail cuando un sensor de presencia(PIR) sea activado.

Manos a la obra!!!

Materiales necesarios:
1 Arduino UNO.
1 Sensor PIR.
Cables para conexión.


Enseguida les dejo el diagrama de conexión.


En esta ocasión también haremos usa de la librería "serial" que se encarga de la comunicación entre Python y Arduino (les dejare los enlaces al final).

A continuacion les dejo el codigo de Python explicado:

Código: python
# Importamos las librerias
import time
import serial
import smtplib
import mimetypes

# Importamos los módulos necesarios
from email.MIMEText import MIMEText

#Declaramos las variables de el emisor y el receptor de el correo a enviar.
emisor = "[email protected]"
receptor = "[email protected]"

#Creamos el objeto "ser" para comunicarnos con Arduino, cambiar el puerto COM por el de tu arduino
ser = serial.Serial('COM9', 9600)

#Definimos la funciona que se encargara de mandar el mail   
def envia_email():
   
    # Autenticamos
    mailServer = smtplib.SMTP('smtp.gmail.com',587)
    mailServer.ehlo()
    mailServer.starttls()
    mailServer.ehlo()
    mailServer.login(emisor,"contraseñadelemisor")
                               
    # Enviamos el mensaje
    mailServer.sendmail(emisor,receptor,mensaje.as_string())
    print("Mensaje Enviado!")

    # Cerramos conexión
    mailServer.close()


while True:
    lectura = ser.readline()
    print(lectura)
    #Este If se encarga de leer lo que entra por el puerto serie
    #Si la primer letra de lo que contiene el puerto seria es una "M" se cumple la condicion
    if lectura[0] == 'M' :
        #Declaramos las variables fecha y hora para enviarlas en el mail
        fecha = time.strftime("%d/%m/%y")
        hora = time.strftime("%H:%M:%S")
        # Configuracion del mensaje
        mensaje = MIMEText("Se ha activado el sensor PIR el: "+ fecha + " a las: " + hora)
        mensaje['From']=emisor
        mensaje['To']=receptor
        mensaje['Subject']="Sensor PIR Activado!!!"
        #Se envia el mail
        envia_email()
    time.sleep(0.5)



Hay que tener en cuenta que debemos cambiar el numero del puerto COM por el que este usando tu Arduino en ese momento.

Ahora vamos con el código de Arduino.

Código: c
//Definimos el pin en el que conectaremos la salido de el PIR
int pirPin = 8;

int minSecsBetweenEmails = 60; // 1 min. Tiempo entre lecturas de el sensor, esto para evitar que se envien muchos correos.

long lastSend = -minSecsBetweenEmails * 1000l;


void setup()
{
  pinMode(pirPin, INPUT); //Definimos el pin de el sensor como una entrada
  Serial.begin(9600); //Inicializamos la comunicacion serial. Debe ser la misma que en Python
}

void loop()
{
  long now = millis();
  if (digitalRead(pirPin) == HIGH)
  {
    if (now > (lastSend + minSecsBetweenEmails * 1000l))
    {
      Serial.println("MOVIMIENTO"); //Si se detecte movimiento enviamos este mensaje por el puerto Serie
      lastSend = now;
    }
    else
    {
      Serial.println("Espere..."); //Se enviara este mensaje mientras no se active el sensor
    }
  }
  delay(500);
}


Y este es el resultado de el mail que se envía:


Hasta aquí esta sencilla practica, espero les guste y atentos a los próximos aportes ya que estaremos añadiendo la función de enviar una foto de el "intruso" utilizando openCV

Saludos colegas!!!

Links de descargas:
Python 2.7
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Libreria pySerial
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


Que aporte! Que genialidad! +Karma

Gracias mi bro!
DUDA

Buenisimo!! Como aporte,quizas agregando un ESP8266 o un modulo ethernet podriamos hacerlo independiente de la computadora!

Muy bueno me ha encantado. Podéis probar también el servicio IFTTT con Arduino es un servicio muy potente y más sencillo.

Os dejo un tutorial de IFTTT con NodeMCU (ESP8266) y Arduino donde los explican con un Tweet.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta