查看: 15851|回复: 11

[项目] Raspberry Pi 使用DS18B20温度传感器

  [复制链接]
  • TA的每日心情
    开心
    2016-8-15 09:30
  • 签到天数: 162 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2013-3-28 09:04:18 | 显示全部楼层 |阅读模式
    分享到:
    Raspberry Pi 使用DS18B20温度传感器

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

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

    3cb6a78cgd86e4d9ffdb2&690.png
    三、确认硬件接线是否正确并生效,并读取温度
    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

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-7-16 09:10
  • 签到天数: 361 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-3-28 09:09:46 | 显示全部楼层
    先沙发,别的稍后再说
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-11-22 13:53
  • 签到天数: 293 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-3-28 10:07:58 | 显示全部楼层
    这个可以有。。。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2013-4-3 11:40
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2013-3-28 12:13:48 | 显示全部楼层
    看完立刻去yeelink注册了一个账户,哈哈
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2013-3-25 17:44
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2013-3-29 16:55:22 | 显示全部楼层
    很不错!嘿嘿,又长见识了!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2013-4-9 21:37
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2013-4-5 21:50:19 | 显示全部楼层
    我想帮我老婆做个恒温恒湿发酵箱,用rpi做PID控制。

    原理:
    在发酵箱内放置【温度传感器】、【湿度传感器】、加热用的40瓦灯泡、加湿器软管;
    用rpi连接【温度传感器】、【湿度传感器】、【灯泡】的电源插头和【加湿器】的电源插头;
    用rpi将灯泡导通,开始加热,【温度传感器】和【湿度传感器】将箱内温度传回rpi;
    当温度或湿度超过上限或下限时,通过rpi进行调节,使箱内温度和湿度恒定在一个范围内。

    目前我有几个问题;
    Realplay DHT11是一款温湿度结合在一起的传感器,是否能接到rpi的引脚上?如果用rpi驱动【灯泡】的电源开闭,是否需要通过控制继电器的方式?
    rpi上有没有类似的PID软件,还是需要自己写?

    谢谢。

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2013-10-29 22:54
  • 签到天数: 212 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2013-4-6 00:46:28 | 显示全部楼层
    powerdruy 发表于 2013-3-28 13:25
    这个貌似我早就发过了吧,我用这个直接做了个包温度的发微博机器人

    请问你发的在哪里。。。。。。。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2013-4-9 21:37
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2013-4-6 10:37:53 | 显示全部楼层
    有没有人可以帮帮我?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2013-4-6 17:07:50 | 显示全部楼层
    回复查看,回复查看,回复查看,回复查看,
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-8-15 09:30
  • 签到天数: 162 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2013-4-7 08:49:26 | 显示全部楼层
    aijam 发表于 2013-4-6 10:37
    有没有人可以帮帮我?

    你把问题单独发帖出来请教论坛里的大牛吧!这样他们看不到的~
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-19 08:22 , Processed in 0.218243 second(s), 35 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.