DHT11温湿度监控
按以下步骤安装Adafruit库,并进行测试:
sudo git clone https://github.com/adafruit/Adafruit_Python_DHT.git 获取Adafruit库
cd Adafruit_Python_DHT
sudo python3 setup.py install 为python安装此库
cd examples
./AdafruitDHT.py 11 18 11代表此设备为DHT11,18代表数据接口接在BCM编码第18号引脚处(物理引脚12)
测试没问题的话,可以在~/目录下创建一个DHT.py文件,内容如下:
#!/usr/bin/python
import sys
import Adafruit_DHT
humidity, temperature = Adafruit_DHT.read_retry(11, 18)
print('Temp={0:0.1f}* Humidity={1:0.1f}%'.format(temperature,humidity))
为其添加可执行权限:
chmod +x DHT.py
添加其他功能
将记录写入文件
编辑DHT.py文件如下:
#!/usr/bin/python
import sys,time
import Adafruit_DHT
humidity, temperature = Adafruit_DHT.read_retry(11, 18)
d=time.strftime("%Y-%m-%d")
t=time.strftime("%H:%M:%S")
file_path = '/home/myhome/dht.txt'
with open(file_path,mode='a',encoding='utf-8') as file_obj:
file_obj.write('日期:{0},时间:{1},温度:{2:0.1f}℃,湿度:{3:0.1f}%\n'.format(d,t,temperature,humidity))
file_obj.close()
以上要点:
- time模块
time.time()获取当前时间戳。
时间戳是使用数字签名技术产生的数据。其值指从格林威治时间1970年1月1日0时0分0秒起到当前的的总秒数,精确到小数点后两位。
Unix和Windows的时间戳只支持到2038年。
time.strftime(fromat[,t])用于格式化日期时间。python中日期时间的格式化符号如下:
符号 |
含义 |
%y |
两位数的年份 |
%Y |
四位数的年份 |
%m |
月份 |
%d |
月内的一天 |
%H |
24小时制的小时数 |
%I |
12小时制的小时数 |
%M |
分钟数 |
%S |
秒数 |
%a |
本地简化星期名称 |
%A |
本地完整星期名称 |
%b |
本地简化月份名称 |
%B |
本地完整月份名称 |
%c |
本地相应的日期表示和时间表示 |
%j |
年内的一天 |
%p |
本地A.M.或P.M.的等价符 |
%U |
一年内的星期数,星期天为每星期的开始 |
%w |
星期,星期天为每星期的开始 |
%W |
一年中的星期数,星期一为每星期的开始 |
%x |
本地相应的日期表示 |
%X |
本地相应的时间表示 |
%Z |
当前时区的名称 |
%% |
%本身 |
- open模块
open模块有两个参数:open('file','mode')。其中mode有以下几种:
模式 |
描述 |
r |
打开的文件为只读模式。文件指针位于文件的开头,这是默认模式。 |
rb |
打开仅用二进制格式读取的文件。文件指针位于文件的开头,这是默认模式。 |
r+ |
打开读写文件。文件指针放在文件的开头。 |
rb+ |
以二进制格式打开一个用于读写文件。文件指针放在文件的开头。 |
w |
打开仅供写入的文件。 如果文件存在,则覆盖该文件。 如果文件不存在,则创建一个新文件进行写入。 |
wb |
打开仅用二进制格式写入的文件。如果文件存在,则覆盖该文件。 如果文件不存在,则创建一个新文件进行写入。 |
w+ |
打开写入和取读的文件。如果文件存在,则覆盖现有文件。 如果文件不存在,创建一个新文件进行阅读和写入。 |
wb+ |
打开一个二进制格式的写入和读取文件。 如果文件存在,则覆盖现有文件。 如果文件不存在,创建一个新文件进行阅读和写入。 |
a |
打开一个文件进行追加。 如果文件存在,则文件指针位于文件末尾。也就是说,文件处于追加模式。如果文件不存在,它将创建一个新文件进行写入。 |
ab |
打开一个二进制格式的文件。如果文件存在,则文件指针位于文件末尾。 也就是说,文件处于追加模式。如果文件不存在,它将创建一个新文件进行写入。 |
a+ |
打开一个文件,用于追加和阅读。 如果文件存在,则文件指针位于文件末尾。 文件以附加模式打开。 如果文件不存在,它将创建一个新文件进行阅读和写入。 |
ab+ |
打开一个二进制格式的附加和读取文件。 如果文件存在,则文件指针位于文件末尾。文件以附加模式打开。如果文件不存在,它将创建一个新文件进行读取和写入。 |
设置记录频率
利用crontab定时运行以上python脚本,实现定时记录温湿度。crontab设置:
*/10 * * * * /home/myhome/DHT.py
crontab每列代表含义依次为:
m(分钟,0-59) h(小时,0-23) dom(day of month,1-31) mon(月份,1-12) dow(day of week,0-6,0表示星期天) command(要执行的命令)
*代表每个,比如第一个*表示每分钟。
*/n代表每n个,比如第一个*/10表示每10分钟。
n,m表示第n和m,比如第一位是5,10表示第5分钟和第10分钟。
n-m表示第n到m,比如第一位是5-10表示从第5分钟到第10分钟。
举例,每月每天的午夜0点20分,2点20分,4点20分....执行 echo "haha":
20 0-23/2 * * * echo "haha"
在FreeBSD中,频率可以用@单词表示:
单词 |
含义 |
@num |
上一次作业调用完成后的num秒钟后再此运行作业 |
@reboot |
cron启动时运行一次 |
@every_second |
每秒钟运行一次 |
@every_minute |
每分钟运行一次,相当于 */1 * * * * |
@hourly |
每小时零分运行一次,相当于 0 * * * * |
@midnight |
每天午夜运行一次,与@daily相同 |
@daily |
每天凌晨零点零分运行一次,相当于 0 0 * * * |
@weekly |
每周日凌晨零点零分运行一次,相当于 0 0 * * 0 |
@monthly |
每月1日凌晨零点零分运行一次,相当于 0 0 1 * * |
@annually |
每年运行一次,与@yearly相同 |
@yearly |
每年1月1日凌晨零点零分运行一次,相当于 0 0 1 1 * |