使用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所需的扩展。

源代码如下:


import random
import time
 
from paho.mqtt import client as mqtt_client
 
 
broker = '192.168.1.3'
port = 1883
topic = "testtopic/1"
# generate client ID with pub prefix randomly
client_id = f'python-mqtt-{random.randint(0, 1000)}'
 
 
def connect_mqtt():
    def on_connect(client, userdata, flags, rc):
        if rc == 0:
            print("Connected to MQTT Broker!")
        else:
            print("Failed to connect, return code %d\n", rc)
 
    client = mqtt_client.Client(client_id)
    client.on_connect = on_connect
    client.connect(broker, port)
    return client
 
 
def publish(client):
    while True:
        time.sleep(1)
        # 发送1-50之间的随机数
        msg = random.randint(1,50) 
        result = client.publish(topic, msg)
        # result: [0, 1]
        status = result[0]
        if status == 0:
            print(f"Send `{msg}` to topic `{topic}`")
        else:
            print(f"Failed to send message to topic {topic}")      
 
 
def run():
    client = connect_mqtt()
    client.loop_start()
    publish(client)
 
 
if __name__ == '__main__':
    run()

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

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

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

 

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

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

 

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TMS320VC5257H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值