1. One wire는?
1개의 데이터 선에 여러 장치를 붙여서 쓰는 식이다. 우리가 멀티탭에 전원을 꽂아서 쓰듯.
이 방식을 이용하면 선 1개로 여러 개의 센서를 붙일 수 있는데, 나는 온도 센서를 한줄로 붙여서 외부, 베란다, 거실 온도를 측정했다.
2. Raspberry 설정
1) one-wire 설정 enable 해주자.
sudo raspi-config
interface -> one-wire -> enable
2) 아래의 명령으로 w1 모듈을 프로브 해주자.
sudo modeprobe w1-gpio
sudo modprobe w1-therm
3) reboot을 하자.
4) /sys/bus/w1/devices 디렉터리가 생성되면 설정 완료
3. 디바이스 확인하기
나는 DS18B20 온도 센서를 3개 썼다. 이 온도 센서는 아래와 같이 28-으로 시작한다.
28-0000075bb47e
28-0000075be046
28-0000075cddf2
온도 값은 해당 장치 아래 파일에서 확인할 수 있다.
cat /sys/bus/w1/devices/28-0000075cddf2/w1_slave
2a 01 4b 46 7f ff 06 10 16 : crc=16 YES
2a 01 4b 46 7f ff 06 10 16 t=18625
여기서 t=X가 온도 값이다. 이 값에 1000을 나눠주면 된다.
4. python 코드
간단하게 파일 열어서 해당 값을 re로 뽑아내면 된다.
장치 id는 내가 따로 온도 센서를 추가하지 않는 한 변하지 않을 것이므로 그냥 하드 코딩 해버렸다.
import re
tempPattern = re.compile('t=(\\d+)')
def getTemp(sid):
f = open('/sys/bus/w1/devices/'+sid+'/w1_slave')
lines = f.readlines()
f.close
for s in lines:
v = tempPattern.search(s)
if(v):
return float(v.group(1))/1000
return -999
sids = ['28-xxxxxxxxxxx']
for sid in sids:
v = getTemp(sid)
print(sid, v)
이제 이 데이터를 db에 넣어주면 된다.
'라즈베리파이, 아두이노' 카테고리의 다른 글
라즈베리와 아두이노 USB로 통신하기 (3) | 2021.11.27 |
---|---|
[간단한 아두이노 코딩] 21. MAX7219 도트 매트릭스 SPI 사용하기 (0) | 2020.12.09 |
[간단한 아두이노 코딩] 20. 7세그먼트 (5461AH)로 디지털 시계 만들기 (8편 번외) (1) | 2020.11.29 |
[간단한 아두이노 코딩] 19. HC-06 모듈로 Bluetooth 통신 해보기 (0) | 2020.11.24 |
[간단한 아두이노 코딩] 18. RS485 통신 해보기 (TTL to RS485 컨버터) (3) | 2020.11.24 |