개요
LM73CIM 칩은 Texas Instruments에서 제조한 디지털 온도 센서입니다. I2C 인터페이스를 사용하여 Raspberry Pi나 다른 마이크로컨트롤러와 통신할 수 있습니다. 본 글에서는 라즈베리 파이에서 I2C로 LM73CIM 칩으로부터 온도값을 읽어오는 방법에 대하여 설명합니다.
라즈베리 파이 I2C 활성화하기
"raspi-config"를 이용하여 I2C를 활성화하거나, "/boot/firmware/config.txt" 파일에서 다음 설정 부분의 주석을 해제해 주어야 합니다.
dtparam=i2c_arm=on
"/boot/firmware/config.txt" 파일의 설정을 변경한 후, 라즈베리 파이를 재부팅 합니다.
재부팅한 이후에 "/dev" 폴더에 i2c 관련 장치가 표시됩니다.
$ ls /dev/i2c*
/dev/i2c-1 /dev/i2c-20 /dev/i2c-21
/etc/udev/rules.d/20-gpiomem.rules 파일을 다음과 같이 작성합니다.
SUBSYSTEM=="bcm2835-gpiomem", KERNEL=="gpiomem", GROUP="gpio", MODE="0660"
I2C를 다루기 위하여 "i2c-tools" 패키지를 설치합니다. (참고 자료; https://hbesthee.tistory.com/2058)
$ sudo apt install i2c-tools
I2C 장비를 다음과 같이 검색합니다.
$ i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- 4c -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
"4C"가 온도센서 입니다. 일반적으로 "48"이지만, LM73 칩의 address 선의 상태에 따라 주소 값은 달라질 수 있습니다.
참고로 "68"은 RTC입니다.
실제로 온도값을 읽어올 수 있는지 "i2cget" 명령을 이용하여 다음과 같이 시험해 볼 수 있습니다.
$ i2cget -y 1 0x4c 0 w
0x800f
파이썬으로 온도센서의 값 읽어오기
파이썬에서 I2C로 통신하기 위해서는 먼저 "smbus" 패키지를 설치해야만 합니다.
$ pip install -U smbus
아래는 Python을 사용하여 LM73 온도센서로부터 온도를 읽는 간단한 예제 코드입니다.
import smbus
import time
bus = smbus.SMBus(1) # I2C 버스 초기화
LM73_ADDR = 0x4C # LM73 I2C 주소
def read_temperature():
# LM73칩의 온도 레지스터 읽기 (2바이트)
temperatures = bus.read_i2c_block_data(LM73_ADDR, 0x00, 2)
# 온도로 변환
temp = ((temperatures[0] << 8)temperatures[1]) >> 3
if temp & 0x1000: # 2의 보수 처리 (음수 온도)
temp = temp - 8192
# 온도 스케일 조정 (0.0625°C 단위)
return temp * 0.0625
try:
while True:
temperature = read_temperature()
print(f"Temperature: {temperature:.2f}°C")
time.sleep(1)
except KeyboardInterrupt:
print("Measurement stopped by user")
except Exception as e:
print(f"An error occurred: {e}")
finally:
bus.close()
'프로그래밍 > Python' 카테고리의 다른 글
[python] 명령줄 인자 분석 - argparse.ArgumentParser (0) | 2024.06.20 |
---|---|
[python] TypeError: argument 'data': 'memoryview' object cannot be converted to 'PyBytes' (0) | 2024.06.19 |
[opencv] 종횡비 고정하여 이미지 크기 조정하기 (0) | 2024.06.01 |
[Python] numpy 이용 시 발생한 'ImportError: libopenblas.so.0: cannot open shared object file' 오류 (0) | 2024.05.28 |
[python] 경로 문자열에서 파일명, 확장자 분리하기 (0) | 2024.05.22 |