AHT-10 고정밀 온도 습도센서
예전 글에서 다음과 같은 모양을 가지는 고정밀 디지털 방식의 온도 및 습도 센서인 AHT10에 대해서 소개하고, 라즈베리 파이 피코 보드에서 사용하는 예를 소개한 바 있었다. (https://blog.naver.com/mythee1/223240132657)
이 온도 및 습도 센서는 무엇보다 소형이면서, 사용해 본 결과 정확도가 매우 높은 점이 마음에 들었다. (스펙상 온도는 0.3도, 습도는 2% 정도의 오차 범위를 갖는다. 또한 측정 가능한 온도 범위가 -40도에서 85도까지의 꽤 넓은 온도 범위를 측정할 수 있다.
특히 I2C 통신 방식이어서 배선 연결이 간단하면서, 별도의 라이브러리 없이도 사용이 가능한 점 또한 마음에 들었다.
참고로, 과거에 온도와 습도 측정에는 다음과 같은 모양의 DHT-11 모듈 (또는 비슷한 형태의 DHT-10 모듈)을 많이 사용했었는데, DHT-10은 온도 측정 범위가 0~50도 정도의 온도 범위에서 사용이 가능하고, 온도 편차가 +/-2도, 습도의 편차는 +/-5% 정도로 알려져 있었다.
ESP32보드에 AHT-10 적용
이 고정밀 온도센서를 ESP-32보드에 적용해 보기로 하고, 다음과 같이 간단한 회로를 구성했다.
이 센서는 I2C 방식으로 통신이 이루어지므로, 전원 선 외에 SDA와 SCL 핀을 연결하고,
이를 ESP32 보드에 연결했다.
ESP32보드의 SCL 및 SDA는 피운 맵을 참고하여 I2C인 GP22와 GP21에 맞추어 연결하고,
마이크로 파이썬 코드에서도, I2C 선언 시 이에 맞추어 다음과 같이 설정했다.
시험용 코드와 동작 모습
시험작업에 사용한 코드는 다음과 같은 테, 이 코드는 예전 글에서 소개한 것처럼 Github에서 발견한 라즈베리 파이 피코 보드 전용으로 만들어진 마이크로 파이썬 예제 (https://github.com/fdonati1/PicoTempAHT10)를 조금 단순화하여 그대로 사용하였는데, 참고로 이 예제는 별도의 추가 라이브러리가 필요하지 않은 특징이 있었다.
import utime
import sys
import machine
TP_ADDR = 0x38
TP_INIT = 0xE1
TP_READ = 0xAC
def bus_read(i2c, addr, nbytes=1):
if nbytes < 1:
return bytearray()
data = i2c.readfrom(addr, nbytes)
return data
def bus_write(i2c, addr, data):
msg = bytearray()
msg.append(data)
i2c.writeto(addr, msg)
def read_values(i2c):
bus_write(i2c, TP_ADDR, TP_INIT)
bus_write(i2c, TP_ADDR, TP_READ)
utime.sleep(1)
data = bus_read(i2c, TP_ADDR, 7)
return data
def convert(i2c):
data = read_values(i2c)
bin_temp = ((data[3] & 0x0F) << 16) | (data[4] << 8) | data[5]
bin_rh= ((data[1] << 16) | (data[2] << 8) | data[3]) >> 4
temp = round((((bin_temp / 1048576) * 200 ) - 50), 2)
rh = round(((bin_rh / 1048576) * 100), 2)
return temp, rh
i2c = machine.I2C(0, scl=machine.Pin(22), sda=machine.Pin(21), freq=400000)
while True:
reading=convert(i2c)
print('------------------------------------')
print(f'Temperature: {reading[0]} °C')
print(f'Relative Humidity: {reading[1]}%')
print('')
utime.sleep(2)
sys.exit(0)
이 코드를 사용하여 ESP32 보드에서 AHT-10으로 온도 및 습도를 측정하는 동작 모습은 다음과 같다.


