树莓派读取18b20温度

实验室扔着一个同组给的18B20。。。

然后在实验室还闲的无聊,就像显示个温度玩玩。

结果嘛。。。教程都是比较坑的。。。而且老方法还有些问题。。。

下面是显示结果:

话说今天感觉好凉快的说。。。。

0x00、连接硬件:

硬件基本连接就看下面那张图了。。(从别的地方搬来的233)

我连的样子:

(好难看啊23333)

0x01、启动必要服务:

网上给的教程就像下面的一样

运行两个命令:

sudo apt-get update
sudo apt-get upgrade

启动服务

sudo modprobe w1-gpio
sudo modprobe w1-therm

测试是否生效

cd /sys/bus/w1/devices/
ls

然后。。。这什么都没显示啊(摔!

后来发现这篇文章:http://blog.csdn.net/vvbbbbb/article/details/52053293

要多加两个步骤:

sudo nano /boot/config.txt

然后在末尾加上一句:

dtoverlay=w1-gpio

按ctrl+o保存,然后ctrl+x退出

重启设备:

sudo reboot

然后开机之后就可以按照之前的语句执行了:

sudo modprobe w1-gpio
sudo modprobe w1-therm
cd /sys/bus/w1/devices/
ls

此时会显示你的设备编号(如果前面步骤你都做对了的话。。。):

记住这个编号(28-0115a83f87ff),后面还要用到。

然后测试一下温度是否读出来了:

cd 28-0115a83f87ff   #按你的编号来
cat w1_slave

显示:

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

0x02、在py里读取温度:

我们回到home:

cd ~

新建t.py:

sudo nano t.py

放入以下代码:

# -*- coding:utf-8 -*-
# 打开温度传感器文件
tfile = open("/sys/bus/w1/devices/28-0115a83f87ff/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

按ctrl+o保存,然后ctrl+x退出

然后用命令:

python t.py

看,温度是不是出来了啊~

(怎么又比刚才升温了擦)

教(bi)程(ji)完毕~