【MQTT】在ESP32平台上用microPython实现MQTT通信

7 篇文章 7 订阅
3 篇文章 0 订阅

想要搭建MQTT服务器,请参考

☞☞ 搭建MQTT服务器篇

服务器平台:Ubuntu20.04 + mosquitto
硬件平台:ESP32开发板
MQTT客户端:mosquitto、 通信猫、 mqttfx等等
开发平台:Thoony 3.2

先看下 microPython 支持哪些模块吧:

>>> help('modules')
__main__          gc                ubinascii         upysh
_boot             inisetup          ubluetooth        urandom
_onewire          machine           ucollections      ure
_thread           math              ucryptolib        urequests
_uasyncio         micropython       uctypes           uselect
_webrepl          neopixel          uerrno            usocket
apa106            network           uhashlib          ussl
btree             ntptime           uhashlib          ustruct
builtins          onewire           uheapq            usys
cmath             uarray            uio               utime
dht               uasyncio/__init__ ujson             utimeq
ds18x20           uasyncio/core     umqtt/robust      uwebsocket
esp               uasyncio/event    umqtt/simple      uzlib
esp32             uasyncio/funcs    uos               webrepl
flashbdev         uasyncio/lock     upip              webrepl_setup
framebuf          uasyncio/stream   upip_utarfile     websocket_helper
Plus any modules on the filesystem

我们这里将用到 umqtt/simple模块中的mqtt客户端、 machine模块中的Pin、network模块、time模块。

这里主要演示如何远程点led灯和监控led灯的状态。
在这里插入图片描述

用microPython写l简单的测试demo程序

from umqtt.simple import MQTTClient
from machine import Pin
import network
import time

ssid='your ssid'
passwd='your passwd'
client_id = "slim_id"
mserver = '192.168.0.135'
port=1883

topic_ctl = b'led_ctl'#设备订阅的主题,客户端推送消息的主题
topic_sta = b'led_sta'#客户端订阅的主题,设备推送消息的主题
client = None
wlan = None

led1=Pin(2, Pin.OUT, value=1)
led2=Pin(5, Pin.OUT, value=1)
    
def sub_callback(topic, msg):
    """
    收到订阅消息回调
    """
    global client
    print((topic_ctl, msg))
    if msg == b'led1 ON' or msg == b'led1 on':
        pub_msg = 'LED1: ON-state'
        led1.value(0)
    elif msg == b'led1 OFF' or msg == b'led1 off':
        pub_msg = 'LED1: OFF-state'
        led1.value(1)
    elif msg == b'led2 ON' or msg == b'led2 on':
        pub_msg = 'LED2: ON-state'
        led2.value(0)
    elif msg == b'led2 OFF' or msg == b'led2 off':
        pub_msg = 'LED2: OFF-state'
        led2.value(1)
    else:
        pub_msg = 'other msg'
    client.publish(topic_sta, pub_msg, retain=True)

def connectWiFi():
    """
    连接到WiFi网络
    """
    global wlan
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    wlan.disconnect()
    wlan.connect(ssid, passwd)
    while(wlan.ifconfig()[0]=='0.0.0.0'):
        time.sleep(1)

try:
    connectWiFi()
    client = MQTTClient(client_id, mserver, 0)
    client.set_callback(sub_callback)
    client.connect()
    client.subscribe(topic_ctl)
    client.publish(topic_sta, 'ESP32 Device online', retain=True)
    print("Connected to %s, subscribed to %s topic" % (mserver, topic_ctl))
    while True:
        client.wait_msg()
finally:
    if client is not None:
        print('off line')
        client.disconnect()
    wlan.disconnect()
    wlan.active(False)

测试
通信猫测试端

订阅: led_sta
发布: led_ctl

在这里插入图片描述

Thonny ESP32端

设备终端
订阅:led_ctl
发布:led_sta

在这里插入图片描述

手机APP端

在这里插入图片描述

服务器端

mosquitto mqtt服务器
订阅: led_sta 、 led_ctl

在这里插入图片描述

一个物联网属性的LED灯就做好了

  • 11
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值