사물인터넷(IoT)2016. 7. 5. 14:11

NodeMCU 에서는 활용하기 쉽도록 미리 정의된 기능들의 모음이 있는데 이를 모듈(Modules) 라고 부릅니다. 여러가지 복잡한 기능들을 모듈화해서 간단한 명령으로 복잡한 프로그래밍 없이 동작하도록 만드는 것입니다. 예를 들어 NodeMCU 관련 이전 글에서의 소스를 봐도 많은 모듈이 사용되었습니다. 예전에 사용했던 소스를 다시 보면서 어떤 모듈이 사용되었는지 알아보겠습니다.


NodeMCU Logo



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-- Pin definition 
local pin = 7            --  GPIO13
local status = gpio.LOW
local duration = 1000    -- 1 second duration for timer
 
-- Initialising pin
gpio.mode(pin, gpio.OUTPUT)
gpio.write(pin, status)
 
-- Create an interval
tmr.alarm(0, duration, tmr.ALARM_AUTO, function ()
    if status == gpio.LOW then
        status = gpio.HIGH
    else
        status = gpio.LOW
    end
 
    gpio.write(pin, status)
end)
 
cs


"NodeMCU Lua 사용해보기 #2 - GPIO 사용 (LED Blink)" 글의 말미에 적었던 추가사항에 있던 소스 입니다. 모듈들은 gpio 모듈, tmr 모듈이 있습니다. 각각에 대해서 알아보겠습니다. gpio.mode() 는 말 그대로 gpio 핀의 상태를 설정 합니다. gpio.write() 는 디지털 출력핀에 해당 값을 적용 합니다. tmr.alarm() 은 여러가지 기능이 있는데 위의 경우는 while 문 처럼 해당 function 을 반복하는 기능을 합니다. 조금 더 자세히 알아보겠습니다.


■ 소스에 쓰인 Modules


1. gpio.mode() : gpio 핀의 초기화, 핀의 IN/OUT 을 지정하고 내부 pull-up 사용여부를 지정 합니다.

  • 문법

gpio.mode(pin, mode [, pullup])

  • 파라미터 

pin : pin to configure, IO index

mode : one of gpio.OUTPUT, gpio.OPENDRAIN, gpio.INPUT, or gpio.INT (interrupt mode)

pullup : gpio.PULLUP enables the weak pull-up resistor; default is gpio.FLOAT

  • gpio.mode() 의 문법과 파라미터 정의는 위와 같습니다. 고로 소스에 있는 gpio.mode(pin, gpio.OUTPUT) 의 의미는 해당 핀(7번 핀)을 OUTPUT (출력) 으로 지정하는 것 입니다. 


2. gpio.write() : 디지털 GPIO 핀에 값을 지정한다.

  • 문법

gpio.write(pin, level)

  • 파라미터 

pin : pin to write, IO index

level : gpio.HIGH or gpio.LOW

  • 소스에 있는 gpio.write(pin, status) 의 의미는 해당 핀(7번 핀)에 대해 if 문의 판단으로 status 변수에 값을 저장하고 HIGH 또는 LOW 로 지정하는 것 입니다.


3. tmr.alarm() : Timer 모듈의 하나로써 원하는 시간을 지정해 놓고 시간이 지나면 function() 을 실행 합니다. 

  • 문법

tmr.alarm(id, interval_ms, mode, function())

  • 파라미터 

id : timer id (0-6)

interval_ms : timer interval in milliseconds. Maximum value is 6870947 (1:54:30.947).

mode : timer mode:

tmr.ALARM_SINGLE a one-shot alarm (and no need to call tmr.unregister())

tmr.ALARM_SEMI manually repeating alarm (call tmr.start() to restart)

tmr.ALARM_AUTO automatically repeating alarm

  • 소스에 있는 tmr.alarm(0, duration, tmr.ALARM_AUTO, function () .....  의 의미는 소스에서 해당 타이머의 ID 는 0번으로 지정했고 duration (소스에서는 1초 ms 단위) 의 시간이 흐른 후 function() 을 실행하라는 의미 입니다. mode 지정으로 tmr.ALARM_AUTO 을 설정해서 타이머가 계속 반복 됩니다. 타이머가 한 번만 실행되게 하려면 mode 의 파라미터를 tmr.ALARM_SINGLE 로 지정 하면 됩니다.


위에서 알아본대로 NodeMCU 를 효율적으로 사용하기 위해서는 여러가지 모듈들을 잘 다룰 수 있어야 합니다. 모듈들에 대한 기능 정의는 아래의 사이트에 영문이지만 상세하게 설명되어 있습니다. 마음 같아서는 하나 하나 번역해서 본 블로그에서 소개하고 싶으나 분량이 꽤 되므로 그 때 그 때 필요한 모듈을 찾아보면서 사용하는 것이 효율적인 것 같습니다. 게다가 해당 모듈을 사용한 샘플코드도 제공하고 있으니 하나 씩 실행해 보면서 체험 하는 것이 제일 좋은 학습 방법 같습니다.


■ NodeMCU Documentation

https://nodemcu.readthedocs.io/en/dev/


사실 위의 문서는 우리가 NodeMCU 의 펌웨어를 설치하기 위해서 다운로드 받았던 펌웨어 Zip 파일에도 들어 있습니다.


■ NodeMCU 펌웨어 다운로드

https://github.com/nodemcu/nodemcu-firmware


위와 같이 펌웨어 다운로드 사이트에서 펌웨어 다운로드 후 docs 폴더에 들어가면 md(Mark Down) 파일로 모듈에 대한 문서들이 들어 있습니다. 위에서 설명 했던 gpio 에 관한 문서 gpio.md 도 있네요.


앞으로 NodeMCU 학습을 하거나 개발을 할 때 사이트를 띄우거나 문서를 보면서 각각의 모듈에 대해서 참고하면서 코딩하면 되겠습니다.

반응형
Posted by 대네브 (deneb)

댓글을 달아 주세요