ESP8266 /ESP32 连接到自己的MQTT服务器并实现自动重连 基于micropython
Posted Kamimiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ESP8266 /ESP32 连接到自己的MQTT服务器并实现自动重连 基于micropython相关的知识,希望对你有一定的参考价值。
工作准备:
- python3.7
- 一定量的python基础
- uPyCraft IDE 下载地址
- ESP32或ESP8266开发板
- MQTT服务器 (本教程没有建立MQTT服务器的教程)
下载固件:
连接板子: Tools → Serial→连接板子的COM端
Tools → board 选择你自己的板子型号
Tools → BurnFirmware 下载固件
建议新手直接默认参数然后下载
建立工程:
左侧是工程的文件树
文件夹名 | 功能 |
---|---|
device | 板子flash里的文件 |
sd | sd卡里的文件 |
uPy_lib | micropython常用库 |
workSpace | 工作区 |
第一次打开uPyCraft IDE时,workSpace路径并不存在,当用户点击workSpace时,会弹出路径选择对话框,选择好需要存放的路径,点击“选择文件夹”,即可创建workSpace目录
File→Examples里面还有很多例程可以借鉴
工作区建立好后:
我们去github下载一个mircopython官方的mqtt库 下载地址
(为什么又从github上下载一个库呢,软件不是自带吗?)
把simple.py复制一份到workSpace目录下
然后建立一份main.py
- 如果要实现开机自动运行代码,程序一般都是放在main.py里,ESP开机后会先运行boot.py,然后自动运行main.py里的代码
- 开机配置代码:
import machine
machine.freq() # get the current frequency of the CPU
machine.freq(160000000) # ESP8266设置CPU频率到 160 MHz 如果是ESP32就改成machine.freq(240000000)
from simple import MQTTClient #从simple引入MQTTClient类
import time
from machine import Timer #系统定时器
from micropython import const
连接WIFI
WQTT_START = 1
SSID="KAMI123" #WIFI ID
PASSWORD="Q123" #WIFI PASSWORD
def connectWifi(SSID,PASSWORD):
global wlan
wlan=network.WLAN(network.STA_IF) #创建wlan对象
wlan.active(True) #激活网络接口
wlan.disconnect() #断开最后连接的WiFi
wlan.connect(SSID,PASSWORD) #连接WIFI
print("*********WIFI LOADING*********")
time.sleep(0.1)
while(wlan.ifconfig()[0]=='0.0.0.0'):
time.sleep(1)
while wlan.isconnected() == False: #等待连接成功
pass
print("*********WIFI OK*********")
connectWifi(SSID,PASSWORD)
写完后把文件拖到device区就可以自动下载,重启板子生效
连接成功的话串口调试助手会返回 WIFI OK字样 接下来我们可以尝试连接MQTT服务器了
连接MQTT服务器
保存用户变量
CLIENT_ID = "设备ID"
TOPIC = b"主题"
username='MQTT用户名'
password='MQTT用户密码'
server = "MQTT服务器IP或域名 看网站要求"
def restart_and_reconnect(): #重启开发板
print('Failed to connect to MQTT broker. Reconnecting...')
time.sleep(10)
machine.reset()
def login_wqtt(CLIENT_ID,server,TOPIC,username,password): #连接MQTT服务器
c = MQTTClient(CLIENT_ID, server,0,username,password,keepalive=60)
c.set_callback(sub_cb) #set callback
c.connect() #connect mqtt
c.subscribe(TOPIC) #client subscribes to a topic
print("Connected to:%s, subscribed to:%s topic" % (server, TOPIC))
print ("*********Star1********")
time.sleep(0.1)
return c
try:
client=login_wqtt(CLIENT_ID,server,TOPIC,username,password)
time.sleep(0.1)
print ("*********Star2********")
except OSError as e:
restart_and_reconnect()
OSError这里不懂可以去看python异常处理
接下来下载程序,重启开发板
串口返回代表成功连接服务器并订阅MQTT主题
如果没有连上服务器,尝试重启:
第二次尝试:
成功重连
以上是关于ESP8266 /ESP32 连接到自己的MQTT服务器并实现自动重连 基于micropython的主要内容,如果未能解决你的问题,请参考以下文章
我无法在 Lua 上为 ESP8266 订阅 MQTT 代理
如何通过 STM32CubeIDE 将 ESP8266 Wifi 模块连接到 Firebase
ESP32 + MQTT 连接到中移动物联网云平台 OneNET
ESP32 + MQTT 连接到中移动物联网云平台 OneNET