답변:
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도 온도가 유지됩니다.
(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에서 작동합니다.-고전압 5v / 12volt Uart를 RPi에 직접 사용하지 않도록주의하십시오. 손상의 원인이됩니다!
간단하고 저렴한 USB "HID TEMPer"온도계도 작동하며 아직 나와 같은 UART 또는 GPIO를 사용하지 않는 사람들을 위해 훨씬 쉽게 연결할 수 있습니다.
내 RPi는 허브없이 USB 포트에서 직접 구동 할 수있는 충분한 전원을 공급합니다.
Raspbian Wheezy와 함께 이것을 설정하기 위해, 나는 우분투를 위해 쓰여진 이 지침 을 따랐습니다 (면책 조항 : 링크는 내 블로그에 게시 된 글입니다). Raspberry Pi의 LIBUSB_LIBDIR
경우 Device::USB
펄 모듈을 설치할 때 작은 비틀기 만 설정 하면 libusb
비표준 암 위치에서 찾을 수 있습니다. 전체 지침은 다음과 같습니다.
munin 자료 없이 간단한 판독 값을 얻으려면 다음과 같이 종속성을 루트로 설치하십시오.
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
그런 다음 두 줄의 코드를 표시해야합니다. 두 번째 줄의 끝에서 5 자리는 온도입니다.
이것은 "Dallas 1-Wire 온도 센서 프로토콜"또는 무언가를 사용합니다.
나는 현재 읽고 있어요 이 책 과 같이합니다. 그 길을가는 것은 온도 센서, 아두 이노 및 xbee 라디오가 서로 붙어 있다는 것입니다. 그것이 홈 스테이션의 범위 안에있는 한 어디든있을 수있는 원격 센서입니다. 그런 다음 홈 스테이션에는 라스베리와 다른 xbee가 있습니다. 나는 arduino에 홈 스테이션 xbee를 가지고 있고 arduino와 rasberry가 서로 대화하는 것이 더 쉬울 수도 있다고 생각합니다. 이를 통해 여러 원격 센서와 다양한 유형의 센서를 사용할 수 있습니다.