NodeMCU에서는 간단한 명령어로 AP모드와 STATION 모드를 전환할 수 있습니다.
먼저 결선도입니다.
<위 그림에서 버튼과 LED 가 서로 바뀌었습니다 ㅠ>
D6 : STA Btn
D7 : AP Btn
D1 : STA LED
D2 : AP LED
버튼을 누르면 모드가 변환되고 LED가 켜집니다.
소스코드를 모두 함수화 시켰습니다.
전원이 켜지면
1 2 | init() readbutton() | cs |
이 코드가 실행됩니다.
Line 1 : 초기화와 현재 모드의 상태를 읽어 동작을 시킵니다.
Line 2 : button을 읽는 작업을 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | function init() gpio.mode(1,gpio.OUTPUT,gpio.PULLUP) gpio.mode(2,gpio.OUTPUT,gpio.PULLUP) gpio.mode(6,gpio.INPUT,gpio.PULLUP) gpio.mode(7,gpio.INPUT,gpio.PULLUP) gpio.write(1,gpio.LOW) gpio.write(2,gpio.LOW) if(wifi.getmode()==wifi.STATION)then print("already station mode") wifistation() else print("start ap mode") wifiap() end end | cs |
초기화 함수입니다.
Line 3~6 : GPIO 1과 2는 LED이므로 output으로 GPIO 6과 7은 Btn이므로 input으로 설정했습니다.
Line 7~8 : LED 초기값은 Low로 꺼져있습니다.
Line 9~15 : 현재의 모드값을 읽어 Station mode이면 station mode 동작을 AP mode이면 AP mode로 동작 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | function readbutton() tmr.alarm(0,1000,1,function() key1=gpio.read(6) if(key1==0)then if(wifi.getmode()~=wifi.STATION)then print("change station mode") wifistation() end end key2=gpio.read(7) if(key2==0)then if(wifi.getmode()~=wifi.SOFTAP)then print("change ap mode") wifiap() end end end) end | cs |
버튼입력 함수 입니다.
버튼은 어떻게 처리할까 하다가 1초마다 한 포트씩 읽어서 실행하도록 했습니다.
어차피 빠르게 계속해서 읽는 것도 아니니...;;
Line 4~10 : 버튼 1이 읽어지면 STATION mode로 실행합니다.
Line 11~17 : 버튼 2가 읽어지면 AP mode를 실행합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | function wifistation() wifi.setmode(wifi.STATION) tmr.alarm(2, 2000, 1, function() if(wifi.getmode()~=wifi.STATION)then print("waiting station mode") wifi.setmode(wifi.STATION) else connecting() end end ) end | cs |
STA mode 함수
Line 2 : station mode로 설정합니다.
Line 3~12 : 곧바로 station mode로 전환이 안되어 타이머를 사용하여 기다리도록 했습니다.
Line 9 : station mode가 되면 AP에 접속합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | function connecting() tmr.stop(2) wifi.sta.config("JEONGMIN2.4","jmc15201520") wifi.sta.connect() print("connecting ap") if(wifi.sta.status()~=5)then tmr.alarm(2,2000,1,function() print("fail to getting ip ") if(wifi.sta.status()==5)then connectserver() end end) else connectserver() end end | cs |
AP접속 함수입니다.
Line 2 : 이전 타이머를 종료합니다.
Line 3~4 : AP의 정보를 입력하고 접속을 시도합니다.
Line 6~12 : 만약 AP에 접속이 안되면 접속이 되기를 기다려 서버에 접속합니다. 약 5초정도 걸리는 것 같습니다.
Line 13~16 : 접속이 된다면 서버에 접속을 시도합니다.
1 2 3 4 5 6 7 8 9 10 11 | function connectserver() tmr.stop(2) led(wifi.getmode()) print("connecting server") socket=net.createConnection(net.TCP, 0) socket:connect(4000,"192.168.0.101") socket:on("receive",function(sck, c) print(c) end) socket:send("hello world!!") print("connected") end | cs |
SERVER접속 함수 입니다.
Line 2 : 접속이 되면 마찬가지로 이전 타이머를 종료합니다.
Line 3 : STATION mode LED를 켜줍니다.
Line 5~8 : 서버정보를 넣어주고 접속합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | function wifiap() wifi.setmode(wifi.SOFTAP) tmr.alarm(2, 2000, 1, function() if(wifi.getmode()~=wifi.SOFTAP)then print("waiting AP mode") wifi.setmode(wifi.SOFTAP) else print("changed AP mode") wifibroadcasting() end end ) end | cs |
AP모드 접속 함수입니다.
Line 2 : AP mode로 설정합니다.
Line 3~13 : 타이머로 AP모드로 설정 되기를 기다립니다.
Line 10 : AP모드로 설정이 되면 브로트캐스팅 준비를 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | function wifibroadcasting() tmr.stop(2) mac=wifi.ap.getmac() cfg={} cfg.ssid=mac wifi.ap.config(cfg) cfg2 ={} cfg2.ip="10.10.1.1" cfg2.netmask="255.255.255.0" cfg2.gateway="10.10.1.1" wifi.ap.setip(cfg2) bc = wifi.ap.getbroadcast() print("broadcasting! "..bc) led(wifi.getmode()) end | cs |
AP모드 브로드캐스팅 함수 입니다.
Line 2 : 이전 타이머를 종료시킵니다.
Line 3 : mac 주소 값을 읽어옵니다.
Line 5~7 : AP의 정보를 입력합니다.(SSID는 mac주소로)
Line 9~12 : AP의 IP주소등을 설정합니다.
Line 16 : 브로드캐스팅을 시작합니다.
Line 19 : AP모드 LED를 켜줍니다.
AP모드로 정상적으로 작동 하였습니다.
'Study > ESP8266(WIFI),ESP32(BLE,WIFI)' 카테고리의 다른 글
nodeMCU AP모드에서 공유기에 접속시키기2 (5) | 2015.12.21 |
---|---|
nodeMCU AP모드에서 공유기에 접속시키기 (12) | 2015.12.18 |
무한 리붓될때 해결방법 (nodemcu using Lua) (0) | 2015.12.17 |
ESP8266으로 간단한 통신하기(using Lua) (0) | 2015.12.15 |
nodeMCU(ESP8266) using LUA (0) | 2015.12.14 |