NodeMCU Lua 사용해보기 지난 10편에서는 ThingSpeak 에 ESP8266 보드를 이용해서 DHT11 의 데이터를 업로드 해 보았다. 이번에는 비슷한 서비스인 dweet.io 라는 IoT 클라우드 서비스를 이용해 보려고 한다. ThingSpeak 는 회원가입이 필요 했는데 dweet 은 회원가입이 필요 없고 Things 의 이름을 Key 로 사용한다. 고유한 이름으로 Thing 의 이름을 지정해주고 자신의 IoT 데이터를 업로드 하면 되는 것이다.
dweet.io 사이트에서 어떠한 오퍼레이션 없이 유니크한 Thing Name 을 가지고 dweet 으로 데이터를 보내면 dweet.io 에서 데이터를 받아서 저장하기 때문에 바로 데이터 업로드를 위한 하드웨어 및 소스를 준비하면 된다. ESP8266 보드인 Amica 에 DHT11 온습도 센서를 아래와 같이 연결을 하였다.
ESP8266 (Amica Board) | DHT11 |
D5 | Signal |
3.3V | VCC (+) |
GND | GND |
■ 소스
credentials.lua
1 2 3 4 | -- WiFi Connect information SSID = "Your WiFi SSID" PASSWORD = "Your WiFi Password" | cs |
init.lua
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 | -- 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("WiFi Connected...") file.close("init.lua") -- the actual application is stored in 'application.lua' --dofile("webserver.lua") dofile("dht11_dweet.lua") end end print("Connecting to WiFi access point...") wifi.setmode(wifi.STATION) wifi.sta.config(SSID, PASSWORD) wifi.sta.connect() tmr.alarm(1, 1000, 1, 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(0, 3000, 0, startup) end end) | cs |
dht11_dweet.lua
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 32 33 34 35 36 37 38 39 40 | DHT_PIN = 5 -- defined by DHT shield (D5) HOST = "dweet.io" THING_NAME = "Your Thing Name" function read_DHT() status,temp,humi,temp_decimial,humi_decimial = dht.read(DHT_PIN) if( status == dht.OK ) then print("DHT Temperature = "..temp.." grdC ".."Humidity = "..humi.." %") elseif( status == dht.ERROR_CHECKSUM ) then print( "DHT Checksum error." ); elseif( status == dht.ERROR_TIMEOUT ) then print( "DHT Time out." ); end end function dweet() read_DHT() conn=net.createConnection(net.TCP,0) conn:on("receive", function(conn, pl) print("response: ",pl) end) conn:on("connection", function(conn, payload) print("connected") conn:send("POST /dweet/for/"..THING_NAME.."?" .. "temp=" .. temp .. "&humi=" .. humi .. " HTTP/1.1\r\n" .. "Host: " .. HOST .. "\r\n" .. "Connection: close\r\n" .. "Accept: */*\r\n\r\n") end) conn:on("disconnection", function(conn, payload) print("disconnected") end) conn:connect(80, HOST) end dweet() -- dweets every 60 sec. tmr.alarm(0, 10 * 1000, 1, function() dweet() end ) print("Dweets every 60 sec DHT11 data to dweet.io") print("Stop this by tmr.stop(0)") | cs |
credentials.lua 와 init.lua 에서 ESP8266 보드를 와이파이에 연결시키고 dht11_dweet.lua 에서 dweet.io 로 DHT11의 온습도 데이터를 업로드 한다. 위의 3가지 lua 파일을 ESP8266 보드에 업로드 하고 실행하면 되는 것이다. dweet.io 사이트에서는 아무것도 설정해 주지 않아도 된다. 다만 위의 소스에서 THING_NAME 의 값은 유니트한 값이어야 한다.
ESPlorer 에서 위와 같이 데이터를 업로드하고 실행하면 dweet.io 에서 데이터가 잘 전송되었다는 리턴값을 보내 준다.
소스를 수정 후 업데이트 할 경우에는 위에 사용된 타이머 0번을 Stop 시키고 업로드 해야 한다. tmr.stop(0) 명령어를 이용해서 타이머를 멈추고 업로드 하면 된다.
이제 dweet.io 사이트에 들어가 본다.
■ dweet.io
dweet.io 사이트에서 상단의 Play 를 클릭하면 아래와 같이 API 설정 목록이 뜬다.
Play 메뉴에서 여러가지 API 에 대한 설명을 볼 수 있고 자신의 Thing 에 대한 설정을 할 수 있다. 둘러보면 모두 이해할 수 있는 내용이다. 이 API 들을 이용해서 데이터를 끌어와 관련 웹이나 스마트폰 앱 또는 또 다른 Thing 을 만들 수 있을 것이다.
위의 소스를 이용해서 데이터를 업로드한 dweet 의 THING NAME 은 'deneb_nodemcu_dht11_01' 이다. http://dweet.io/follow/deneb_nodemcu_dht11_01 (이 URL 은 언제든지 내가 ESP8266의 전원을 끊으면 동작하지 않을 수 있음) 를 클릭해서 들어가보면 데이터가 잘 업로드 되고 있는 것을 알 수 있다.
위의 화면에서 'Create a Custom Dashboard' 를 클릭하면 freeboard.io 사이트로 이동을 하는데 Things의 데이터를 비주얼하게 표현해 주는 사이트이다.
사이트에 가입하면 위와 같이 게이지 같은 위젯도 추가가 가능하다.
dweet.io 를 사용해본 소감은 ThingSpeak 보다 간단해서인지 왠지 적응이 잘 안된다. 너무 오픈되어 있어서 그런가? 좀 혼란스럽다. 아직까지는 ThingSpeak 가 더 마음에 든다. 앞으로 dweet 에 대해 새로운 사항을 알게되면 이 포스팅에 내용을 추가할 생각이다.
'ESP8266' 카테고리의 다른 글
NodeMCU Lua 사용해보기 #13 - 인터넷을 통한 릴레이 제어 #2 (18) | 2016.07.26 |
---|---|
NodeMCU Lua 사용해보기 #12 - 인터넷을 통한 릴레이 제어 #1 (7) | 2016.07.26 |
MQTT 개념과 Mosquitto 설치 및 사용 (0) | 2016.07.12 |
ESP8266 보드 비교 및 선택기준 (0) | 2016.07.10 |
NodeMCU Lua 사용해보기 #10 - ThingSpeak 데이터 업로드 (4) | 2016.07.09 |