nodemcu를 사용하여 사물인터넷 시리즈를 돌려보기(7): notemcu는 mqtt 프로토콜'구독 기능'을 통해 onenet 장치의'스위치'를 실현한다
15458 단어 nodemcu
gpio.mode(2,gpio.OUTPUT)
wifi.setmode(wifi.STATION)
cfg = {}
cfg.ssid = "kyn"
cfg.pwd = "20160118"
wifi.sta.config(cfg)
wifi.sta.connect()
DeviceId = "587667371"
ProductId = "325428"
AuthoInfo = "test"
host = "183.230.40.39"
port = 6002
url = 'http://api.heclouds.com/devices/'..DeviceId..'/datapoints?type=3'
headers = 'api-key:BO6XuBiKw07JRXakBNvn4JKX7MI=\r
'
dht_pin = 5
--led
led_pin = 3
gpio.mode(dht_pin,gpio.INPUT)
gpio.mode(led_pin,gpio.OUTPUT)
timer = tmr.create()
function con()
if wifi.sta.getip() == nil then
print("coneting........")
else
timer:stop()
print("success!~")
gpio.write(2,gpio.HIGH)
print(wifi.sta.getip())
client_hum = mqtt.Client(DeviceId,120,ProductId,AuthoInfo)
client_hum:connect(host,port,0,function(client)
print("connect success!")
end)
function h()
status,temp,humi,temp_dec, humi_dec = dht.read11(dht_pin)
print("DHT Temperature:"..temp..";".."Humidity:"..humi)
-- :
client_hum:subscribe("$dp",0, function(client)
print("subscribe success")
end)
-- onenet“ ” on/off
client_hum:on("message", function(client,topic,message)
print(message)
if(message == "1") then
gpio.write(led_pin,gpio.HIGH)
else
gpio.write(led_pin,gpio.LOW)
end
end)
-- http.post(url, headers, '{"DHT Temperature":'..temp..',"Humidity":'..humi..'}', function(code,date)
-- if(code < 0) then
-- print("HTTP request failed")
-- else
-- print(code,date)
-- end
-- end)
weather = {}
weather.Temperature = temp
weather.Humidity = humi
state,weather_message = pcall(sjson.encode,weather)
--mqtt:publish(topic, payload, qos, retain[, function(client)])
payload = string.char(3,0,string.len(weather_message))..weather_message
client_hum:publish("$dp", payload, 0, 0, function(client)
print("upload success!~")
end)
end
tmr.create():alarm(1500,tmr.ALARM_AUTO,h)
end
end
timer:alarm(1000,tmr.ALARM_AUTO,con)