使用python+EMQX+花生壳实现外网中实现MQTT传输信息

一、引言

随着物联网(IoT)技术的飞速发展,MQTT(Message Queuing Telemetry Transport)协议因其轻量级、发布/订阅模式以及良好的扩展性,在物联网通信领域得到了广泛的应用。EMQX作为一款开源的MQTT消息代理,凭借其高性能、易扩展和丰富的功能,成为了搭建MQTT服务器的理想选择。本文将详细介绍如何使用EMQX搭建MQTT服务器。

二、EMQX简介

EMQX是一款基于Erlang/OTP平台开发的MQTT消息代理,支持大量并发连接和海量消息吞吐,适用于各种物联网场景。EMQX提供了丰富的功能,包括认证授权、规则引擎、集成插件等,能够轻松实现MQTT消息的接入、处理和转发。

三、安装与配置EMQX

可以从EMQX官网下载对应版本的安装包,根据官方文档进行安装。安装完成后,可以通过命令行或图形界面启动EMQX服务。

1.根据自己的系统下载对应的版本就好,安装并且启动

官方下载地址:https://www.emqx.io/zh

该网址需要科学上网,博主准备好了相关资料的下载地址需要的使用迅雷进行下载

迅雷链接:http://分享文件:EMQX资料 链接:https://pan.xunlei.com/s/VNvZe6zO8dMnY1JUz68SkInqA1# 提取码:vctj 复制这段内容后打开手机迅雷App,查看更方便

2.参考这位博主的笔记进行安装:https://blog.csdn.net/weixin_41542513/article/details/134328627

3.完成使用EMQX在局域网中进行MQTT协议的数据传输

4.如果在启动时报错emqx启动报错“Unable to load emulator DLL、node.db_role = EMQX_NODE__DB_ROLE = core”是提示安装C++,安装我的资料包中的OPT软件就好了

四、发送端搭建-使用python向EMQX发送数据

import time
from paho.mqtt import publish
#import collections
#collections.Iterable = collections.abc.Iterable


HOST ="127.0.0.1"   #服务器地址
PORT =1883          #端口号
#客户端名称 不同的链接需要端口不一样,可以自己填入也可以使用下面的代码自动生成时间作为客户端ID
client_id = "mqttx_4ae0b41b"
# client_id = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
Topic = "MQTTPUSH"  #发送的主题
username = "MQTT2"  #账号 
password = "123456" #密码

if __name__ == '__main__':
    print("准备发送信息")
    for i in range(200):
        time.sleep(0.1)
        publish.single("MQTTPUSH","编号:"+str(i)+"  "+str(time.strftime('%Y.%m.%d-%H:%M:%S', time.localtime(time.time()))), qos = 1, hostname = HOST, port = PORT, client_id = client_id,
                       auth = {'username':username, 'password': password})
        print(str(time.strftime('%Y.%m.%d-%H:%M:%S', time.localtime(time.time())))+"发送"+str(i+1)+"条消息")

python如果报错“module 'collections' has no attribute 'Iterable'”这意味着collections模块并没有一个名为Iterable的属性或类。Iterable是一个内置的abc(抽象基类)类型,它定义了一个可以迭代的对象的接口。在Python中,你可以直接从collections.abc模块中导入Iterable,而不是从collections模块。

在程序中添加这一行代码就好了,删除列程中的注释

import collections
collections.Iterable = collections.abc.Iterable

上面的参数不知道怎么填的,就是对应下面说划线的参数

 运行结果:每隔时间向指定服务器发送时间信息,MQTTX中主题接收成功

 五、接收端搭建-接受EMQX服务器中的数据

import paho.mqtt.client as mqtt
import time



HOST ="127.0.0.1"
PORT =1883
client_id = "mqttx_4ae0b41c"  # Client_id 不能重复,需要更改,或者使用时间自己产生
# client_id = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
Topic = "MQTTPUSH"             #订阅主题
username = "MQTT2"
password = "123456"


def on_connect(client,userdata, flags,rc):
    print("Connected with result code" + str(rc))
    client.subscribe(Topic)


def on_message(client,userdata,msg):
    print(msg.topic+ msg.payload.decode("utf-8") + "接收时间:"+str(time.strftime('%H:%M:%S', time.localtime(time.time())) ))

def client_loop():
    client = mqtt.Client(client_id)
    client.username_pw_set(username,password) # 必须设置,否则会返回 /Connected with result code 4/
    client.on_connect = on_connect
    client.on_message = on_message


    try:
        client.connect(HOST,PORT,60)
        client.loop_forever()
    except KeyboardInterrupt:
        client.disconnect()

if __name__ == '__main__':
    print("这是接受端")
    client_loop()

运行结果:

 五、内网穿透-使用花生壳软件实现外网的访问

花生壳是一款具备内网穿透和动态域名解析功能的软件,主要为没有公网IP或动态公网IP用户,提供简单、高效、稳定、安全的远程访问服务。通过云服务器快速与内网服务器建立连接,同时把内网端口映射到云端,实现各类局域网应用基于域名的互联网访问。花生壳能够实现反向代理应用,支持TCP、UDP、HTTPS协议,端到端的TLS加密通信,黑白名单防黑验证等,支持外网设备穿透各种复杂的路由和防火墙访问到内网的应用。

1.下载安装花生壳软件

官网地址:花生壳下载地址

2.添加映射

旋转TCP应用

3.将内网中127.0.0.1 1883端口进行端口的映射

画红线的为IP地址,画绿线的为端口 

 4.更改之前python中的IP地址和端口,其他不变就可以完成外网的数据的传输

  • 49
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 你可以使用 Python 的 paho-mqtt 库来实现 MQTT 协议的数据传输。首先,需要安装 paho-mqtt 库,可以使用 pip 命令进行安装。然后,可以使用以下代码来实现 MQTT 的数据传输: ```python import paho.mqtt.client as mqtt # 连接到 MQTT 服务器 client = mqtt.Client() client.connect("mqtt.example.com", 1883) # 发布消息 client.publish("topic", "message") # 订阅消息 def on_message(client, userdata, message): print(message.topic, message.payload) client.subscribe("topic") client.on_message = on_message # 循环监听消息 client.loop_forever() ``` 其,"mqtt.example.com" 是 MQTT 服务器的地址,"topic" 是消息的主题,"message" 是消息的内容。使用 publish 方法可以发布消息,使用 subscribe 方法可以订阅消息。在 on_message 方法可以处理接收到的消息。最后,使用 loop_forever 方法可以循环监听消息。 ### 回答2: 使用PythonMQTT库可以很容易地实现数据传输。下面是一个简单的步骤: 第一步:安装MQTT使用pip命令安装PythonMQTT库,例如paho-mqtt库: pip install paho-mqtt 第二步:引入MQTT库 在Python脚本的开头,引入MQTT库: import paho.mqtt.client as mqtt 第三步:创建MQTT客户端 创建一个MQTT客户端对象,并设置连接的参数: mqtt_client = mqtt.Client(client_id="Client1") # 设置客户端ID mqtt_client.username_pw_set(username="username", password="password") # 设置用户名和密码 mqtt_client.connect(host="mqtt.example.com", port=1883) # 连接到MQTT代理服务器 第四步:定义回调函数 定义一些回调函数,用于处理收到的消息、连接状态等: def on_connect(client, userdata, flags, rc): print("Connected with result code "+str(rc)) client.subscribe("topic/test") # 订阅主题 def on_message(client, userdata, msg): print(msg.topic+" "+str(msg.payload)) # 处理收到的消息 mqtt_client.on_connect = on_connect mqtt_client.on_message = on_message 第五步:循环监听 使用mqtt_client.loop_forever()方法,持续监听来自MQTT代理服务器的消息并执行回调函数: mqtt_client.loop_forever() 第六步:发送消息 使用mqtt_client.publish()方法发送消息: mqtt_client.publish("topic/test", "Hello, MQTT!") # 发布消息到主题 通过以上步骤,就可以使用PythonMQTT实现数据传输了。注意,具体的配置参数和主题需要根据实际情况进行修改。 ### 回答3: 使用Python MQTT库可以轻松实现数据传输。以下是使用Python MQTT实现数据传输的步骤: 1. 安装MQTT库:使用pip命令安装Python MQTT库,例如paho-mqtt。 2. 导入MQTT库:在Python脚本导入paho-mqtt库。 3. 建立MQTT连接:使用MQTT客户端对象建立与MQTT代理服务器的连接。可以指定代理服务器的地址和端口号以及可选的用户名和密码。 4. 订阅主题:使用MQTT客户端对象订阅一个或多个主题。主题是消息的目标地址,当代理服务器接收到相关消息时,将把该消息传递给所有订阅该主题的客户端。 5. 发布消息:使用MQTT客户端对象发布消息到一个特定的主题。消息可以是字符串、整数、浮点数等。 6. 处理接收到的消息:编写回调函数来处理接收到的消息。当客户端接收到消息时,回调函数将被触发并执行相应的操作。可以在回调函数处理所接收到的消息数据。 7. 保持连接并处理循环:在连接建立后,使用MQTT客户端对象的循环函数来保持连接,并处理接收到的消息。循环函数将设置一个循环以等待新消息的到来,并且还会处理与MQTT代理服务器的连接状态。 8. 断开连接:在不需要继续使用MQTT连接时,使用MQTT客户端对象的断开连接函数来关闭与MQTT代理服务器的连接。 通过按照上述步骤,可以使用Python MQTT库来实现数据的传输。记住,在实际应用,需要确定合适的MQTT代理服务器地址、主题名称和消息内容,以确保正确传输数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值