본문 바로가기
Study/ESP8266(WIFI),ESP32(BLE,WIFI)

ESP8266으로 간단한 통신하기(using Lua)

by Answer Choi 2015. 12. 15.
반응형

Lua라는 C랑 비슷하면서도 이질감(?)이 있어 조금씩 헤깔리지만 쉽게 작성할 수 있습니다.


먼저 시나리오는 이렇습니다.



1. ESP8266이 무선 AP에 접속을 합니다.


2. 접속이 완료되면 서버쪽에 접속을 하고, hello world!! 라는 데이터를 전송합니다.


3. 서버는 응답으로 Hello nodeMCU!! 라는 응답을 보냅니다.


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
30
31
function connect()
 
    if(wifi.sta.status()==5)then
        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!!")
    end
 
end
wifi.setmode(wifi.STATION)
 
if(wifi.getmode()==1)then
    print("connecting station mode")
    wifi.sta.config("JEONGMIN2.4","jmc15201520")
    wifi.sta.connect()
     tmr.alarm(050000, function() 
         
        if(wifi.sta.getip()~=nil)then
        print(wifi.sta.getip())
        connect()
        else
        print(tmr.now())
        end
    end )
    if(wifi.sta.getip()==nil)then
        print(wifi.sta.status()) 
    end
else
    print(wifi.sta.status())
end 
cs


Line 1~10 : 서버에 연결하기 위한 함수입니다.


AP에 성공적으로 접속시 서버(192.168.0.101:4000)에 접속하여 "hello world!!"를 날려주고


받은 데이터를 터미널로 보여줍니다.


Line 4 :소켓모듈을 생성합니다.


파라메터로는 타입(TCP 나 UDP), 보안여부를 설정합니다.


Line 5 : 만들어진 소켓으로 접속을 시도합니다.


접속할 서버의 포트와 ip주소를 파라메터로 넣어줍니다.


Line 6: 소켓에 대한 콜벡 이벤트를 생성합니다.


파라메터로 이벤트종류와 이벤트 함수를 넣어줍니다.


콜벡이벤트의 종류로는 연결시, 재연결시, 연결 종료시, 데이터 수신시, 데이터 송신시가 있습니다.


현재는 데이터 수신시 터미널로 보여주게 되어 있습니다.


Line 7 : 소켓 연결시 데이터를 송신합니다.



현재 "hello world!!"를 전송하게 되어 있습니다.


Line 11 : ESP8266을 station 모드로 설정합니다.


wifi.setmode(mode)는 ESP8266의 모드를 설정하는 역할을 합니다.


AP에 접속을 위해 STATION모드로 설정합니다.


Line 13 : ESP8266의 모드가 STATION모드로 설정이 잘 되었는지 확인합니다.


wifi.getmode()는 ESP8266의 현재 설정모드를 알려줍니다.



STATION 모드로 설정된 경우 1을 리턴합니다.


Line 15 : 접속할 AP의 SSID와 비번을 설정합니다. 


접속할 AP의 정보로 SSID와 PW를 넣어줍니다.


Line 16 : 접속을 시도합니다.

AP에 접속을 시도합니다.



Line 17~28 : ESP8266이 AP에 접속하는데 바로 되지는 않고, 약간의 시간이 필요합니다.


따라서 타이머를 사용하여 접속이 되는 걸 기다려야 합니다.


만일 ssid나 pw이 틀렸을 경우에는 접속시도를 종료하기 위해 타이머를 5초정도 사용하였습니다.


타이머의 사용방법은 아래와 같습니다.


파라메터로 타이머 id와 타이머 반복여부, 타이머 시작시 실행될 함수 내용등을 적어줍니다.


Line 19~24 : ESP8266이 AP에 성공적으로 접속시에는 처음에 나왔던 connect함수를 실행합니다.


Line 19 : 접속이 되어 ip정보등을 가져옵니다.


성공적으로 접속이 되면 IP주소, subnetmask, gateway를 받아옵니다.


접속이 되지 않으면 nil값을 반환합니다.


Line 21 : connect함수를 실행합니다.


Line 27, 30 : 현재 wifi의 상태를 보여줍니다.(접속 실패시 보여주게 해놨습니다.)


반환값은 아래와 같습니다.


0-아무작업 안함, 1-접속중, 2-패스워드 오류, 3-AP 찾을 수 없음, 4-접속실패, 5-접속완료


실행모습입니다.



접속이 완료되어 IP와 mask, gateway를 받아왔고, 서버에서 응답받은 데이터도 터미널에


띄워 줬습니다.


서버쪽은 docklight로 설정했습니다.


포트 4000번이고, hello world!!를 받으면 Hello nodeMCU!!를 보내줍니다.



반응형

인기글