树莓派使用DS18B20模块测量温度

实现家庭室内温度远程监控只是“智能家居”的初步,目的是下班前如果发现家里温度过高,可提前用手机发送指令提前5-10分钟打开空调降温(如何通过手机发送指令控制空调有机会在进行介绍)。

一、硬件准备
1、树莓派(Raspberry Pi)一个
2、DS18B20温度传感器一个(淘宝大概5元左右)
3、4.7kΩ电阻一个 或 DS18B20模块一个(笔者用,淘宝1.5元一个,其实就是店家帮忙把电阻焊好了,接线稍好看些)。
4、杜邦线三根(双头母)

二、接线方式(如图所示)

三、确认硬件接线是否正确并生效,并读取温度
1、首先升级内核(可忽略,但如果版本较老,可能影响设备读取)

1

2

apt-get update

apt-get upgrade

修改配置:

1

sudo nano /boot/config.txt

在最后一行手动添加这个,保存并重启树莓派。

1

dtoverlay=w1-gpio-pullup,gpiopin=4

根据官方的说法,在2015-02-16之后的Raspbain版本,为了防止GPIO的冲突,使用了新的dt策略,查看 /boot/overlay/readme

2、确认设备是否生效

1

2

3

4

sudo modprobe w1-gpio

sudo modprobe w1-therm

cd /sys/bus/w1/devices/

ls

显示结果:

1

2

3

pi@raspberrypi:~$ cd /sys/bus/w1/devices/

pi@raspberrypi:/sys/bus/w1/devices$ ls

28-00000494cb79 w1_bus_master1

28-00000494cb79就是笔者外接的温度传感器设备,但并不是每个客户端都显示一样的,这个是传感器的序列号。

3、查看当前温度

1

2

cd 28-00000494cb79

cat w1_slave

显示结果:

1

2

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

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

第二行的t=23000就是当前的温度值,要换算成摄氏度,除以1000,即当前温度为23000/1000=23摄氏度。

四、用python读取温度值
文件存放:/home/pi/temperature.py
内容如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#/home/pi/temperature.py

#打开温度传感器文件

tfile = open("/sys/bus/w1/devices/28-00000494cb79/w1_slave")

#读取文件所有内容

text = tfile.read()

#关闭文件

tfile.close()

#用换行符分割字符串成数组,并取第二行

secondline = text.split("\n")[1]

#用空格分割字符串成数组,并取最后一个,即t=23000

temperaturedata = secondline.split(" ")[9]

#取t=后面的数值,并转换为浮点型

temperature = float(temperaturedata[2:])

#转换单位为摄氏度

temperature = temperature / 1000

#打印值

print temperature

在命令行运行,即可得出结果数值:
python /home/pi/temperature.py

五、上报到yeelink
yeelink是国内比较知名的免费物联网数据平台,国外有COSM(https://cosm.com)。
申请yeelink账号及添加设备和传感器,以及API的学习,本文跳过,请大家自行去学习一下。

根据yeelink API的规则,我们需要提供一个文本文件,内容为一段JSON,如下:

1

2

3

4

{

“timestamp”:”2012-03-15T16:13:14″,

“value”:294.34

}

若未指定timestamp, 服务器会自动加上当前时间,所以本文的操作不添加该字段

1、修改python,将温度值用JSON格式保存到一个文本文件,全部如下:

1

2

3

4

5

6

7

8

9

10

11

12

#/home/pi/temperature.py

tfile = open("/sys/bus/w1/devices/28-00000494cb79/w1_slave")

text = tfile.read()

tfile.close()

secondline = text.split("\n")[1]

temperaturedata = secondline.split(" ")[9]

temperature = float(temperaturedata[2:])

temperature = temperature / 1000

res = '{"value":%f}' %temperature

output = open('/home/pi/datafile.txt', 'w')

output.write(res)

output.close

python将温度值写入:/home/pi/datafile.txt

2、新增yeelink.sh脚本
文件位置:/home/pi/yeelink.sh
内容如下:

1

2

sudo python /home/pi/temperature.py

curl --request POST --data-binary @"/home/pi/datafile.txt" --header "U-ApiKey:XXXXXXXXXXXXXXXX" http://api.yeelink.net/v1.0/device/1969/sensor/2533/datapoints

将U-ApiKey:XXXXXXXXXXXXXXXX替换为自已账户的API Key。
后面的URL也需要替换为自己申请的传感器URL。

3、添加到计划任务

1

2

3

4

5

6

#为脚本增加可执行权限

sudo chmod +x yeelink.sh

#将脚本加入cronjob(计划任务)

sudo crontab -e

#在cornjob文件中添加下面一行,并保存(表示10分钟执行一下脚本,时间可自行修改)

*/10 * * * * /home/pi/yeelink.sh

完了!我的温度传感器数据展示页面:http://www.yeelink.net/devices/1969

参考文档:
http://www.cl.cam.ac.uk/freshers/raspberrypi/tutorials/temperature/
http://blog.turningdigital.com/2012/09/raspberry-pi-ds18b20-temperature-sensor-rrdtool/
http://webshed.org/wiki/RaspberryPI_DS1820

新系统更新后gpio读不了w1了的解决办法:
趣小组 - 趣小组

 

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值