사물인터넷(IoT)2016. 7. 19. 17:56

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(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


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(010 * 10001, 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

https://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 에 대해 새로운 사항을 알게되면 이 포스팅에 내용을 추가할 생각이다.

반응형
Posted by 대네브 (deneb)

댓글을 달아 주세요