2021-9-25 MQTT 阿里云服务器 esp32 micropython物联 以及pythonPC端
MQTT这个并不太复杂,逻辑简单组件零碎,记录下
- 去官网下个对应版本的现成的服务器 https://www.emqx.io/downloads
- 进入bin目录,启动服务器:
/bin/emqx start
这里有个坑,如果服务器版本是WINDOWS 2019 数据中心的云服务器镜像则会提示少.DLL 解决办法下载是 2013的C++ redist (别下高版本的2015)下载地址为
https://www.microsoft.com/zh-CN/download/details.aspx?id=40784
启动后在浏览器中输入
http://IP地址:18083
打开控制台,如果本机IP就是127.0.0.1,如果是云服务器则注意将服务器安全组里边的18083端口打开。
默认管理账号:admin 密码:public , 界面里还可以将界面设置成中文很友好
打开阿里云安全组的1883端口 用来订阅和发布,也就是具体干活的端口
如果使用官方网站上那个调试程序
还要在云服务器上打开8083端口才能使用。
EMQ X 默认提供 5 个 Listener,它们将占用以下端口:
端口 说明
1883 MQTT/TCP 协议端口
11883 MQTT/TCP 协议内部端口,仅用于本机客户端连接
8883 MQTT/SSL 协议端口
8083 MQTT/WS 协议端口
8084 MQTT/WSS 协议端口
下面分别是PC最简程序和ESP32最简程序的写法
1. pc端
pip install paho-mqtt
发送端的写法
import paho.mqtt.client as mqttdef 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 mqttdef 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() # 阻塞并保持连接
关于连接超时 loop(),这个有点像心跳包也有点像喂狗函数反正就是规定时间内要么发数据或者执行下loop()
tips:闭坑指南,这个KEEPALIVE 时间间隔,不应该设置过大,参照官方客户端的60秒比较稳妥,600秒这个设置,我在分钟级进行了测试,发现会侦听重连而且一旦重连收不到订阅。
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
当然像之前的写法直接阻塞也是可以的.
tips闭坑指南:在云服务器上运行订阅端不能在死循环里写个PASS就完事,他会耗尽CPU的,要适当的睡眠让服务器调度资源降低CPU占用率。
2.ESP32上的写法
首先要让ESP32联网
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()
然后配置MQTT
将下面的库存为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:continuebreakself.mqtt_mast.set_callback(self.recdate1)# 绑定回调函数,名字别错for i in list_sub:self.mqtt_mast.subscribe(i)#设置订阅的主体,这里是123def recdate1(self,t,m):#这是回调函数,有信息并触发后都在这里执行###############我就是填充业务逻辑的地方###############print("我在这里运行",t,m)##################################################
if __name__=='__main__':#from mqtt1 import Mqtt_runa=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) #延时,别刷屏
这里贴个连接,是关于micropython的MQTT库的一些说明:
https://www.cnpython.com/pypi/micropython-umqttsimple
模块端完毕然后是下一步的补充。~
3、在服务端启动验证
首先在后台管理端选插件选项,然后启动
emqx_auth_mnesia
使其运行。
然后在器目录下寻找
emqx\etc\emqx.conf
后缀为。conf 的文件并打开
在文件内部查找
allow_anonymous = false # False # 这是关闭准许匿名 注意false是全小写
acl_nomatch = deny #这个改成这样
tips:闭坑指南 这里更改尽量使用专业的编辑器,记事本之类的打开修改可能造成编码问题无法解析第一行第一列的提示,使用WINDOWS云服务器一般远程都没有好的编辑器那就弄回来改再传上去。
重启MQTT服务器
然后在BIN 目录下
查询用户,没有则空
emqx_ctl user list
下面是添加用户
emqx_ctl user add 用户名 密码
修改用户密码
emqx_ctl user update 用户名 密码 #将用户名的密码更新为新密码
删除用户
emqx_ctl user del 用户名
写在最后,别忘记重启服务器。
2021-9-25 MQTT 阿里云服务器 esp32 micropython物联 以及pythonPC端相关推荐
- 阿里云服务器上搭建微信小程序服务端环境。
无论是搭建个人博客空间也好,微信小程序也罢,搭建环境必需的两点:云服务器.域名,下面一步步给搭建演示如果在一台阿里云服务器上搭建微信小程序服务端环境. 1.云服务器准备:可在阿里云购买ECS服务器 ...
- Node项目部署到阿里云服务器(ECS),以Nuxt.js服务端渲染项目为例
1.前言 最近打算业余时间搭个网站,选择的技术栈为node+mongodb+Nuxt.js(基于vue,用于创建服务端渲染 (SSR) 应用),以下不会教科书式讲解,只是提供整体思路.参考资料以及关键 ...
- 服务器布署(一):阿里云服务器,配合宝塔使用(网页端宝塔)
宝塔面板的使用 一.Linux服务器(宝塔) 配置:nginx + nodejs + linux + 宝塔 1.常用pm2命令 -- 单页运行(不需要启动项) node xxx 单页项目测试 pm2 ...
- 微信小程序初体验,入门练手项目--通讯录,后台是阿里云服务器(一)
内容: 一.前言 二.相关概念 三.开始工作 四.启动项目起来 五.项目结构 六.设计理念 七.路由 八.部署线上后端服务 同步交流学习社区: https://www.mwcxs.top/page/4 ...
- 阿里云服务器能做小程序吗
阿里云服务器对做小程序,app端,电脑pc端支持,也非常好用,绝大多数都认为阿里云的用起来更方便. 阿里云服务器对建网站,运行游戏等都是支持的. 阿里云服务器从选配置----服务器控制台使用----- ...
- 从零讲起:ESP32+Micropython+MQTT阿里云物联网
ESP32+Micropython+MQTT阿里云物联网 前言 一.ESP32是什么? 二.Micropthon开发环境搭建 1.ESP32串口驱动下载与安装 三.IDE工具下载及使用说明 1.IDE ...
- 阿里云服务器发送邮件失败?连接超时?25端口被封?
大家好,我是烤鸭: 之前用阿里云服务器的时候发送126企业邮箱,用的smtp方式,但是一直超时.百思不得其解.因为在本地环境是可以的. 原来是阿里云服务器限制了25端口.问了126邮箱那边的技术客服, ...
- 阿里云服务器Ubuntu系统搭建mqtt服务器
本文为在阿里云服务器系统为Ubuntu18.04上搭建mqtt物联网平台笔记文章,仅供参考. 1.下载安装包,可以官网下载安装包然后上传,也可以直接使用命令下载,选择合适的版本 下载 emqx-ubu ...
- 新手小白如何购买阿里云服务器(2021新版详细图文教程)
新手小白如何购买阿里云服务器(2021年新版详细教程) 首先,打开阿里云官网,选择"产品"-"云服务器ECS",点击"立即购买". 可以看到 ...
最新文章
- MySQL 每秒57万的写入,带你飞呀!
- 我的世界java版联机不稳定_完善自己:“联机版游戏玩家”如何通过社交完善自己,这个社交跟你想的也许不一样1.0...
- POJ 3233 Matrix Power Series (矩阵分块,递推)
- 2019深圳杯获奖论文_2019年第六届深圳南山杯全国手风琴网络邀请赛获奖名单、成绩公布!...
- 转:Google论文之三----MapReduce
- 企业微信怎么删除好友 企业微信如何删除成员
- Gtk实现GUI键盘并终端显示
- SCDN的抗CC攻击和抗DDoS攻击防护是什么?
- power automate desktop获取股票网页数据
- Python3使用xpath爬取豆丁网文档
- matlab获取全局变量的值_全局变量在几个函数及Matlab函数中都能使用的变量.PPT...
- 使用css美化checkbox
- HTML5制作个人理财系统,个人股票理财专题页面html模板
- 联通电信校园促销加码 策略更隐蔽
- OpenGL地球(自转+贴图)
- nyoj 独木舟上的旅行
- 90%的人都浪费了阳台?这6种装修方案建议照搬~
- MongoDB数据库的简介与安装步骤
- 常用的几个测试网络连接的命令
- Python练习-2