树莓派3 读取DS18B20 温度

突然想玩一玩那一块闲置了N久的树莓派3B。
买的时候就介绍说这个是做物联网等东西的神器,于是我就想,第一个还是把现有的DS18B20温度传感器的数值读回来吧。搞了一晚上都没有找到合适的答案,于是一早Google了英文网站,找到了结果。
在这里分享一下。


DS18B20与树莓派连线

DS18B20单总线(1-wire)传感器可以以非并行连接接入,这一点几乎与其他市售的传感器都不同!所有传感器共享相同的针脚,所以你只需要一个4.7k左右的上拉电阻就够了。

电阻被用于拉高数据输出线(data-line),并且保持数据输出的稳定。
其中介绍了树莓派3接线端口的网址在这里
树莓派3 读取DS18B20 温度_第1张图片


读取测试(重点部分)

于是像很多教程那样,我就欢快的开始了读取之旅。在命令行中输入了如下指令。

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

然而什么都没有,ls指令后只显示了一片空白!!
为什么呢!

在文章中找到了如下的话(非常重要!!):

NEW 6th May 2015 Update Since the Raspbian operating system was
updated back at the end of January 2015 (kernel 3.18.8 and higher)
which enabled Device Tree, the above steps do not result in the
temperature sensor(s) being detected.

Now you need to enter the following at the command prompt:
sudo nano /boot/config.txt to open the /boot/config.txt file for editing. Then scroll down to the bottom of the file, and add the line:
dtoverlay=w1-gpio Ctrl-X to save the amended file. Finally reboot the Raspberry Pi so that the changes take effect.

大致的意思是说,因为树莓派系统更新,需要对GPIO的功能手动进行初始化才能检测到DS18B20。改完了config.txt 文件后还需要重启,这个很重要!

既然知道了问题所在,那就开始吭哧吭哧改呗。


再一次读取测试

输入了如下指令后,多出来了 28******和w1_bus_master1的文件,看来已经可行了!

这里写图片描述

直接cat文件,OK。 t=29312,表明结果已经出来了,只需要换算一下就可以了。
这里写图片描述


使用python读取温度

这里我使用的是一个开源库写的,w1thermsensor—-Github,里面支持很多种传感器的读取,具体看自己配置。

from w1thermsensor import W1ThermSensor

# 下面的序列号,需要填写对应的
sensor = W1ThermSensor(W1ThermSensor.THERM_SENSOR_DS18B20, "00000588806a")
temperature_in_celsius = sensor.get_temperature()

读取效果如下:
树莓派3 读取DS18B20 温度_第2张图片

你可能感兴趣的:(树莓派)