分享

如何用树莓派通过Python控制室内温度-并发送邮件到手机(上)

 丝广里 2018-04-16

哈!朋友们,欢迎来到LIUSE网络。

今天这篇文章我们来讨论一下关于自动化控制的一些小问题,目的是通过树莓派做一个实时监控室内温度,并将温度值在一定时间自动推送给你的QQ邮箱,达到实时监控的目的。

如何用树莓派通过Python控制室内温度-并发送邮件到手机(上)

当然除此之外,你也可以发挥自己的创意,去检测其它模拟值,进行自动化检测,并控制继电器使其控制其它家用电器的开关。

注:这节课我们分两篇文章来讲解,上篇为监控实时温度,下篇为进行邮件发送,请大家时刻关注。

所需原料:

  1. 树莓派一个(Raspberry Pi)

  2. DS18B20模块

  3. 杜邦线

注:没有DS18B20模块的可以自己从带温度传感器的电器中拆一个,再加一个4.7K的电阻也可以达到同样的效果。

硬件连接:

整体连接:

将DS18B20模块的VCC连接树莓派的1号口3.3V,将GND连接树莓派的6号口GND,DQ或者OUT连接树莓派的7号口GPIO4.如果你的不是模块,自己焊接电阻的方法跟下图一样即可。

如何用树莓派通过Python控制室内温度-并发送邮件到手机(上)

(整体连接图)

DS18B20与电阻的连接电路:

如何用树莓派通过Python控制室内温度-并发送邮件到手机(上)

(DS18B20与电阻图)

树莓派管脚对照参考图:

如何用树莓派通过Python控制室内温度-并发送邮件到手机(上)

(引脚图)

接线完成后,现在还不能开始工作,我们要通过简单的代码来实现功能。

代码部分:

1.确保你的树莓派长期使用并更新,如果版本过于老,可能会对接下来的操作有影响。所以先升级系统:

apt-get update

apt-get upgrade

2.修改配置文件。官方15年后的树莓派版本,为了解决GPIO冲突,使用了新的DT策略,我们需要修改config文件添加树莓派Device Tree设备。

sudo nano /boot/config.txt

然后在最后一行计入下面的代码Ctrl+x保存退出。

dtoverlay=w1-gpio-pullup,gpiopin=4

如何用树莓派通过Python控制室内温度-并发送邮件到手机(上)

注:如果的你的DS18B20连接的管脚不是4号口,那你必须要改为对应口号。

3.确认设备是否运行:

sudo modprobe w1-gpio

sudo modprobe w1-therm

cd /sys/bus/w1/devices/

ls

进入devices目录后,ls列目录,会显示出设备的文件夹(正对应序列号)。

如何用树莓派通过Python控制室内温度-并发送邮件到手机(上)

当然,不同的设备,设备号不同这个不需要纠结,操作起来是一样的。

4.查看当前温度:

有了设备号之后(也就是那个文件夹名字),我们需要进入用cat命令查看一下w1_slave的温度值。

cd 20-00000494eb79

cat w1_slave

命令执行后,显示温度值:

70 01 4b 46 7f ff 10 10 e1 : crc=e1 YES

70 01 4b 46 7f ff 10 10 e1 t=23000

上面的23000就是当前的温度值,不过是浮点型的所以我们要除以1000来换算成摄氏度:

23000/1000=23° 即当前温度为23度。

5.通过python脚本获取温度值:

我们通过上面的手工操作可以简单的看出,要想获取温度

  • 打开传感器文件

  • 遍历文件内容

  • 找到温度值

对于找到温度值t=23000我们可以通过正则表达式来获取,也可以通过分割字符串来提取,我们先介绍一下通过正则表达式提取的python代码:

如何用树莓派通过Python控制室内温度-并发送邮件到手机(上)

(源码)

我们可以看到上图已经注释的十分详细了,再不懂的就看下面的注吧。

注:之所以里面转换多次是因为通过这个则表达式提取出来的内容为list类型的,而list类型的变量没有strip()这个方法,所以要将list转为str类型的这里用到了join()方法,转换完成之后通过strip()方法去掉“t=”,但是这时候的值是23000不符合我们的要求所以要除以1000但是现在的类型是str类型要想除以1000必须转换成整型变量,所以用atoi()这个方法,最后计算出实际的温度。

运行状态:

如何用树莓派通过Python控制室内温度-并发送邮件到手机(上)

我们再稍加修改,变得人性化一点:

如何用树莓派通过Python控制室内温度-并发送邮件到手机(上)

最后的num4变量成功的打印出了23度数值。

然后再简单的说一下方法2,通过分割字符串方式来获取值:

如何用树莓派通过Python控制室内温度-并发送邮件到手机(上)

(方法2代码)

虽然上面的方法同样可以打印出实际温度,但鄙人不是十分喜欢,还是推荐第一种。

那今天的文章就写到这,我们明天写一下如何让树莓派通过python将实时温度通过邮件的方式发到我们的邮箱~

喜欢的同学记得关注哦~

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多