我可以连接什么到RPi以测量温度?我认为连接到I²C或SPI的设备最有意义。

这里是有关DHT-22和其他1线设备的问题。但是在此阶段,由于关键时刻,在RPi上似乎很难实现1线制

评论

我正计划从剑桥大学学习本教程

#1 楼

这是连接MCP9804的方法。



您可以像这样使用它:

root@raspberrypi:~# modprobe i2c-dev
root@raspberrypi:~# modprobe i2c-bcm2708 
root@raspberrypi:~# i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 1f 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         
root@raspberrypi:~# i2cget -y 0 0x1f 0x5 w
0x67c1


转换0x67c1到一个温度有点曲折。 MSB为0xc1,LSB为0x67

MSB的前4位被丢弃,从而使温度降低了16度。 br /> Python示例
除了加载上面的i2c模块之外,您还需要安装python-smbus软件包。您可以通过在两次读数之间关闭MCP9804来减少自热。

(0xc1&0xf)*16+0x67/16.0 = 22.4375 degrees 


评论


您使用了哪个版本的IC?我有一个类似的IC(MCP9808T),但是本地电子商店仅具有DFN封装版本。我不知道如何将其焊接在任何东西上而又不使它大幅度缩短。

– ikku
2012-09-24 14:44

@ikku,我有8引脚MSOP

– John La Rooy
2012年9月24日21:20在

#2 楼

您可以使用内置的Raspberry Pi串行端口,并将其连接到数字温度计IC(例如DS1620)。

您可以在此处找到Raspberry Pi的串行端口接口




P1(底部)-3.3V
P6-GND
P8 GPIO14-TX
P10 GPIO15-RX

重要提示:请记住,RPi UART在TTL 3.3V电压下运行-注意不要将高压5v / 12volt Uart直接用于RPi。会造成损坏!

评论


似乎使用的是3线接口,因此不仅是通常使用串行端口的问题,而且似乎与GPIO兼容

– John La Rooy
2012年7月23日在2:43



AFAIK,串行端口具有Tx,Rx和CLK是正常的。我认为SPI也需要3条线SDO,SDO和SCLK。有关SPI型号-DS1722链接,请参考此内容。

–李吉申
2012年7月23日在2:49



但是DS1620使用!RST,CLK和DQ。 !RST在整个传输过程中为高电平,CLK为时钟,DQ为双向数据,因此与UART不同

– John La Rooy
2012年7月23日在3:52

我喜欢您的替代答案,并为您(JeeSehn)改善了一点。另外,我还警告非技术用户,请注意RPi上的UART为3.3v TTL,其他USB到串行端口可能会使用5v / 12v!损坏RPI!

– Piotr Kula
2012年7月31日在9:25

#3 楼

我尝试了两种方法进行温度感应。对于I2C,我使用了TMP102模块,该模块与Gnibbler所描述的相似。这是我的信息:

对于1线制,Adafruit最近发布了自己的映像,其中包含1线支持。我能够用它读取DS18B20 1线温度传感器。这篇文章中的更多细节:最后,另一种方法是使用模拟温度传感器和一个外部ADC。 Adafruit在这方面有一个很好的教程。

#4 楼

一个简单,便宜的USB“ HID TEMPer”温度计也可以使用,对于像我这样尚未使用UART或GPIO的人来说,连接起来要容易得多。



我的RPi提供了足够的能力,可以直接从USB端口而不使用集线器来驱动它。在我自己的博客上发帖)。对于Raspberry Pi,在安装LIBUSB_LIBDIR perl模块时,我只需要做一个小调整就可以设置Device::USB,这样它就可以在非标准的手臂位置找到libusb。完整的说明如下。

要获得不带任何有关munin的内容的简单阅读,请按以下方式安装依赖项(以root身份):

 apt-get install libusb-dev
export LIBUSB_LIBDIR=/usr/lib/arm-linux-gnueabihf
cpan Inline::MakeMaker
cpan Device::USB::PCSensor::HidTEMPer
 


创建readtemp.pl

 #!/usr/bin/perl
use strict;
use Device::USB::PCSensor::HidTEMPer;

my $pcsensor = Device::USB::PCSensor::HidTEMPer->new();
my @devices = $pcsensor->list_devices();
foreach my $device (@devices) {
    print $device->internal()->celsius()."\n" if defined $device->internal();
}
 


并以root身份运行以查看输出。就我而言,今天晚上在车库里有点冷:

 day@pi:~$ sudo ./readtemp.pl 
16.5
 


#5 楼

我当前使用的是DS18B20。首先打开Pi并输入:

sudo leafpad /etc/apt/sources.list.d/raspi.list


,然后在untested之后添加单词main

然后输入:

sudo apt-get update
sudo apt-get upgrade


我的情况花费了很长时间,尽管这取决于您的wifi /以太网速度。 />之后,您重新启动:

sudo reboot now


将白线连接到GPIO4,红线连接到3V3,黑线连接到GND。您还可以在白线和红线之间连接一个4.7K电阻器。

您可以通过执行以下命令来读取它:

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


然后应该列出温度传感器的序列号,然后是w1_bus_master1

然后去:

cd serial-number-here
cat w1_slave


,然后应该显示两行代码,其中第二行末尾的5位数字是温度。

这利用了称为“达拉斯单线温度传感器协议”的东西或其他东西。

#6 楼

我目前正在阅读这本书,并且喜欢它。沿着这条路线走,我的愿景是将一个温度传感器,一个arduino和一个xbee收音机粘合在一起。这就是您的远程传感器,只要它在本站范围内,就可以在任何地方。然后对于家庭电台有一个rasberry和另一个xbee。我猜想将Home Station xbee放在arduino上,然后让arduino和rasberry互相交谈可能会更容易。这样一来,您可以拥有多个远程传感器和不同类型的传感器。

评论


有趣。我想要更多细节。看到我的问题:raspberrypi.stackexchange.com/questions/38711/…,请在那儿回答:-)

– Davide
15年11月28日在15:12