树莓派Raspberry和ds18B20接合,可以接多个Ds18B20。

jackxiang 2013-8-16 09:41 | |
Raspberry Pi 使用DS18B20:
一、硬件准备
1、树莓派(Raspberry Pi)一个
2、DS18B20温度传感器一个(淘宝大概5元左右)
3、4.7kΩ电阻一个 或 DS18B20模块一个(笔者用,淘宝1.5元一个,其实就是店家帮忙把电阻焊好了,接线稍好看些)。
4、杜邦线三根(双头母)
二、接线方式(如图所示)
Raspberry <wbr>Pi <wbr>使用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
参考文档:
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
http://baike.baidu.com/view/1341776.htm

以上来自:http://blog.sina.com.cn/s/blog_3cb6a78c0101a46w.html
————————————————————————————————————————————————



有画图程序值得参考:
blog.turningdigital.com/2012/09/raspberry-pi-ds18b20-temperature-sensor-rrdtool/



一:首先升级内核(可忽略,但如果版本较老,可能影响设备读取)
apt-get update
apt-get upgrade
二:
温度传感器用的是DS18B20,由于树莓派是工作在linux下,所以无法直接使用C来做驱动,因此我使用的是国外大牛做好的驱动,直接编译进内核
具体方式,进入命令行(通过ssh或者直接连显示器)
输入如下命令
sudo wget http://www.frank-buss.de/raspberrypi/kernel-rpi-w1.tgz
sudo tar -xzf kernel-rpi-w1.tgz
sudo rm -f kernel-rpi-w1.tgz
sudo cd /lib/modules
sudo wget http://www.frank-buss.de/raspberrypi/modules-rpi-w1.tgz
sudo tar -xzf modules-rpi-w1.tgz
sudo rm -f modules-rpi-w1.tgz
sudo sync
sudo reboot

然后等待机器重启重新加载1-wire设备的驱动,也就是给18b20的驱动。

重启完成之后,按图所示连接18B20和树莓派:来自:http://www.guokr.com/post/438477/
http://img1.guokr.com/thumbnail/SCe-ZqjIdJeTog3r28g8Ji5COD9U1lS3vnoHAB13aIvdAwAAYAIAAEpQ_590x362.jpg

http://www.guokr.com/post/438477/
The response will either have YES or NO at the end of the first line. If it is yes, then the temperature will be at the end of the second line, in 1/000 degrees C. So, in the example above, the temperature is actually read as 20.687 and then 26.125 degrees C.
If you have more than one Sensor connected, you'll see multiple 28-xxx files. Each one will have the unique serial number so you may want to plug one in at a time, look at what file is created, and label the sensor!
摘录来自:http://learn.adafruit.com/adafruits-raspberry-pi-lesson-11-ds18b20-temperature-sensing/ds18b20
参考:http://www.2fz1.com/?tag=ds18b20

PWM输出:http://www.eeboard.com/bbs/thread-7174-1-1.html

以上就可以实现一个温度控制了。


背景:前面我用过at89s52和ds18B20做过温度传感器,也用tsic506做过,发现单片机里的线太多了(因为有按钮什么的接线,控制电路接通和断开的线等),这个raspberry pi可以通过触摸屏来实现这个按钮,也就减少了线,而且不用com口接至上位机,也就是说可以直接显示出来温度曲线,再就是这个linux有一个watchdog,不用单片机那样用上那个硬件看门狗都可以保证系统不会死,死了linux会拉起来的,稳定性增强了(这块要注意5V的电源一定要好,否则系统一样不稳定,我用欧版I9000的原装电源发现很不错。),外加上一个wifi的usb无线网卡,可以实现发到任何互联网的地方(用php或python等)。



温度传感器用的是DS18B20,由于树莓派是工作在linux下,所以无法直接使用C来做驱动,因此我使用的是国外大牛做好的驱动,直接编译进内核
具体方式,进入命令行(通过ssh或者直接连显示器)
输入如下命令
sudo wget http://www.frank-buss.de/raspberrypi/kernel-rpi-w1.tgz
sudo tar -xzf kernel-rpi-w1.tgz
sudo rm -f kernel-rpi-w1.tgz
sudo cd /lib/modules
sudo wget http://www.frank-buss.de/raspberrypi/modules-rpi-w1.tgz
sudo tar -xzf modules-rpi-w1.tgz
sudo rm -f modules-rpi-w1.tgz
sudo sync
sudo reboot

然后等待机器重启重新加载1-wire设备的驱动,也就是给18b20的驱动。

重启完成之后,按图所示连接18B20和树莓派

接下来,在命令行输入
sudo modprobe w1-gpio
sudo modprobe w1-therm
(以上两条命令需要在/etc/rc.loca这个启动脚本里添加,添加的时候去掉sudo,这样可以不用每次启动都要手动加载w1模块了)
ls /sys/bus/w1/devices/w1\ bus\ master
会显示
其中28开头的就是28b20设备了

读取温度则用如下命令
cat /sys/bus/w1/devices/w1\ bus\ master /28-*/w1_slave
t的值就是温度,除以1000就是摄氏度


再接下来就是程序部分了,树莓派是运行在linux下的,同时又带有python的解释器.于是我打算写一个python脚本来登录新浪微博,然后发表状态.网上搜了一圈,对于python实在是无力,看到别人用新浪微博python SDK做的脚本,就是不知道怎么移植过来.万般无奈之下,用了一个别人写的模拟登陆新浪微博的脚本,只修改了里面的账户和密码,当然改成我自己的了,发现居然可以登录.运行脚本,显示 Login success!(晚上公司的路由的动态DNS又挂了,家里没法连上树莓的FTP,脚本文件暂时明天上传)


来自:http://www.guokr.com/post/438477/
Raspberry Pi PWM编写的方法:
http://jackxiang.com/post/6591/

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/6588/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2013-9-15 14:24
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]