当前位置:   article > 正文

EMQX(MQTT)----基本用法以及使用Python程序进行模拟流程_emqx使用

emqx使用

        EMQX是大规模分布式物联网MQTT消息服务器,除了发送接送的流量不能太大(不能用于生产!),在学习MQTT方面上有很大的优势的!

        在使用该协议时,主要需要弄懂的一个知识点就是“发布者”和“订阅者”的关系,在最简单的模型中,一般会含有以上两个角色,发布者不需要订阅任何id,只管设置自己的“话题”(Topic),当设置好话题后,订阅者则需要去订阅这个话题,便可以与发布者进行数据交互,具体框架如下所示:

 我可以先来创建一个MQTT Client!

首先需要到网上下载MQTTBox,然后打开软件,点击创建Client,然后再访问官网,获取公共接口:

mqtt官方网站点击此处即可访问官网!

然后你会看到这个:

 这个大家都是公用的,只需赋值Broker即可:

继续打开MQTTBox进行填写,只需要注意以下三点即可,名字(ClientName)是随意的。

 创建之后就有以下界面了,

 其中左边为发布者,右边为订阅者,发布者只管设置话题(图中我设置为了ObjectA),然后右边就订阅该话题即可(填入相同的话题名字),然后就可以点击Subscribe按钮进行订阅。然后回到发布者的左边界面,再Payload中可以填入想要发送的内容,最后再点击Publish按钮便可以将消息发送,成功的效果图如下:

 右边会有左边发布者传来的数据。

主要流程就是:发布者发布消息,然后订阅者订阅发布者的话题,双方即可实现通讯。

依据这个原理,我们可以通过python来实现这一过程,但是首先需要准备两个东西!

1.需要下载emqx的zip包zip包下载点击即可

注意:有些电脑可能下载5.0.x版本会启动失败,建议直接下载4.4.x版本。

2.python需要安装依赖库,在cmd中输入:

pip install paho-mqtt

网络也有一些镜像,可以用镜像下载更快!

准备完以上工具便可开始:

        先要在本地启动emqx的服务:只需要将上面下载的zip包解压之后,通过cmd进入该解压后的路径,然后进入到里面的/bin路径下,然后输入指令:

emqx start

         当完成流程不想再操作后,可以使用以下命令关闭该服务:

emqx stop

 这样即成功!

可以打开浏览器进行查看:在输入栏中输入:127.0.0.1:18083,后输入账号密码,默认为:{账号:admin,密码:public}(可能会让你更改密码,根据提示更改即可)而后会进入以下界面:

 到这里就可以开始我们的python编码了,以下为python的完整编码:

分两个板块:

1.发布者:

  1. import random
  2. import time
  3. import paho.mqtt.client as mqtt_client
  4. topic = "/python/mqtt"//创建话题,可以自定义
  5. client_id = f'python-mqtt-{random.randint(0, 100)}'//获取随机id(可以自行选择)
  6. def publish(client)://发布的核心方法
  7. msg_count = 0
  8. while True:
  9. time.sleep(1)
  10. msg = f"messages: {msg_count}"//发送的消息(message)
  11. result = client.publish(topic, msg)//调用库中方法public()进行发布,会返回一个列表
  12. status = result[0]//列表的第一个元素返回的是请求是否成功,然后作判断
  13. if status == 0:
  14. print(f"Send `{msg}` to topic `{topic}`")
  15. else:
  16. print(f"Failed to send message to topic {topic}")
  17. msg_count += 1
  18. def connect_mqtt():
  19. def on_connect(client, userdata, flags, rc):
  20. if rc == 0:
  21. print("Connected to MQTT Broker!")
  22. else:
  23. print("Failed to connect, return code %d\n", rc)
  24. client = mqtt_client.Client(client_id)
  25. client.on_connect = on_connect
  26. client.connect(host='127.0.0.1', port=1883)//此处不需要更改,都为默认
  27. return client
  28. def run():
  29. client = connect_mqtt()
  30. client.loop_start()
  31. publish(client)
  32. if __name__ == '__main__':
  33. run()

2.订阅者

  1. import random
  2. from paho.mqtt import client as mqtt_client
  3. topic = "/python/mqtt"
  4. client_id = f'python-mqtt-{random.randint(0, 100)}'
  5. def connect_mqtt() -> mqtt_client:
  6. def on_connect(client, userdata, flags, rc):
  7. if rc == 0:
  8. print("Connected to MQTT Broker!")
  9. else:
  10. print("Failed to connect, return code %d\n", rc)
  11. client = mqtt_client.Client(client_id)
  12. client.on_connect = on_connect
  13. client.connect(host='127.0.0.1', port=1883)
  14. return client
  15. def subscribe(client: mqtt_client):
  16. def on_message(client, userdata, msg):
  17. print(f"Received `{msg.payload.decode()}` from `{msg.topic}` topic")
  18. client.subscribe(topic)
  19. client.on_message = on_message
  20. def run():
  21. client = connect_mqtt()//创建mqtt对象
  22. subscribe(client)
  23. client.loop_forever()//表示永久等待发布者发布消息
  24. if __name__ == '__main__':
  25. run()

然后依次运行以上模块,可以看到以下结果:

发布者: 

订阅者:

 

 还可以通过127.0.0.1:18083来看到两个接入成员:

         以上便是对emqx的一些基本操作的演示和介绍,当然通过emqx还可以实现更多方式的互联,需要我们去探索和实现。还可以是不同地设备,如树莓派,esp系列,让单片机开发的成本可以减少服务器的支出,对学习起到帮助作用。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/188551
推荐阅读
相关标签
  

闽ICP备14008679号