IBM Developer Day 2018에서 배포한 IoT 뱃지는 ESP32 Devkit을 기반으로 구성되어 있습니다. 배포 당시 설치된 행사용 소프트웨어 대신 마이크로 파이썬이 포팅된 펌웨어를 설치하면 IoT 뱃지를 개발 보드로 활용할 수 있습니다. 이 튜토리얼에서는 IoT Badge에 DHT11 혹은 DHT22 센서를 연결하고 마이크로 파이썬에서 측정된 온도, 습도 정보를 얻는 방법에 대해 학습합니다.

학습 목표

이 튜토리얼을 마치게 되면 다음과 같은 것을 할 수 있습니다:

  • REPL을 이용하여 IoT Badge에 마이크로 파이썬 코드 실행
  • 마이크로 파이썬 코드로 온습도 정보 수신

사전 준비 사항

  1. Developer Day 2018 IoT Badge 펌웨어 설치하기
  2. Developer Day 2018 IoT Badge에 나만의 파이썬 코드 실행하기
  3. IBM Developer Day 2018 IoT Badge
  4. 데이터 통신용 USB 2.0 Micro B Type 케이블 (마이크로 5핀)
  5. J7번 6핀 2.54mm Female 소켓 헤더 연결
  6. DHT11 혹은 DHT22 온습도 센서 보드
  7. 2.54mm용 Male-Female Jumper Wire(점퍼선) 3줄 (선택사항)

소요 시간

이 튜토리얼을 완료하기까지 대략 15분 정도가 소요됩니다.

단계

DHT11/22 연결하기

본 튜토리얼에서는 DHT11 센서나 DHT22 센서를 이용하여 센서 주위의 온도와 습도 정보를 얻습니다. 둘 중 어떤 것을 사용해도 상관 없으나 DHT22 센서가 DHT11 센서에 비해 약간 더 정확하고 측정 범위가 넓은 특성을 가지고 있습니다. 그 대신 가격이 더 비싸므로 필요와 상황에 맞춰 적절한 것을 준비하시길 바랍니다.

센서 Pin 배열은 DHT11/22 동일하며, 아래와 같이 측정면을 바라본 상태에서 왼쪽부터 1.VDD, 2.Data, 3.NULL, 4.GND 입니다.

그러나, 시중에서 구하는 경우 Arduino용 Breakout Board에 DHT11/22 센서가 부착되어 있는 경우가 많습니다. 그 경우 해당 보드의 결선에 맞춰야 합니다. 본 튜토리얼에서는 아래와 같은 DHT11 Breakout Board를 이용합니다.

이제 DHT11/22 센서 보드를 IoT 뱃지의 J7커넥터에 연결해야 합니다. J7의 핀 배열은 VCC, GND, GPIO26, GPIO25, GPIO33, GPIO27 입니다. 본 튜토리얼에서 사용할 DHT11 센서 보드는 VCC, GND, DOUT 순서로 되어 있으므로 J7핀 제일 왼쪽부터 연결하면 DOUTGPIO26과 연결됩니다.

만약, 보드의 Pin이 VDD, Data, GND 와 같은 순서대로 노출되는 경우, 본 튜토리얼에서 사용하는 DHT11/22 센서 보드의 것과 다릅니다. 따라서 해당 보드를 소켓과 직접 연결하여 사용 할 수 없으므로 Male-Female 점퍼선 을 이용해야 합니다. 참고로 iot badge에 DHT11 센서가 결선되는 모습은 아래와 같은 모양이 됩니다.

만약 준비된 Breakout 보드나 DHT 센서가 튜토리얼과 맞지 않는 경우 센서 혹은 IoT Badge가 손상될 수 있음으로 해당 Breakout 보드의 연결에 주의해야 합니다. IoT 뱃지에 전원을 연결하기 전에 위에 언급된 순서대로 센서와 연결이 가능한지 확인하십시오.

DHT11 센서 보드가 iot badge의 소켓과 연결된 모습은 아래와 같습니다.

마이크로 파이썬 코드 작성하기

DHT11/22 센서는 Data Pin 하나로 정보를 제공합니다. 따라서, 주어진 일정한 시간과 간격에 따라 정보를 얻게야 하므로 정밀한 타이밍 제어가 되어야 합니다. 이를 위해 iot badge의 native code로 구현하고 이를 Python에서 읽어서 사용할 수 있도록 dht 모듈을 내장하고 있습니다.

다음과 같이 dht.DHT11, dht.DHT22 클래스를 이용하면 GPIO26에 연결된 DHT 센서의 값을 읽을 수 있습니다. DHT11과 DHT22 센서의 사용 방법은 서로 비슷하지만 읽어들인 데이터 형식이 다르기 때문에 별도로 구분되어 제공되고 있습니다.

import ugfx, time, machine
from dht import DHT11, DHT22

h = DHT11(machine.Pin(26)) # J7
#h = DHT22(machine.Pin(26)) # J7

while True:
    h.measure()
    h.temperature()
    print('temperature:{},humidity:{}'.format(h.temperature(), h.humidity()))
    time.sleep(1)

만약, DHT11 센서에서 데이터 수신하는 자세한 정보를 얻으려면 DHT 센서 데이터 시트를 참고 하시기 바랍니다.

iot badge에 내장된 그래픽 라이브러리인 uGFX를 이용하여 측정된 온습도 센서 측정 값을 LCD에 나타냅니다.

import ugfx, time, machine
from dht import DHT11, DHT22

h = DHT11(machine.Pin(26)) # J7
#h = DHT22(machine.Pin(26)) # J7

ugfx.init()
ugfx.set_default_font('IBMPlexMono_Bold24')
ugfx.clear()
ugfx.Label(40, 0, 240, 60, text='DHT11/22 Demo')

ugfx.set_default_font('IBMPlexMono_Regular24')
l = ugfx.Label(40, 60, 240, 120, text='')

while True:
    h.measure()
    h.temperature()
    l.text('temperature:{},humidity:{}'.format(h.temperature(), h.humidity()))
    time.sleep(1)

맺음말

이 튜토리얼에서는 IBM Developer Day 2018 IoT 뱃지와 DHT11/22 센서를 연결하고 마이크로 파이썬으로 측정된 온습도 값을 얻는법에 대해 알아보았습니다.