arduino跑python_史上最详细的Arduino 入门教程第17课-Arduino+Python实现物体运动检测并发送邮件...

课程概述

在本节课中,您将学习如何使用带有Arduino的PIR移动检测器,并让Arduino与计算机上运行的Python程序通信,以便在传感器检测到移动时发送电子邮件。

Arduino是这个项目的核心。它“监听”PIR传感器,当检测到物体运动时,命令计算机通过USB端口发送电子邮件。

元件及材料

要搭建本课中描述的项目,您需要以下部件。

你还需要一台与互联网连接的电脑(所以你可以通过它发送电子邮件)!

器件 数量PIR热释电红外传感器 1个

Arduino UNO 开发板 1块

半寸面包板 1块

跳线包 1

面包板布局

您连接到Arduino的唯一东西是PIR传感器,所以如果您愿意,您可以直接将连接到PIR传感器的导线插到Arduino板上。但是,Arduino插座中来自传感器的导线有点松,所以最好使用下面的面包板布局。

Arduino代码

只要检测到移动,Arduino就会通过USB串行连接发送消息。然而,这可能会产生大量的电子邮件。因此,如果现在发送另一封邮件为时过早,为此Arduino会发送不同的消息。

int pirPin = 7;

int minSecsBetweenEmails = 60; // 1 min

long lastSend = -minSecsBetweenEmails * 1000l;

void setup()

{

pinMode(pirPin, INPUT);

Serial.begin(9600);

}

void loop()

{

long now = millis();

if (digitalRead(pirPin) == HIGH)

{

if (now > (lastSend + minSecsBetweenEmails * 1000l))

{

Serial.println("MOVEMENT");

lastSend = now;

}

else

{

Serial.println("Too soon");

}

}

delay(500);

}

变量“minSecsBetweenEmails”可以更改为您认为合理的值。在这里它被设置为60秒,因此电子邮件发送速率不会超过1分钟。

为了跟踪上次发送电子邮件的请求是什么时候发送的,使用了一个变量“lastSend”。它被初始化为一个负数,等于“minSecsBetweenEmails”变量中指定的毫秒数的负数。这确保了在Arduino示例启动时可以立即触发PIR。

在循环中,“millis()”函数用于获取自Arduino启动以来的毫秒数,并将其与上一次触发警报时的毫秒数进行比较,只有当毫秒数超过自上次触发警报以来的指定秒数时,才会发送消息“MOVEMENT”。否则,即使侦测到移动,它也只是发出“太快”的讯息。

在将其连接到Python程序之前,您可以通过打开Arduino IDE上的串行监视器来测试Arduino设置。

安装Python和PySerial

如果您使用的是Mac或Linux计算机,那么Python已经安装好了。如果您正在使用Windows,那么您将需要安装它。在这两种情况下,您还需要安装PySerial库来实现与Arduino通信。

在Windows上安装Python

要在Windows上安装Python,请从

下载安装程序。

这个项目是使用Python 2.7.3搭建的

在Windows上使用python3时,有一些关于PySerial的问题报告,所以坚持使用python2。

安装Python之后,您将在开始菜单中发现一个新的程序组。但是,我们将对Windows进行更改,允许您从命令提示符使用Python。您将需要它来安装PySerial。

我们将向PATH环境变量添加一些内容。

为此,您需要进入Windows控制面板并找到系统属性控件。然后点击“环境变量”按钮,在弹出的窗口中选择底部部分(系统变量)的“路径”。点击“编辑”,然后在“变量值”的末尾不删除任何已经存在的文本,添加文本:;C:\Python27

不要忘记在新的部分前加上";"

要测试它是否正常工作,启动一个新的命令提示符(DOS提示符)并输入命令“python”。你应该看到这样的东西:

安装PySerial

无论您的操作系统是什么,请从https://pypi.python.org/pypi/pyserial下载PySerial 2.6的.tar.gz安装包

这将得到一个名为:pyseries -2.6.tar.gz的文件

如果你使用的是windows,你需要把它解压到一个文件夹中。不幸的是,它不是一个普通的zip文件,因此您可能需要下载一个工具,如7-zip (http://www.7-zip.org/)。

如果您使用的是Mac或Linux计算机,那么打开终端会话'cd'到您下载的pyseries -2.6.tar.gz,然后发出以下命令解压缩安装文件夹。

$ tar -xzf pyserial-2.6.tar.gz

过程的其余部分与您的操作系统是相同的。使用你的Comamnd提示符/终端会话和“cd”到pyseries -2.6文件夹,然后运行命令:

sudo python setup.py install

Python代码

现在,您需要创建Python程序。为此,将下面的代码复制到一个名为“move .py”的文件中。在Mac / Linux上,你可以使用“nano”编辑器,在Windows上,使用Python编辑器的“IDLE”来制作文件可能是最简单的,这个编辑器可以从开始菜单上的Python程序组中获得。

import time

import serial

import smtplib

TO = 'putyour@email.here'

GMAIL_USER = 'putyour@email.here'

GMAIL_PASS = 'putyourpasswordhere'

SUBJECT = 'Intrusion!!'

TEXT = 'Your PIR sensor detected movement'

ser = serial.Serial('COM4', 9600)

def send_email():

print("Sending Email")

smtpserver = smtplib.SMTP("http://smtp.gmail.com",587)

smtpserver.ehlo()

smtpserver.starttls()

smtpserver.ehlo

smtpserver.login(GMAIL_USER, GMAIL_PASS)

header = 'To:' + TO + '\n' + 'From: ' + GMAIL_USER

header = header + '\n' + 'Subject:' + SUBJECT + '\n'

print header

msg = header + '\n' + TEXT + ' \n\n'

smtpserver.sendmail(GMAIL_USER, TO, msg)

smtpserver.close()

while True:

message = ser.readline()

print(message)

if message[0] == 'M' :

send_email()

time.sleep(0.5)

在运行Python程序之前,需要对配置进行一些更改。这些都在文件的顶部。

该程序假设电子邮件是从一个gmail帐户设置的。所以,如果你没有,你可以自己做一个,即使只是为了这个项目。

将“to”旁边的电子邮件地址更改为您希望接收通知的电子邮件。这不一定是你的电子邮件地址,但很可能是。

将“GMAIL_USER”旁边的电子邮件地址更改为您的gmail地址的电子邮件地址,并将下一行的密码更改为您用于检索电子邮件的密码。

如果您愿意,您还可以更改要发送的邮件的主题行和后面几行上的文本。

您还需要通过编辑下面一行来设置Arduino的串口参数:

ser = serial.Serial('COM4', 9600)

对于Windows系统,这将是类似于Mac和Linux的“COM4”,类似于“/dev/tty.usbmodem621”。您可以通过打开Arduino IDE找到它,在右下角,它会显示连接到Arduino的端口。

当您完成这些更改后,您可以在命令提示符/终端使用命令运行程序:

python movement.py

当一个移动被触发时,你应该会得到一些像这样的痕迹,不久之后一封电子邮件就会到达你的收件箱。

还要注意“Too soon”的消息。

实践时刻

现在你有了通过Arduino发送电子邮件的方法,这就开启了各种可能性你可以添加不同类型的传感器,也许可以通过电子邮件每小时发送一次温度报告。

PIR传感器可以直接与Arduino一起使用,以播放警告音或打开led。

总之,想你所想,造创无限可能!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值