Underc0de

Informática => Electrónica y Robótica => Arduino - Raspberry PI => Mensaje iniciado por: Riojas en Abril 12, 2017, 01:20:34 PM

Título: Arduino + Python [Alertas por E-Mail]
Publicado por: Riojas en Abril 12, 2017, 01:20:34 PM
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.
(http://i.imgur.com/MObykyi.png)

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) [Seleccionar]
# 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.

//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:
(http://i.imgur.com/hUkQnz9.png?1)

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
https://www.python.org/

Libreria pySerial
https://pypi.python.org/pypi/pyserial/2.7

Título: Re:Arduino + Python [Alertas por E-Mail]
Publicado por: DUDA en Abril 12, 2017, 01:40:13 PM
Que aporte! Que genialidad! +Karma

Gracias mi bro!
DUDA
Título: Re:Arduino + Python [Alertas por E-Mail]
Publicado por: Nikola Tesla en Abril 12, 2017, 02:49:04 PM
Buenisimo!! Como aporte,quizas agregando un ESP8266 o un modulo ethernet podriamos hacerlo independiente de la computadora!
Título: Re:Arduino + Python [Alertas por E-Mail]
Publicado por: ldelvalleh en Abril 13, 2017, 05:49:34 AM
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.

https://programarfacil.com/blog/arduino-blog/como-ifttt-arduino-nodemcu/ (https://programarfacil.com/blog/arduino-blog/como-ifttt-arduino-nodemcu/)