码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 使用python编写mqtt客户端向EMQX服务器发送数据


    摘要:本文介绍如何用python编写一个mqtt客户端向EMQX服务器发送数据,实现一个简易的本地物联网服务器。

     上一篇文章讲到使用mqtt.fx软件来发布消息。

    (1条消息) 使用mqtt.fx向EMQX服务器发送消息_TMS320VC5257H的博客-CSDN博客icon-default.png?t=M85Bhttps://blog.csdn.net/youngwah292/article/details/127941436?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22127941436%22%2C%22source%22%3A%22youngwah292%22%7D

    但是它有一个缺点,就是暂时没有定时发送的功能,只能手动发送。在输入框中写入一个什么信息,就发送一个信息。如果想发送一些自动生成的信息,就有点困难了。

     操作的步骤参考CSDN博主qilei2010的文章

    【Python】使用paho-mqtt库实现MQTT监听和收发_qilei2010的博客-CSDN博客icon-default.png?t=M85Bhttps://blog.csdn.net/qilei2010/article/details/122953569他的文章转自知乎

    如何在 Python 中使用 MQTT - 知乎

    核心内容就是使用python编写一个paho客户端。这是一种通用的客户端,还可以用在安卓系统编程,让手机成为一个MQTT客户端。

    编程之前,需要首先下载库。使用Windows下的客户端,或者使用vscode客户端输入下面这个指令,就可以完成安装。

    pip3 install -i https://pypi.doubanio.com/simple paho-mqtt

    下图是vscode软件安装paho的界面,安装速度很快。

     安装完paho之后,就可以编写python程序了,本文使用的软件是vscode,默认大家都已经配置完成python所需的扩展。

    源代码如下:

    1. import random
    2. import time
    3. from paho.mqtt import client as mqtt_client
    4. broker = '192.168.1.3'
    5. port = 1883
    6. topic = "testtopic/1"
    7. # generate client ID with pub prefix randomly
    8. client_id = f'python-mqtt-{random.randint(0, 1000)}'
    9. def connect_mqtt():
    10. def on_connect(client, userdata, flags, rc):
    11. if rc == 0:
    12. print("Connected to MQTT Broker!")
    13. else:
    14. print("Failed to connect, return code %d\n", rc)
    15. client = mqtt_client.Client(client_id)
    16. client.on_connect = on_connect
    17. client.connect(broker, port)
    18. return client
    19. def publish(client):
    20. while True:
    21. time.sleep(1)
    22. # 发送1-50之间的随机数
    23. msg = random.randint(1,50)
    24. result = client.publish(topic, msg)
    25. # result: [0, 1]
    26. status = result[0]
    27. if status == 0:
    28. print(f"Send `{msg}` to topic `{topic}`")
    29. else:
    30. print(f"Failed to send message to topic {topic}")
    31. def run():
    32. client = connect_mqtt()
    33. client.loop_start()
    34. publish(client)
    35. if __name__ == '__main__':
    36. run()

    使用vscode右键“在交互式窗口中运行当地文件”。

     观察运行效果,首先提示已经连接到MQTT服务器了。如果连接不成功,那么就提示"Failed to connect, return code"。接着就提示发送的数据是什么,发送到哪个主题。下图显示的是发送1-50之间的随机数。

    现在回到EMQX管理端,通过websocket客户端观察到发送过来的数据。至此实验成功。

     

     从此实验可以看出,MQTT的客户端有很多种,从常见的MQTT.FX,到python客户端,从无代码,到寥寥数十句,都能实现。

    核心的原理都是通过客户端订阅和发布消息。如果一个消息被多个客户端订阅,那么无论哪个客户端将该主题做出更改,所有订阅到该主题的客户端将全部接到这个指令。如下图所示,当MQTT.FX也订阅了该主题之后,如果python客户端向服务器发送指令,那么mqtt.fx客户端也同时显示这些数据。这就是MQTT通信的乐趣和优势。

     

  • 相关阅读:
    Java:Jar包反编译,解压和压缩
    Mybatis-Plus使用@TableField实现自动填充日期
    LeetCode 146:LRU 缓存
    阿里内部Java岗位面试笔记“狂刷29天”成功斩获17个Offer
    C语言-结构体(7)
    Flink测试资源异常总结及checkpoint机制
    JS中执行上下文和执行栈是什么?
    【SDV让汽车架构“和而不同”】
    公众号自定义菜单(含个性化)
    面试官:Dubbo怎么实现服务降级,他有什么好处?
  • 原文地址:https://blog.csdn.net/youngwah292/article/details/127941767
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号