注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

不懂风情,承蒙错爱。

Making love to Raspberry Pi

 
 
 

日志

 
 
关于我

我爱如莲的少男少女,他们笑容纯真,不说假话。

网易考拉推荐

树莓派+DS18B20温度传感器  

2013-03-25 08:08:30|  分类: 嵌入式 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
树莓派+DS18B20温度传感器 - 夏一林 - 不懂风情,承蒙错爱。
 
一、硬件准备
1、树莓派(Raspberry Pi)一个
2、DS18B20温度传感器一个(淘宝大概5元左右)
3、4.7kΩ电阻一个 或 DS18B20模块一个(笔者用,淘宝1.5元一个,其实就是店家帮忙把电阻焊好了,接线稍好看些)。
4、杜邦线三根(双头母)

二、接线方式(如图所示)
树莓派+DS18B20温度传感器 - 夏一林 - 不懂风情,承蒙错爱。

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

apt-get update
apt-get upgrade
2、确认设备是否生效

sudo modprobe w1-gpio
sudo modprobe w1-therm
cd /sys/bus/w1/devices/
ls
显示结果:

pi@raspberrypi:~$ cd /sys/bus/w1/devices/
pi@raspberrypi:/sys/bus/w1/devices$ ls
28-00000494cb79 w1_bus_master1


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

3、查看当前温度

cd 28-00000494cb79
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

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

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

#/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,如下:

{
“timestamp”:”2012-03-15T16:13:14″,
“value”:294.34
}

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

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

#/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
内容如下:

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、添加到计划任务
#为脚本增加可执行权限

sudo chmod +x yeelink.sh

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

sudo crontab -e

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

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

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

参考文档:
  评论这张
 
阅读(4279)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017