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 ์„ผ์„œ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ๋งˆ์ดํฌ๋กœ ํŒŒ์ด์ฌ์œผ๋กœ ์ธก์ •๋œ ์˜จ์Šต๋„ ๊ฐ’์„ ์–ป๋Š”๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค.