赞
踩
MQTT这个并不太复杂,逻辑简单组件零碎,记录下
/bin/emqx start
https://www.microsoft.com/zh-CN/download/details.aspx?id=40784
http://IP地址:18083
EMQ X 默认提供 5 个 Listener,它们将占用以下端口:
端口 说明
1883 MQTT/TCP 协议端口
11883 MQTT/TCP 协议内部端口,仅用于本机客户端连接
8883 MQTT/SSL 协议端口
8083 MQTT/WS 协议端口
8084 MQTT/WSS 协议端口
下面分别是PC最简程序和ESP32最简程序的写法
pip install paho-mqtt
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
print("Connected with result code: " + str(rc))
def on_message(client, userdata, msg):
print(msg.topic + " " + str(msg.payload))
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.username_pw_set('esp32', password='esp32') #需要验证账号密码就带上这句,准许匿名就不带这句
client.connect('ip地址', 1883, 600) # 600为keepalive的时间间隔,也就是发布周期,一般来说一次连接保证在发布周期内再次发送即可确保不掉线。
client.publish('esp32', payload='wo shi nei rong ', qos=0)#前边是主题 后边是消息
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
print("Connected with result code: " + str(rc))
def on_message(client, userdata, msg):
print(msg.topic + " " + str(msg.payload))
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.username_pw_set('esp32', password='esp32') #这里也是:需要验证账号密码就带上这句,准许匿名就不带这句
client.connect('ip地址', 1883, 600) # 600为keepalive的时间间隔
client.subscribe('esp32', qos=0)#前边是主题
client.loop_forever() # 阻塞并保持连接
client.connect('127.0.0.1', 1883, 5) # keeplive仅为5秒
for i in range(100):
client.publish('fifa', payload=f'amazing{i}', qos=0)
# client.loop() # 或者loop()
time.sleep(4) # 不能超过5秒
对于订阅客户端,一种方法是使用loop_start()保持连接,然后写个死循环阻塞程序,保持监听。
client.connect('127.0.0.1', 1883, 5)
client.subscribe('fifa', qos=0)
client.loop_start()
while True:
pass
import time
import network
wl=network.WLAN(network.STA_IF)
wl.active(True)
def lan_on_off():
if wl.isconnected()==0:
while wl.isconnected()==0 :
wl.connect('300king','13704677369')
time.sleep(10)
lan_on_off()
将下面的库存为mqtt1.py
然后主函数安装程序底部方式调用,唯一要注意的是:如果仅仅是发送数据那就调用库就行,但是如果要接收消息,那么要在这个类的处理函数位置填充业务逻辑代码的,(作为一个传感器,应该没啥复杂逻辑,也就几行知道在哪填就行)
from umqtt.simple import MQTTClient import time class Mqtt_run(): def __init__(self,CLIENT_ID,ip,name_id,password,list_sub):# 设备名 , 服务器地址,端口 , 账号, 密码,订阅列表 self.mqtt_mast=MQTTClient(CLIENT_ID,ip,1883,name_id,password) while 1: try: self.mqtt_mast.connect() except: continue break self.mqtt_mast.set_callback(self.recdate1)# 绑定回调函数,名字别错 for i in list_sub: self.mqtt_mast.subscribe(i)#设置订阅的主体,这里是123 def recdate1(self,t,m):#这是回调函数,有信息并触发后都在这里执行 ###############我就是填充业务逻辑的地方############### print("我在这里运行",t,m) ################################################## if __name__=='__main__': #from mqtt1 import Mqtt_run a=Mqtt_run('cam','xx.xx.x.x','esp32','esp32',['123','456']) #设备名 , 服务器地址,端口 , 账号, 密码,订阅列表 while 1: a.mqtt_mast.check_msg() #轮询消息,主函数中周期越快越好,没这个就听不叫了 a.mqtt_mast.publish('456','fffad') # *****前边是发往哪个主题,后面是内容 发送数据***************************** time.sleep(5) #延时,别刷屏
首先在后台管理端选插件选项,然后启动
emqx_auth_mnesia
使其运行。
然后在器目录下寻找
emqx\etc\emqx.conf
后缀为。conf 的文件并打开
在文件内部查找
allow_anonymous = false # False # 这是关闭准许匿名 注意false是全小写
acl_nomatch = deny #这个改成这样
然后在BIN 目录下
查询用户,没有则空
emqx_ctl user list
下面是添加用户
emqx_ctl user add 用户名 密码
修改用户密码
emqx_ctl user update 用户名 密码 #将用户名的密码更新为新密码
删除用户
emqx_ctl user del 用户名
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。