gpt4 book ai didi

python - PIR 传感器 + Arduino + Python + 电子邮件警报

转载 作者:太空狗 更新时间:2023-10-30 01:30:41 25 4
gpt4 key购买 nike

我们正在为学校做一个项目,我们有 2 PIR运行在 Arduino 微 Controller 上的运动传感器。我们能够在 Ardunio IDE 和 Python 中查看串行端口的输出 IDLE .

我们接下来要做的是,在检测到大约 30 秒的运动后,发送电子邮件警报,看到此时我们没有以太网功能,我们认为最简单的方法是获取电子邮件通过 Python。

如何实现?

更新:

此时我们可以从 Python 发送电子邮件,我们可以在 Python 中读取 Arduino 串行端口,但我们只是在将它们放在一起时遇到了问题。

这就是我们的 Python 代码的样子,在 while 1: 是发生混淆的地方:

import smtplib,serial

ser = serial.Serial(port=2, baudrate=9200)

from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email import Encoders
import os

gmail_user = "usr@gmail.com"
gmail_pwd = "pw"

def mail(to, subject, text, attach):
msg = MIMEMultipart()

msg['From'] = gmail_user
msg['To'] = to
msg['Subject'] = subject

msg.attach(MIMEText(text))

part = MIMEBase('application', 'octet-stream')
part.set_payload(open(attach, 'rb').read())
Encoders.encode_base64(part)
part.add_header('Content-Disposition',
'attachment; filename="%s"' % os.path.basename(attach))
msg.attach(part)

mailServer = smtplib.SMTP("smtp.gmail.com", 587)
mailServer.ehlo()
mailServer.starttls()
mailServer.ehlo()
mailServer.login(gmail_user, gmail_pwd)
mailServer.sendmail(gmail_user, to, msg.as_string())
# Should be mailServer.quit(), but that crashes...
mailServer.close()

while 1: **// CONFUSION HAPPENS HERE //** <----------------------

ser.readline()

if ser.readline() = "motion"

do this mail sequence?

mail("usr2@gmail.com",
"Alarm Alert!",
"Both Motion Sensor A & B have been active for over # seconds",
"stor_fight.jpg")

如有任何提示,我们将不胜感激。

最佳答案

我不确定您在这个过程的哪一部分遇到了问题,但这里有一个解决方案的草图:

您可以使用 pyserial当 Arduino 通过 USB 插入计算机时,用于从 python 与 Arduino 通信的库。

在 python 方面,您的代码将如下所示:

serial = serial.Serial("/dev/tty.usbserial-A6007btF", 38400) # the serial name you can see in the Arduino GUI - you might just need to say "COM1" on Windows
result = serial.readline(); # blocks until you get something from the Arduino
if result == "motion":
# send email here

在 Arduino 方面,您只需执行如下操作:

void loop()
{
if(30 seconds have passed with motion)
Serial.println("motion");
}

有道理吗?

关于python - PIR 传感器 + Arduino + Python + 电子邮件警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/646903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com