사물인터넷(IoT)2016. 7. 5. 16:12

이제 드디어 NodeMCU 개발 보드인 ESP8266(ESP-12E) 기반의 아미카(Amica) 를 인터넷에 연결해 보겠습니다. '드디어' 라는 말을 쓴 이유는 ESP8266 보드는 IoT(Internet of Things) 구현을 위한 보드인데 인터넷에 연결이 되지 않으면 아무런 의미가 없기 때문에 인터넷 연결을 시작으로 본격적인 개발을 할 수 있다는 의미에서 사용해 보았습니다.  이 글에서는 인터넷 Wi-Fi 에 보드를 연결해보고 통신이 되는지 확인해 보도록 하겠습니다. 시작하기 전에 예전에 올렸던 Amica 보드의 모습을 다시 보도록 하겠습니다.


보드는 위와 같이 생겼습니다. ESP8266 이라고 쓴 부분이 와이파이를 통해서 인터넷에 연결하고 각종 제어를 담당하는 핵심 부품인 MCU 부분 입니다. ESP8266 이라는 칩 입니다. 그리고 칩은 Wi-Fi 안테나와 연결이 되어서 무선 인터넷에 연결할 수 있도록 해 줍니다. 예전에 했던 말이지만 개발환경만 갖춘다면 꼭 위와 같은 보드가 아니더라도 ESP8266 칩을 사용한 어떠한 보드 모듈이라도 인터넷에 연결 할 수 있습니다. 다만 저의 경우는 ESP-01과 USB UART 로 NodeMCU 펌웨어와 ESPlorer  를 이용해서 개발을 시도해 봤지만 너무 불안정해서 이 보드를 사용할 뿐 입니다.


이번에는 저의 맥북을 사용해서 ESPlorer 를 통해서 보드에 연결을 해 보았습니다. 맥에서도 개발환경을 갖추기 위해서는 윈도우와 다를 바가 없습니다. Mac에  Mac OS X 용  CP2102 드라이버를 설치하고 ESPlorer 실행, 연결해서 Open 후 사용하면 됩니다.  다만 ESPlorer Open 시 윈도우에서는 COM1, COM2 등으로 포트를 지정했는데 맥에서는 '/dev/cu.SLAB_USBtoUART' 로 시리얼 통신 장치를 지정해 주면 됩니다.


자, 이제 준비는 끝났습니다. NodeMCU를 통해서 ESP8266을 인터넷에 연결해 봅시다.


■ credentials.lua 파일 생성

연결하려는 와이파이의 연결 정보를 담고 있는 파일 입니다. 그냥 코드에 적어 주어도 되지만 이런 정보는 파일을 분리해 주는 것이 좋습니다.


1
2
3
-- WiFi Connect information
SSID = "와이파이 이름"
PASSWORD = "와이파이 패스워드"
cs


ESPlorer 에서 File -> New 를 선택해서 새 파일을 생성해서 credentials.lua 라고 저장해 주면 됩니다. 물론 SSID (와이파이 이름), Password 는 자신이 연결하려는 와이파이 연결 정보를 입력해야 합니다. 이름은 꼭 credentials 가 아니어도 됩니다. 다만 파일을 로드 할 때는 그 이름을 사용해야 하겠죠. 위의 코드는 연결하려는 와이파이의 SSID, Password 를 설정하는 코드 입니다.



위와 같이 디스크에 저장 시 보드에 자동으로 업로드가 됩니다.



■ init.lua 파일 생성

init.lua 파일은 예전에 설명했던 바와 같이 NodeMCU가 처음으로 부팅될 때 기본으로 실행되는 파일 입니다. 이 파일에 인터넷 연결을 설정해 두면 보드에 전원이 공급될 시 자동으로 인터넷에 연결이 되는 것 입니다. 그러므로 인터넷 연결이 필수인 NodeMCU 에서는 init.lua 에 인터넷 연결 정보를 담아 놓으면 개발 시 편리하겠죠. 그 이외 보드 부팅 시 기본적인 Loading 이 필요한 사항을 담아 놓기도 합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
-- load credentials, 'SSID' and 'PASSWORD' declared and initialize in there
dofile("credentials.lua")
 
function startup()
    if file.open("init.lua"== nil then
        print("init.lua deleted or renamed")
    else
        print("Running")
        file.close("init.lua")
        -- the actual application is stored in 'application.lua'
        -- dofile("application.lua")
    end
end
 
print("Connecting to WiFi access point...")
wifi.setmode(wifi.STATION)
wifi.sta.config(SSID, PASSWORD)
wifi.sta.connect()
tmr.alarm(110001, function()
    if wifi.sta.getip() == nil then
        print("Waiting for IP address...")
    else
        tmr.stop(1)
        print("WiFi connection established, IP address: " .. wifi.sta.getip())
        print("You have 3 seconds to abort")
        print("Waiting...")
        tmr.alarm(030000, startup)
    end
end)
cs


init.lua 도 credentials.lua 와 마찬가지로 새파일을 만들고 위의 코드를 써서 저장을 해 줍니다. 맨 첫줄에 보면 credentials.lua 파일을 loading 하고 있습니다. 그리고 와이파이 연결 시까지 timer 모듈을 통해서 반복해서 연결이 시도되고 연결이 완료되면 startup function 을 call 합니다. 그리고 init.lua 를 닫아주고 프로그램이 실행될 실제 코드가 있는 application.lua (주석처리 되어 있음) 를 열어주게 됩니다. 인터넷 연결을 이용해서 실행될 실질적인 코드는 application.lua 에 위치하게 되는 것 입니다. 


위와 같이 credentials.lua 에 설정한 와이파이 연결 정보로 192.168.0.18 의 IP가 할당이 되고 인터넷에 연결이 되었습니다. 인터넷 연결이 되었으니 이 상태에서 본격적인 다음의 코드를 작업하면 되는 것 입니다. 이제 Amica 보드(ESP8266)에 전원이 들어오면 맨 먼저 위에서 설정한 인터넷에 연결을 시도할 것 입니다.


만약 잘 안된다면 credentials.lua 의 정보를 한 번 더 확인하고 두 파일을 모두 'Save to ESP' 버튼을 눌러서 개발보드(ESP8266)에 업로드 해 줍니다.



네트워크에 잘 연결이 되었는지 확인해 보기 위해서 위의 IP 로 ping 을 해 보았습니다.


통신이 잘 됩니다.


이상으로 ESP8266을 NodeMCU를 사용해서 인터넷에 연결해 보았습니다. 이제 이 작은 모듈이 인터넷이라는 거대한 네트워크에 연결이 되었으니 이를 무궁무진하게 활용하는 일만 남았네요. 상상력이 필요 합니다.


※ 참고 사이트 : https://nodemcu.readthedocs.io/en/dev/

반응형
Posted by 대네브 (deneb)

댓글을 달아 주세요