[ESP8266의 LUA 개발] 10, MQTT는 클라이언트 연결 서버를 구축하여 원격 제어 계전기를 실현한다.
5637 단어 #ESP8266 학습
클라이언트 간에 투과된 실례
ESP8266
구축된 MQTT
클라이언트는 테마 방송을 구독한다는 메시지를 받고 직렬로 표시됩니다.동시에 1s
발표된 주제에 보내기 “1111”
init.lua
configwifissid = "qqqqq";
configwifipwd="11223344";
MqttUserString = "yang";
MqttPwdString = "11223344";
MqttIPString = "47.93.19.134";
MqttPort = 1883;
clientid = wifi.sta.getmac()
SubscribeTopic = "/pub"
PublishTopic = "/sub"
wifi.setmode(wifi.STATIONAP)
apcfg={}
apcfg.ssid=configwifissid
apcfg.pwd=configwifipwd
wifi.sta.config(apcfg)
wifi.sta.autoconnect(1)
mqttConnectedFlage = 0;
client = mqtt.Client(clientid, 120, MqttUserString,MqttPwdString)
tmr.alarm(3, 1000, 1, function()
client:connect(MqttIPString, MqttPort,ConnectSuccess,ConnectFailed)
print("connect......");
end)
function ConnectSuccess(client)
tmr.stop(3);
client:subscribe(SubscribeTopic, 0, subscribeSuccess)
print("connected")
--mqttClient = client;
mqttConnectedFlage = 1;
end
function ConnectFailed(client,reason)
mqttConnectedFlage = 0;
tmr.start(3)
print("failed reason: " .. reason)
end
function subscribeSuccess(client)
print("subscribeSuccess")
end
client:on("message", function(client, topic, message)
print(message);
end)
tmr.alarm(2, 1000, 1, function()
if mqttConnectedFlage == 1 then
client:publish(PublishTopic, "1111", 0,0)
end
end)
MQTT는 클라이언트를 구축하여 Relay=1 또는 Relay=0을 전송하여 원격 제어 계전기를 실현합니다!
init.lua
--[[
GPIO0--3
GPIO1--10
GPIO2--4
GPIO3--9
GPIO4--2
GPIO5--1
GPIO9--11
GPIO10--12
GPIO12--6
GPIO13--7
GPIO14--5
GPIO15--8
GPIO16--0
0--GPIO16 1--GPIO5 2--GPIO4 3--GPIO0 4--GPIO2
5--GPIO14 6--GPIO12 7--GPIO13 8--GPIO15 9--GPIO3
10--GPIO1 11--GPIO9 12--GPIO10
]]
configwifissid = "qqqqq";
configwifipwd="11223344";
MqttUserString = "yang";
MqttPwdString = "11223344";
MqttIPString = "47.93.19.134";
MqttPort = 1883;
clientid = wifi.sta.getmac()
SubscribeTopic = "/pub"
PublishTopic = "/sub"
RelayPin = 2
wifi.setmode(wifi.STATIONAP)
apcfg={}
apcfg.ssid=configwifissid
apcfg.pwd=configwifipwd
wifi.sta.config(apcfg)
wifi.sta.autoconnect(1)
print("dofile init.lua")
tmr.alarm(0, 3000, 0, function()
dofile("mqtt.lua");
print("dofile mqtt.lua")
end)
mqtt.lua
globalSendData ="nil";
globalSendData1="nil";
globalSendData2="nil";
UsartReceiveData="";
UsartReceiveDataCnt=0;
UsartReceiveDataCntCopy=0;
if file.open("relay.lua", "r") then
if file.read() == "relay=1" then
gpio.write(RelayPin,1)
gpio.mode(RelayPin,gpio.OUTPUT)
print("relay=1")
else
gpio.write(RelayPin,0)
gpio.mode(RelayPin,gpio.OUTPUT)
print("relay=0")
end
end
file.close()
Mymqtt = mqtt.Client(clientid, 120,MqttUserString, MqttPwdString);
tmr.alarm(3, 1000, 1, function()
Mymqtt:connect(MqttIPString, MqttPort, 0,ConnectSuccess,ConnectFailed)
end)
function ConnectSuccess(client)
client:subscribe(SubscribeTopic, 0, subscribeSuccess)
print("connected")
mqttClient = client;
tmr.stop(3);
mqttConnectedFlage = 1;
end
function ConnectFailed(client,reason)
mqttConnectedFlage = 0;
print("failed reason: " .. reason)
tmr.start(3)
end
function subscribeSuccess(client)
print("subscribe success")
end
Mymqtt:on("message", function(client, topic, data)
uart.write(0,data)
if data == "relay=0" then
gpio.write(RelayPin,0)
gpio.mode(RelayPin,gpio.OUTPUT)
if file.open("relay.lua", "w+") then
file.write("relay=0")
file.close()
end
elseif data == "relay=1" then
gpio.write(RelayPin,1)
gpio.mode(RelayPin,gpio.OUTPUT)
if file.open("relay.lua", "w+") then
file.write("relay=1")
file.close()
end
end
end)
tmr.alarm(4, 10, 1, function()
if mqttClient ~= nil and mqttConnectedFlage == 1 then
RelayNowState = gpio.read(RelayPin)
if RelayNowState ~= RelayNowStateCopy then
RelayNowStateCopy = RelayNowState
globalSendData1 = "relay="..RelayNowState
end
if globalSendData1~="nil" then
globalSendData=globalSendData1;
globalSendData1="nil"
elseif globalSendData2 ~="nil" then
globalSendData=globalSendData2;
globalSendData2="nil"
else
globalSendData="nil";
end
if globalSendData ~= "nil" then
mqttClient:publish(PublishTopic,globalSendData, 0, 0, function(client)
end)
end
end
if UsartReceiveDataCnt ~= 0 then
if UsartReceiveDataCntCopy == UsartReceiveDataCnt then
UsartReceiveDataCnt=0;
UsartReceiveDataCntCopy = 0;
globalSendData2 = UsartReceiveData;
UsartReceiveData="";
else
UsartReceiveDataCntCopy = UsartReceiveDataCnt;
end
end
end)
uart.setup(0, 115200, 8, uart.PARITY_NONE, uart.STOPBITS_1)
uart.on("data",0,function(data)
UsartReceiveData = UsartReceiveData..data;
UsartReceiveDataCnt = UsartReceiveDataCnt + 1;
end, 0)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rails Turbolinks를 페이지 단위로 비활성화하는 방법원래 Turobolinks란? Turbolinks는 링크를 생성하는 요소인 a 요소의 클릭을 후크로 하고, 이동한 페이지를 Ajax에서 가져옵니다. 그 후, 취득 페이지의 데이터가 천이 전의 페이지와 동일한 것이 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.