Raspberry Pi로 온도 센서 모듈 ADT7410에서 데이터 획득
11543 단어 RaspberryPi온도 센서ADT7410I2C파이썬
필요한 것
온도 센서 모듈 ADT7410 정보
Raspberry Pi 준비
사용중인 Raspberry Pi의 OS 버전은 다음과 같습니다.
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 10 (buster)
Release: 10
Codename: buster
I2C를 활성화합니다.
$ sudo raspi-config
-> 5 Interfacing Options
--> P5 I2C
위와 같이 CUI에서 configration에서 I2C를 활성화합니다.
GUI에서 활성화하는 방법도 있습니다. 알고 싶은 분은 조사해 주세요.
필요한 패키지를 설치합니다.
$ sudo apt-get install i2c-tools libi2c-dev python-smbus
온도 센서 모듈 준비와 Raspberry Pi와의 연결
구입한 온도 센서 모듈 ADT7410은 핀이 없는 상태이므로 납땜합니다.
브레드보드를 사용하여 다음과 같이 GPIO와 모듈을 연결합니다.
연결할 때 Raspberry Pi의 전원을 끄십시오.
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 10 (buster)
Release: 10
Codename: buster
$ sudo raspi-config
-> 5 Interfacing Options
--> P5 I2C
$ sudo apt-get install i2c-tools libi2c-dev python-smbus
구입한 온도 센서 모듈 ADT7410은 핀이 없는 상태이므로 납땜합니다.
브레드보드를 사용하여 다음과 같이 GPIO와 모듈을 연결합니다.
연결할 때 Raspberry Pi의 전원을 끄십시오.
(Raspberry Pi의 GPIO 핀아웃은 htps: // 피노우 t. xy · 등 참조)
fritzing으로 배선도를 써 보았습니다.
배선이 끝나면 Raspberry Pi를 시작하여 연결을 확인합니다.
$ i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
이런 식으로 "48"이 보이면 연결은 문제 없습니다.
덧붙여 주소를 48에서 변경하고 싶은 경우는 ADT7410의 A0, A1을 납땜으로 쇼트 시키면 바꿀 수 있습니다.
0이 오픈, 1을 쇼트한 상태로 하면,
됩니다.
여러 개 사용하는 경우 주소를 변경하여 사용합시다.
그럼 접속을 할 수 있었으므로, 온도를 취득합시다.
$ i2cget -y 1 0x48 0x00 w
0xd00c
0xd00c가 온도입니다, 라고 해도 의미를 모르겠네요.
계산 방법은,
에서 구해, 25.625℃는 온도입니다.
파이썬으로 프로그래밍하면 다음과 같이 보입니다.
adt7410_13bit.py
# -*- coding: utf-8 -*-
import smbus
bus = smbus.SMBus(1)
address_adt7410 = 0x48
register_adt7410 = 0x00
configration_adt7410 = 0x03
# 13bitに設定して読み出し
bus.write_word_data(address_adt7410, configration_adt7410, 0x00)
word_data = bus.read_word_data(address_adt7410, register_adt7410)
# 2バイトの入れ替え
data = (word_data & 0xff00) >> 8 | (word_data & 0xff) << 8
# 3ビットの右シフト
data = data >> 3
# 16で割って温度に
print(data/16.)
16 비트로 읽으려면 레지스터의 구성 주소 0x03에 0x80을 씁니다.
adt7410_16bit.py
# -*- coding: utf-8 -*-
import smbus
bus = smbus.SMBus(1)
address_adt7410 = 0x48
register_adt7410 = 0x00
configration_adt7410 = 0x03
# 16bitに設定して読み出し
bus.write_word_data(address_adt7410, configration_adt7410, 0x80)
word_data = bus.read_word_data(address_adt7410, register_adt7410)
# 2バイトの入れ替え
data = (word_data & 0xff00) >> 8 | (word_data & 0xff) << 8
# 128で割って温度に
print(data/128.)
각각 실행하면 온도를 얻을 수 있습니다.
$ python adt7410_13bit.py
27.125
$ python adt7410_16bit.py
26.7109375
수치상은 13bit라면 0.0625℃, 16bit라면 0.0078℃의 resolution이 있다고 하는 것입니다만, 원래의 정밀도가 그렇게 있다고는 생각하지 않기 때문에, 개인적으로는 13bit로 충분하다고 생각합니다.
Reference
이 문제에 관하여(Raspberry Pi로 온도 센서 모듈 ADT7410에서 데이터 획득), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tm_nagoya/items/17894f33a6f80d00931e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)