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ν•€ 제일 μ™Όμͺ½λΆ€ν„° μ—°κ²°ν•˜λ©΄ DOUT은 GPIO26κ³Ό μ—°κ²°λ©λ‹ˆλ‹€.

λ§Œμ•½, λ³΄λ“œμ˜ 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 μ„Όμ„œλ₯Ό μ—°κ²°ν•˜κ³  마이크둜 파이썬으둜 μΈ‘μ •λœ μ˜¨μŠ΅λ„ 값을 μ–»λŠ”λ²•μ— λŒ€ν•΄ μ•Œμ•„λ³΄μ•˜μŠ΅λ‹ˆλ‹€.