如何用树莓派通过Python控制室内温度-并发送邮件到手机(上)
哈!朋友们,欢迎来到LIUSE网络。
今天这篇文章我们来讨论一下关于自动化控制的一些小问题,目的是通过树莓派做一个实时监控室内温度,并将温度值在一定时间自动推送给你的QQ邮箱,达到实时监控的目的。
当然除此之外,你也可以发挥自己的创意,去检测其它模拟值,进行自动化检测,并控制继电器使其控制其它家用电器的开关。
注:这节课我们分两篇文章来讲解,上篇为监控实时温度,下篇为进行邮件发送,请大家时刻关注。
所需原料:
树莓派一个(Raspberry Pi)
DS18B20模块
杜邦线
注:没有DS18B20模块的可以自己从带温度传感器的电器中拆一个,再加一个4.7K的电阻也可以达到同样的效果。
硬件连接:
整体连接:
将DS18B20模块的VCC连接树莓派的1号口3.3V,将GND连接树莓派的6号口GND,DQ或者OUT连接树莓派的7号口GPIO4.如果你的不是模块,自己焊接电阻的方法跟下图一样即可。
DS18B20与电阻的连接电路:
树莓派管脚对照参考图:
接线完成后,现在还不能开始工作,我们要通过简单的代码来实现功能。
代码部分:
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
注:如果的你的DS18B20连接的管脚不是4号口,那你必须要改为对应口号。
3.确认设备是否运行:
sudo modprobe w1-gpio
sudo modprobe w1-therm
cd /sys/bus/w1/devices/
ls
进入devices目录后,ls列目录,会显示出设备的文件夹(正对应序列号)。
当然,不同的设备,设备号不同这个不需要纠结,操作起来是一样的。
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代码:
我们可以看到上图已经注释的十分详细了,再不懂的就看下面的注吧。
注:之所以里面转换多次是因为通过这个则表达式提取出来的内容为list类型的,而list类型的变量没有strip()这个方法,所以要将list转为str类型的这里用到了join()方法,转换完成之后通过strip()方法去掉“t=”,但是这时候的值是23000不符合我们的要求所以要除以1000但是现在的类型是str类型要想除以1000必须转换成整型变量,所以用atoi()这个方法,最后计算出实际的温度。
运行状态:
我们再稍加修改,变得人性化一点:
最后的num4变量成功的打印出了23度数值。
然后再简单的说一下方法2,通过分割字符串方式来获取值:
虽然上面的方法同样可以打印出实际温度,但鄙人不是十分喜欢,还是推荐第一种。
那今天的文章就写到这,我们明天写一下如何让树莓派通过python将实时温度通过邮件的方式发到我们的邮箱~
喜欢的同学记得关注哦~