在寻找使用Raspberry Pi测量温度的简单方法时,我遇到了DS18B20 1线数字温度传感器。这保证了用几根线而几乎没有外部元件的准确的温度测量方法。
的device 上ly cost a few pounds and it 看到med too good to be true …
所以我买了一个。几分钟后,我用它测量温度。它是如此简单易用,并且是创建基于Raspberry Pi的温度数据记录器的完美起点。
DS18B20温度传感器
右图显示了DS18B20器件。它具有三个引脚,并采用TO-92封装,这意味着它看起来与您可能使用过的其他器件(例如晶体管)相似。
Pin 1 is Ground. Pin 2 is the data pin and Pin 3 is the 功率 pin. 的only external component required is a single 4.7Kohm resistor.
在测试中,我没有’没有一个,所以我串联使用2个2.2Kohm电阻。这很好。
硬件设定
我使用了一块面包板和一些跨接电缆将其连接到Raspberry Pi上的GPIO接头。
- 传感器引脚1连接到P1-06(接地)
- 传感器引脚2连接到P1-07(GPIO4)
- 传感器引脚3连接到P1-01(3.3V)
在传感器引脚2和3之间放置了一个4.7Kohm电阻。
仔细检查你是否’t混淆设备上的引脚1和引脚3,否则将以错误的方式接通电源!
将所有组件连接在一起后,即可启动Raspberry Pi。
更新树莓派
It’始终最好使用更新的SD卡来处理新项目。我倾向于使用最新的Raspbian图像 RaspberryPi.org下载页面 然后不时使用以下两个命令对其进行更新:
sudo apt-get update sudo apt-get upgrade
启用1-Wire接口
的DS18B20 传感器 uses the 1-Wire protocol. 这个 needs to be enabled so either follow the instructions below or refer to the 在Raspberry Pi上启用1-Wire接口 发布。
为了启用1-Wire接口,您只需要使用以下方法对config.txt文件进行少量更改:
须藤纳米 /boot/config.txt
在底部添加以下行:
dtoverlay = w1-gpio,gpiopin = 4
You can save the file using CTRL-X, Y then RETURN. 的device is setup to report its 温度 via 通用输入输出4.
为了使更改生效,您将需要使用重新启动:
sudo reboot
检查连接的设备
使用以下命令转到包含检测到的1-wire设备的目录:
cd /sys/bus/w1/devices ls
这将列出与您的1-wire设备关联的目录。
获取传感器ID
每个传感器都有一个唯一的ID,在我的情况下为28-00000482b243。您的ID将有所不同,因此请确保在下面的示例代码中使用该ID。
读取温度
使用“cd”我们可以转到温度传感器目录,列出内容,然后查看“w1_slave” file :
cd 28-00000482b243 ls cat w1_slave
的complete command line setup process looks like this :
的“w1_slave”文件包含一堆数据,但是“t=23062”最后是温度读数。在此示例中,温度为23.062摄氏度(摄氏度)。
尝试用手指触摸传感器,然后使用“cat w1_slave”再读一遍…
为了通过Python读取温度,以下是一个基本脚本:
#!/usr/bin/python def gettemp(id): try: mytemp = '' filename = 'w1_slave' f = open('/sys/bus/w1/devices/' + id + '/' + filename, 'r') line = f.readline() # read 1st line crc = line.rsplit(' ',1) crc = crc[1].replace('\n', '') if crc=='YES': line = f.readline() # read 2nd line mytemp = line.rsplit('t=',1) else: mytemp = 99999 f.close() return int(mytemp[1]) except: return 99999 if __name__ == '__main__': # Script has been called directly id = '28-00000482b243' 打印"Temp : " + '{:.3f}'.format(gettemp(id)/ float(1000))
这个 ds18b20.py 脚本可以直接从BitBucket下载到您的Pi上:
wget //bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/ds18b20.py
然后使用运行:
蟒蛇 ds18b20.py
注意 : 您需要用设备ID替换我对28-00000482b243的引用。
故障排除
- 您是否正在使用最新的Raspbian映像,或者已更新现有映像?
- 有你吗 启用1-wire接口?
- 您是否已正确连接设备?
- 您是否在Python脚本中添加了正确的传感器ID?
52条留言
我使用各种教程进行了尝试,但是具有最新固件(rpi-update)的Rpi无法检测到DS18B20传感器,但我的DHT11可以正常工作。
您是否尝试过使用Occidentalis?
不,我没有’由于时间不足,我们尝试过。在可能的情况下,我将使用标准的Raspbian图像,因为它覆盖了最多的用户,并将始终反映基金会的最新动态。
买了2个DS18B20,它们工作正常,谢谢!
伟大的文章Matt。我当时正在考虑使用这些传感器来监视我的中央供暖系统,您是否知道可以连接多少个这些传感器?
I’d。至少要使用12个传感器来监视系统的各个点(外侧温度和室温)。最终连接了一些阀门,并连接到锅炉上,以实现全部自动化。
你好
我使用石墨作为数据记录器。
http://hindberid.is/index.php/raspberry-pi
完美地工作。用来在假期远程监控我的房间温度-
谢谢你’我曾在eBay上购买的PCB上使用DS18D20对其进行了尝试,并且效果完美!
感谢您的来信!
我相信 :
是错误的,它实际上应该是P1-01,因为它是3.3V引脚,并且’s actually how you’ve在图中显示了它。
Well spotted. 我有updated the text.
如果使用长途巴士,’最好在线路的起点和终点使用一个10k电阻至+3.3伏,否则线路上的回声会干扰通信…
并且还使用双绞线,如cat5电缆,我将绿色/白色用于数据,绿色用于接地(0伏),棕色/白色用于+3.3伏,棕色用于数据返回。
在rpi处,我将棕色和绿色白色连接在一起,以创建1条长路径,然后将电阻器,棕色和1个电阻分别放在棕色/绿色和白色之间…
耶罗恩–您的传感器距离pi有多远? 10′? 20′? 30′?
另外,您是否有一张简短的图表来说明您的描述?一世’我很难想象它。提前致谢。
I’m使用带有perl CGI脚本(基于collecd安装的collection3)的collectd(sudo apt-get install collectd-core)将数据通过JSON导出到highcharts javascript库。
http://renarin.zapto.org/wordpress/?p=26 显示我的CPU& GPU temps.
pingback: Wire DS18B20งานทาง1-Wire电源|树莓派泰国
pingback: 液晶屏 显示 with RPi and room 温度 : 的Unwritten Words
您好,我正在寻找一种将温度计连接到烤箱中的物品并将在线温度发送给我的方法。还有什么想法要得到调查吗?
pingback: 在Pi上添加温度传感器|科林'的Arduino,计算机和电子博客
你好
我对GPIO4有问题,我认为’坠毁。当我切换到模式时,几秒钟后就会进入模式。你怎么看?
是否有可能在其他端口上以1W使用这些温度计?
谢谢!
你好我一直在互联网上寻找解决方案。我的pi根本无法识别防水DS18B20。可能有问题吗?香港专业教育学院尝试了很多事情。更换跳线电缆,更换电阻器等。
收藏夹,很棒的网站!
自从sudo apt-get更新然后升级以来,它停止工作了,他们对现在保存设备的位置做了什么?
尝试旧版本
It’有点混乱,但是尝试将以下行添加到/boot/config.txt的末尾:
dtoverlay = w1-gpio,gpiopin = 4
我可以’找不到我的传感器’现在测试。
类型:nano /boot/config.txt
顺便说一句,感谢您提供的信息,现在可以在这里使用!
重新启动后,这个上午也有同样的问题。新增中
dtoverlay = w1-gpio,gpiopin = 4
/boot/config.txt为我解决了这个问题。
谢谢!
谢谢,我担心我会损坏传感器,但这对我有用! 15年3月8日
你好,
我正在尝试寻找我的传感器的ID。
它赢了’t给出数字,但只有w1_bus_master1
我现在做错了吗?
我使用TSIC 206/306作为传感器。
嗨贾斯珀,
1wire protcoll不支持您的传感器(Tsic)。您将需要使用zacwire协议来读取Tsic传感器。
您如何转换以下打印命令行,使其在Python3中正常工作?
打印“Temp : ” + ‘{:.3f}’.format(gettemp(id)/ float(1000))
我需要使用Python3’我收到语法错误。
我认为您只是将括号括起来,因为print是Python 3中的一个函数:
print(“Temp : ” + ‘{:.3f}’.format(gettemp(id)/ float(1000)))
谢谢,马特!我尝试将其用双引号和单引号引起来,但没有’t try brackets.
效果很好!一世’m在I2c 液晶屏上显示温度,并且该库仅适用于Python3。
短总线=小于1米(3英尺)的网络。
长巴士=比短巴士更长的时间。
You can also make VDD = 5V (power it from the 5V pin) and Vpullup = 3.3V. 的sensor Data line (DQ) is open-drain so it can 上ly go as high as the Vpullup voltage.
顺便说一句..您知道吗,您可以要求MAXIM提供几个样品传感器?
//www.maximintegrated.com/en/app-notes/index.mvp/id/148
请不要’t ever type “sudo nano” or “sudo vim” etc.
一律使用“sudoedit”而是因为这种方式可以 ’被利用并确保文件没有’在您的编辑下被修改,导致更改被践踏。
如果你不这样做’t like the editor that 须藤编辑 uses, change your EDITOR variable in your bashrc.
我猜由于将设备树引入,需要将dtoverlay = w1-gpio,gpiopin = 4放入/boot/config.txt。看看这个更多。 http://www.raspberrypi.org/documentation/configuration/device-tree.md
pingback: 什么是测试GPIO引脚的防故障方法? | DL-UAT
你好
我将您的代码用于记录到/ var / tmp / temp(csv)的快速而肮脏的systemd(现在为Arch-arm)集成:
//github.com/UbiCastTeam/rpi-temp-logger
多亏了systemd,它确实将当前温度输出到journalctl:
3月10日15:52:53 myhost 蟒蛇 [146]:传感器28-0414604d6aff的温度:25.56 C
3月10日15:53:24 myhost 蟒蛇 [146]:传感器28-0414604d6aff的温度:25.56 C
我希望你不要’我介意重用您的代码(我选择了BSD许可证);请告诉是否’s an issue.
你是最棒的。我的ds18b20工作正常。
谢谢。我为该网站添加了书签。
我已经挣扎了一个月。是我的传感器还是我的pi?所以我又买了一个pi,因为我不能“see”我的传感器。还是不走运。添加了一行代码dtoverlay = w1-gpio,gpiopin = 4。谢谢!!
叹– 我有a knack of finding problems no-one has published yet.
我有几台带有Raspberry Pi 1B或v2的DS18B20,它在我玩游戏的地方始终保持85C。对于那些’t知道85是开机时记录的默认温度。我的问题是我无法说服它改变为现实。
Since everything 我有read does not include explicitly sending a 转换T命令, I presume that that is not necessary.
I’m assuming that, I’我确实缺少一些琐碎的东西,或者在我所有SD卡和两个版本的驱动程序中都缺少一些东西。现在我’m out of my league –我不知道去哪里找什么。
任何人有任何建议吗?
干杯
格雷厄姆
( 新西兰 )
我所能建议的就是使用1个传感器并按照本教程操作,使用最新的Raspbian映像创建新的SD卡。一世’我不确定你的意思是“Convert T command”?
所以在这里’一张很红的脸| -|
原来我没注意到讨厌的小东西‘p’在零件号的末尾!–使其仅具有寄生功率,而我还没有’一直在做。 --
因此,以换取几天的时间来抓挠头– at least I’我已经了解到了什么症状‘wrong device’ or ‘连接错误’ scenario.
干杯
格雷厄姆。
你好
我有“pt100”模拟温度传感器; 1wire protcoll是否支持?
Not familiar with the device but 看到ms to be just a resistor that varies with 温度. It has no intelligence doesn’支持1-wire协议。
pingback: 将温度计与Raspberry Pi(DS18B20)连接|毕达哥拉斯莓
你好
通用输入输出4被RTC占用。
更改为另一个端口,并将命令更改为:
dtoverlay = w1-gpio,gpiopin = 24
在Python2中完美运行,而在Python3中则完全没有。
让我们用温度传感器充满房子-
是否有人熟悉传感器可以远离pi的最大距离?我读了耶隆’上面的文章,但我想知道传感器是否可以安装20至50′离开并仍然提供准确的读数?有人测试过吗?提前致谢
使用串行/ USB适配器。一个可以达到30m(100 ft)。
如果您有传感器读数(而不是默认的85摄氏度),’尽可能精确。
With the 通用输入输出, in order to have a longer cable .. try lower the resistor value to 2kohm, 看到 what you get.
如果您想使用传感器而不必重启,则可以运行
须藤modprobe w1-gpio
你好
很棒的文章 – much appreciated.
我是新手,正在尝试涉足电子领域。
您怎么知道这需要一个4.7Kohm电阻?
dtoverlay = w1-gpio,gpiopin = 4命令有什么作用,新的Pis是否有必要?
谢谢
的value of the resistor is specified in the datasheet for the DS18B20 (//datasheets.maximintegrated.com/en/ds/DS18B20.pdf)
的dtoverlay command tells the system you want to use the 1-wire protocol 上 通用输入输出4. 这个 required for newer Pis.
很棒的文章…..我想在gpio 4和gpio17上使用两个温度传感器
我在config.txt中的条目应该是什么?
dtoverlay = w1-gpio,gpiopin = 4
理想情况下,您应该将两个传感器都连接到GPIO4。每个人都有自己的ID,您可以在软件中独立读取它们。