物联网开发笔记(55)- 使用Micropython开发ESP32开发板之MQTT(消息队列遥测传输)实战_micropython mqtt

本文介绍了如何使用Micropython在ESP32开发板上实现MQTT连接,包括连接WiFi、创建MQTT客户端以及设置回调函数处理接收到的消息,用于远程控制ESP32上的LED灯。
摘要由CSDN通过智能技术生成
    while 1:
        b = self.sock.read(1)[0]
        n |= (b & 0x7F) << sh
        if not b & 0x80:
            return n
        sh += 7

def set_callback(self, f):
    self.cb = f

def set_last_will(self, topic, msg, retain=False, qos=0):
    assert 0 <= qos <= 2
    assert topic
    self.lw_topic = topic
    self.lw_msg = msg
    self.lw_qos = qos
    self.lw_retain = retain

def connect(self, clean_session=True):
    self.sock = socket.socket()
    addr = socket.getaddrinfo(self.server, self.port)[0][-1]
    self.sock.connect(addr)
    if self.ssl:
        import ussl

        self.sock = ussl.wrap_socket(self.sock, **self.ssl_params)
    premsg = bytearray(b"\x10\0\0\0\0\0")
    msg = bytearray(b"\x04MQTT\x04\x02\0\0")

    sz = 10 + 2 + len(self.client_id)
    msg[6] = clean_session << 1
    if self.user is not None:
        sz += 2 + len(self.user) + 2 + len(self.pswd)
        msg[6] |= 0xC0
    if self.keepalive:
        assert self.keepalive < 65536
        msg[7] |= self.keepalive >> 8
        msg[8] |= self.keepalive & 0x00FF
    if self.lw_topic:
        sz += 2 + len(self.lw_topic) + 2 + len(self.lw_msg)
        msg[6] |= 0x4 | (self.lw_qos & 0x1) << 3 | (self.lw_qos & 0x2) << 3
        msg[6] |= self.lw_retain << 5

    i = 1
    while sz > 0x7F:
        premsg[i] = (sz & 0x7F) | 0x80
        sz >>= 7
        i += 1
    premsg[i] = sz

    self.sock.write(premsg, i + 2)
    self.sock.write(msg)
    # print(hex(len(msg)), hexlify(msg, ":"))
    self._send_str(self.client_id)
    if self.lw_topic:
        self._send_str(self.lw_topic)
        self._send_str(self.lw_msg)
    if self.user is not None:
        self._send_str(self.user)
        self._send_str(self.pswd)
    resp = self.sock.read(4)
    assert resp[0] == 0x20 and resp[1] == 0x02
    if resp[3] != 0:
        raise MQTTException(resp[3])
    re
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值