8226基于nodemcu通过mqtt协议发送接收消息

一过完年即将陷入一场恶战之中,可能无暇在玩这么多东西了,趁着过年把之前一直想搞的mqtt协议给玩一玩 。简单说一些mqtt协议:MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器(比如通过Twitter让房屋联网)的通信协议。采用消息队列遥测传输。可以预见MQTT即将成为下一代的物联网连接的规范性协议。我很看好这种协议。

点击打开链接,给一个中文版的协议。作为我们使用者来说,其实之中知道大概的原理性行性就好。简单来说他们的通信通过【主题(Topic)】来相互通信,比如A发布了一个主题叫(智能家居),BCDEF同时脸上了该服务器,BC定阅了(智能家居)这个主题,而DEF订阅可(户外设备)的主题,A发布一条消息"test",那么BC将会收到该条消息,而DEF则收不到该消息,总的来讲就是相同订阅者将收到在主题下推送的消息,而不同主题下则受不接受推送的消息。原理就是很简单。下面不罗嗦直接开搞。

 nodeMCU的固件提供了MQTT协议的API直接调用很是爽。固件网址

8226基于nodemcu通过mqtt协议发送接收消息_第1张图片

勾选上边的输入邮箱稍等一会编译好的固件就会发送给烧写进去开始敲代码。中间的N多步骤就省略了。

 gpio.mode(4, gpio.OUTPUT)
 wifi.setmode(wifi.STATIONAP)

apcfg={}
apcfg.ssid="路由器名称"
apcfg.pwd="路由器密码"
wifi.sta.config(apcfg)
wifi.sta.autoconnect(1)
flag=0
  
    
    
wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T)
 print("\n\tSTA - GOT IP".."\n\tStation IP: "..T.IP.."\n\tSubnet mask: "..
 T.netmask.."\n\tGateway IP: "..T.gateway)

 gpio.write(4,0)
m = mqtt.Client("king", 120)  --创建MQTT连接

 m:connect("192.168.2.216", 1883, 0, function(client)
   print("connected")
    client:subscribe("/topic", 0, function(client) print("subscribe success") end)  --发布一个为topic得到订阅
     client:publish("/topic", "hello", 0, 0, function(client) print("sent") end) --在该订阅下发布消息hello 
   end)

   m:on("message", function(client, topic, data)  --注册一个事件,如果得到消息,打印到串口
  print(topic .. ":" ) 
  if data ~= nil then
    print(data)
  end
end)

   
end  )





然后我们搭建一个MQTT的服务器,在这里我们选择EMQ官网 的,他们家的文档易用性和界面都是很酷炫。下载以后解压以后再在cmd中输入

即可运行MQTT服务器,在浏览器中输入127.0.0.1:18083,进入输入账户admin,密码为public。即可进入如下界面

8226基于nodemcu通过mqtt协议发送接收消息_第2张图片


还是很酷炫的。在webscoket中修改为如下配置

8226基于nodemcu通过mqtt协议发送接收消息_第3张图片


我们点击发送。把我们的8266程序运行后,

在屏幕上就可以获得我们在网页上发送的消息,MQTT协议成功通信。需要说明的是,MQTT服务器默认为匿名模式,所以不需要账户密码,当需要连接像阿里云腾讯云的与服务器需要获得服务器分配的账户密码!

美滋滋

                                                                                             -----------------------By king

你可能感兴趣的:(物联网)