资讯详情

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

实现家庭室内温度远程监测只是智能家居的初步阶段。目的是在下班前发现家庭温度过高时,可以提前5-10分钟用手机发送指令打开空调冷却(如何通过手机发送指令控制空调)。

1、树莓派(Raspberry Pi)一个 2、DS18B一个20温度传感器(淘宝5元左右) 3、4.7kΩ电阻一个 或 DS18B一个20模块(作者用,淘宝1.一个5元,其实是店家帮忙焊接电阻,接线稍微好一点)。 四、三条杜邦线(双头母)

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/10000=23摄氏度。

文件存储://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是国内知名的免费物联网数据平台,国外有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

趣小组 - 趣小组

 

 

标签: 室内温度传感器t7412auk传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台