使用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.youkuaiyun.com/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地址和端口,其他不变就可以完成外网的数据的传输

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值