回答:
次のように使用できます。
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分の1度になります
(0xc1&0xf)*16+0x67/16.0 = 22.4375 degrees
Pythonの例
上記のi2cモジュールをロードすることに加えて、python-smbusパッケージをインストールする必要があります。読み取りと読み取りの間にMCP9804をシャットダウンすることにより、自己発熱を減らすことができます。
#!/usr/bin/env python
import time
from smbus import SMBus
class MCP9804(object):
def __init__(self, bus, addr):
self.bus = bus
self.addr = addr
def wakeup(self):
self.bus.write_word_data(self.addr, 1, 0x0000)
def shutdown(self):
self.bus.write_word_data(self.addr, 1, 0x0001)
def get_temperature(self, shutdown=False):
if shutdown:
self.wakeup()
time.sleep(0.26) # Wait for conversion
msb, lsb = self.bus.read_i2c_block_data(self.addr, 5, 2)
if shutdown:
self.shutdown()
tcrit = msb>>7&1
tupper = msb>>6&1
tlower = msb>>5&1
temperature = (msb&0xf)*16+lsb/16.0
if msb>>4&1:
temperature = 256 - temperature
return temperature
def main():
sensor = MCP9804(SMBus(0), 0x1f)
while True:
print sensor.get_temperature()
time.sleep(1)
if __name__ == "__main__":
main()
シリアルポートに組み込まれたRaspberry Piを使用して、デジタル温度計IC(DS1620など)に接続できます。
Raspberry Piのシリアルポートインターフェイスについては、こちらをご覧ください。
重要:RPi UARTはTTL 3.3Vで動作することに注意してください-RPiに直接高電圧5v / 12volt Uartを使用しないように注意してください。破損の原因になります!
シンプルで安価なUSB "HID TEMPer"温度計も機能し、私のようなUARTやGPIOにまだ慣れていない人でも簡単に接続できます。
RPiは、ハブなしでUSBポートから直接駆動するのに十分な電力を提供します。
Raspbian Wheezyでこれを設定するために、Ubuntu用に書かれたこれらの指示に従いました(免責事項:リンクは自分のブログの投稿用です)。Raspberry PiのLIBUSB_LIBDIR
場合、Device::USB
perlモジュールをインストールするときに設定する小さな調整を1つ行うだけ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();
}
そして、それをルートとして実行して出力を確認します。私の場合、今夜のガレージは少し肌寒いです。
day@pi:~$ sudo ./readtemp.pl
16.5
私が現在使用しているのはDS18B20です。
最初にPiを開き、次を入力します。
sudo leafpad /etc/apt/sources.list.d/raspi.list
次に、のuntested
後に単語を追加しmain
ます。
次に入力します:
sudo apt-get update
sudo apt-get upgrade
私の場合、Wi-Fi /イーサネットの速度に依存しますが、長い時間がかかりました。その後、再起動します。
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
次に、2行のコードが表示されます。2行目の最後の5桁は温度です。
これは、「Dallas One-Wire Temperature Sensor Protocol」または何かと呼ばれるものを利用します。
私は現在この本を読んでいて気に入っています。その道を行く私のビジョンは、温度センサー、arduino、xbeeラジオを一緒に接着することです。リモートセンサーは、ホームステーションの範囲内であればどこでも使用できます。次に、ホームステーションには、ラズベリーと別のxbeeがあります。arduinoでホームステーションxbeeを使用してから、arduinoとrasberryを相互に通信させる方が簡単かもしれません。これにより、複数のリモートセンサーとさまざまな種類のセンサーを使用できます。