ESP8266 /ESP32 连接到自己的MQTT服务器并实现自动重连 基于micropython

工作准备:

  1. python3.7
  2. 一定量的python基础
  3. uPyCraft IDE 下载地址
  4. ESP32或ESP8266开发板
  5. MQTT服务器 (本教程没有建立MQTT服务器的教程)

下载固件:

连接板子: Tools → Serial→连接板子的COM端
ESP8266 /ESP32 连接到自己的MQTT服务器并实现自动重连 基于micropython_第1张图片
Tools → board 选择你自己的板子型号

Tools → BurnFirmware 下载固件

ESP8266 /ESP32 连接到自己的MQTT服务器并实现自动重连 基于micropython_第2张图片

建议新手直接默认参数然后下载

建立工程:

ESP8266 /ESP32 连接到自己的MQTT服务器并实现自动重连 基于micropython_第3张图片
左侧是工程的文件树

文件夹名 功能
device 板子flash里的文件
sd sd卡里的文件
uPy_lib micropython常用库
workSpace 工作区

第一次打开uPyCraft IDE时,workSpace路径并不存在,当用户点击workSpace时,会弹出路径选择对话框,选择好需要存放的路径,点击“选择文件夹”,即可创建workSpace目录

File→Examples里面还有很多例程可以借鉴
ESP8266 /ESP32 连接到自己的MQTT服务器并实现自动重连 基于micropython_第4张图片

工作区建立好后:

我们去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_第5张图片
成功重连

你可能感兴趣的:(ESP32/8266,物联网,嵌入式,python,物联网,嵌入式)