0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用ESP32連接騰訊云實(shí)現(xiàn)遠(yuǎn)程控制

嵌入式開(kāi)發(fā)愛(ài)好者 ? 來(lái)源:嵌入式開(kāi)發(fā)愛(ài)好者 ? 作者:嵌入式開(kāi)發(fā)愛(ài)好者 ? 2022-11-22 09:19 ? 次閱讀

大家好,我是ST!

上次給大家分享了如何使用ESP32實(shí)現(xiàn)藍(lán)牙通信,今天跟大家聊聊如何使用ESP32連接騰訊云實(shí)現(xiàn)遠(yuǎn)程控制。本次實(shí)驗(yàn)用到MQTT協(xié)議,同樣,我用miropython編寫(xiě)程序?qū)崿F(xiàn),最終可以通過(guò)騰訊連連微信小程序添加設(shè)備來(lái)發(fā)布主題消息給騰訊云,ESP32負(fù)責(zé)訂閱騰訊云主題消息,當(dāng)收到某訂閱消息時(shí),來(lái)控制ESP32設(shè)備上LED燈的亮滅。

第一步、創(chuàng)建騰訊云產(chǎn)品和設(shè)備

瀏覽器搜索【騰訊云】,進(jìn)入騰訊云官網(wǎng),微信注冊(cè)登錄

點(diǎn)擊【產(chǎn)品】搜索【物聯(lián)網(wǎng)開(kāi)發(fā)平臺(tái)】,點(diǎn)擊【管理控制臺(tái)】

fa01dd48-69b2-11ed-8abf-dac502259ad0.png

fa2131ac-69b2-11ed-8abf-dac502259ad0.png

在實(shí)例管理中點(diǎn)擊【公共實(shí)例】

fa4b4258-69b2-11ed-8abf-dac502259ad0.png

點(diǎn)擊【新建項(xiàng)目】

fa659306-69b2-11ed-8abf-dac502259ad0.png

填寫(xiě)自己的項(xiàng)目名稱(chēng),點(diǎn)擊【保存】

fa808238-69b2-11ed-8abf-dac502259ad0.png

點(diǎn)擊剛新建的項(xiàng)目

fa9d933c-69b2-11ed-8abf-dac502259ad0.png

點(diǎn)擊【新建產(chǎn)品】

fabbe166-69b2-11ed-8abf-dac502259ad0.png

輸入自己定義的【產(chǎn)品名稱(chēng)】,【產(chǎn)品類(lèi)別】選智慧城市->公共事業(yè)->路燈照明,【通信設(shè)備】填wi-fi,其他的默認(rèn),點(diǎn)擊【確定】

facd8fa6-69b2-11ed-8abf-dac502259ad0.png

點(diǎn)擊自己剛新建的產(chǎn)品名稱(chēng)

faea64f0-69b2-11ed-8abf-dac502259ad0.png

下拉到最后點(diǎn)擊【下一步】

fb05daaa-69b2-11ed-8abf-dac502259ad0.png

點(diǎn)擊【基于模組開(kāi)發(fā)】,產(chǎn)品平臺(tái)選擇【樂(lè)鑫】,類(lèi)型選擇【wifi】,點(diǎn)擊【樂(lè)鑫ESP-WROOM-】點(diǎn)擊【確定】

fb21b2a2-69b2-11ed-8abf-dac502259ad0.png

下拉到最后,點(diǎn)擊【下一步】

fb48045c-69b2-11ed-8abf-dac502259ad0.png

點(diǎn)擊【產(chǎn)品展示配置】右側(cè)的【配置】

fb682142-69b2-11ed-8abf-dac502259ad0.png

【產(chǎn)品展示名稱(chēng)】填寫(xiě)自己自定義的名稱(chēng),【廠家名稱(chēng)】填安信可,【產(chǎn)品信號(hào)】填esp32,點(diǎn)擊【保存】,上拉點(diǎn)擊【<-】返回

fb81d38a-69b2-11ed-8abf-dac502259ad0.png

點(diǎn)擊【快捷入口配置】右側(cè)的【配置】,默認(rèn)不修改,點(diǎn)擊【保存】,上拉點(diǎn)擊【<-】返回

fb9a39de-69b2-11ed-8abf-dac502259ad0.png

點(diǎn)擊【面板配置】右側(cè)的【配置】,默認(rèn)不修改,點(diǎn)擊【保存】,點(diǎn)擊【<-】返回

點(diǎn)擊【配網(wǎng)引導(dǎo)】右側(cè)的【配置】,【芯片方案選擇】選擇樂(lè)鑫,【首選配網(wǎng)方式】選擇Smart Config,【次配網(wǎng)方式】選擇Soft Ap,點(diǎn)擊;【保存】,點(diǎn)擊【<-】返回

fbae5eb4-69b2-11ed-8abf-dac502259ad0.png

點(diǎn)擊【掃一掃產(chǎn)品介紹】右側(cè)的【配置】,默認(rèn)不修改,點(diǎn)擊【保存】,點(diǎn)擊【<-】返回

點(diǎn)擊【智能聯(lián)動(dòng)配置】右側(cè)的【配置】,默認(rèn)不修改,點(diǎn)擊保存,點(diǎn)擊【<-】返回

點(diǎn)擊【下一步】

fbc7d736-69b2-11ed-8abf-dac502259ad0.png

點(diǎn)擊【新建設(shè)備】,自定義【設(shè)備名稱(chēng)】,點(diǎn)擊【保存】

fbe236ee-69b2-11ed-8abf-dac502259ad0.png

點(diǎn)擊【二維碼】,用手機(jī)微信小程序【騰訊連連】掃碼添加設(shè)備

fbf197ce-69b2-11ed-8abf-dac502259ad0.png

此時(shí)設(shè)備已經(jīng)創(chuàng)建完成,但是設(shè)備還未激活,需要后面的的操作連接才可激活

第二步:生成Username和Password

點(diǎn)擊【設(shè)備調(diào)試】,點(diǎn)擊【設(shè)備名稱(chēng)】

fc0899f6-69b2-11ed-8abf-dac502259ad0.png

復(fù)制保存設(shè)備信息三件套:設(shè)備名稱(chēng)、產(chǎn)品ID、設(shè)備密鑰

后面生成MOTT協(xié)議中的Username和Password需要用到

fc2786e0-69b2-11ed-8abf-dac502259ad0.png

打開(kāi)password生成工具,在文件夾里有給出,點(diǎn)擊【sign.html】

fc422d10-69b2-11ed-8abf-dac502259ad0.png

輸入剛剛復(fù)制的設(shè)備信息三件套,Hmac簽名算法選擇【HMAC-SHA1】,點(diǎn)擊【Generate】,即可生成Usename和Password,復(fù)制保存,后面esp32連接騰訊云和MQTTfx模擬的客戶(hù)端連接騰訊云需要用到

fc5cc5f8-69b2-11ed-8abf-dac502259ad0.png

第三步:MQTTfx模擬客戶(hù)端連接騰訊云步驟與調(diào)試(非必須步驟)

打開(kāi)MQTT.fx軟件,我的壓縮包里面有,點(diǎn)擊下圖的齒輪圖形,進(jìn)入設(shè)置

fc7551cc-69b2-11ed-8abf-dac502259ad0.png

【Profile name】:自定義的名字

【Profile Type】:選擇【MQTT Broker】

【Broker Address】:騰訊云三件套中的產(chǎn)品ID+.iotcloud.tencentdevices.com

如我的騰訊云ID為:D89S2VVAFT,

那么Broker Address為:D89S2VVAFT.iotcloud.tencentdevices.com

Broker Port:1883

【Client ID】:騰訊云產(chǎn)品ID+騰訊云設(shè)備名稱(chēng)+|securemode=3,signmethod=hmacsha1|

例如我的騰訊云產(chǎn)品ID為:D89S2VVAFT,騰訊云產(chǎn)品名稱(chēng)為:esp_led

則Client ID為:D89S2VVAFTesp_led|securemode=3,signmethod=hmacsha1|

填寫(xiě)這些數(shù)據(jù)完畢后,點(diǎn)擊【User Credentlals】

fcbcdae2-69b2-11ed-8abf-dac502259ad0.png

User Name和Password填寫(xiě)第二步生成的,每個(gè)人的都不一樣

【User Name】:D89S2VVAFTesp_led;12010126;CU7SQ;1660090317

【Password】:cd6c31a3d4cfdba2759deab02fb831a0f672e008;hmacsha1

點(diǎn)擊【OK】保存

fcdcad04-69b2-11ed-8abf-dac502259ad0.png

點(diǎn)擊【Connect】連接騰訊云

fcf675fe-69b2-11ed-8abf-dac502259ad0.png

MQTT.fx模擬的客戶(hù)端連接騰訊云成功后可以看到右邊的原點(diǎn)變綠,并且有個(gè)打開(kāi)的所,

這時(shí)候我們就可以通過(guò)手機(jī)端小程序騰訊連連來(lái)給騰訊云發(fā)送消息,騰訊云再將此消息發(fā)送給MQTT.fx客戶(hù)端,但是前提是MQTT.fx客戶(hù)端需要訂閱騰訊云,下面是訂閱的步驟

fd0f312a-69b2-11ed-8abf-dac502259ad0.png

點(diǎn)擊【Subscribe】,Subscribe左邊的空格填寫(xiě)格式為:

$thing/down/property/“騰訊云產(chǎn)品ID”/“騰訊云產(chǎn)品名稱(chēng)”

例如:$thing/down/property/D89S2VVAFT/esp_led

填寫(xiě)完成后,點(diǎn)擊【Subscribe】,現(xiàn)在手機(jī)端騰訊練練發(fā)送消息,MQTT.fx可以收到消息了

fd24163a-69b2-11ed-8abf-dac502259ad0.png

可以看到MQTT.fx收到了消息,MQTT.fx只是模擬一個(gè)客戶(hù)端接收消息,我們需要將我們的esp32模塊替代MQTT.fx,這樣我們就可以通過(guò)手機(jī)發(fā)送消息給騰訊云,騰訊云轉(zhuǎn)發(fā)消息給esp32模塊了,通過(guò)單片機(jī)對(duì)收到的數(shù)據(jù)處理,就可以通過(guò)手機(jī)端控制開(kāi)發(fā)板的LED燈亮滅。

fd4101fa-69b2-11ed-8abf-dac502259ad0.png

第四步、編寫(xiě)程序代碼

首先需要用到MQTT的驅(qū)動(dòng)代碼,我在網(wǎng)上找到了一個(gè)用miropython寫(xiě)的驅(qū)動(dòng)代碼,大家可以直接復(fù)制使用,命名為umqttsimple.py即可,代碼如下:

import usocket as socket
import ustruct as struct
from ubinascii import hexlify




class MQTTException(Exception):
    pass




class MQTTClient:
    def __init__(
        self,
        client_id,
        server,
        port=0,
        user=None,
        password=None,
        keepalive=0,
        ssl=False,
        ssl_params={},
    ):
        if port == 0:
            port = 8883 if ssl else 1883
        self.client_id = client_id
        self.sock = None
        self.server = server
        self.port = port
        self.ssl = ssl
        self.ssl_params = ssl_params
        self.pid = 0
        self.cb = None
        self.user = user
        self.pswd = password
        self.keepalive = keepalive
        self.lw_topic = None
        self.lw_msg = None
        self.lw_qos = 0
        self.lw_retain = False


    def _send_str(self, s):
        self.sock.write(struct.pack("!H", len(s)))
        self.sock.write(s)


    def _recv_len(self):
        n = 0
        sh = 0
        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")
        msg = bytearray(b"x04MQTTx04x02")


        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])
        return resp[2] & 1


    def disconnect(self):
        self.sock.write(b"xe0")
        self.sock.close()


    def ping(self):
        self.sock.write(b"xc0")


    def publish(self, topic, msg, retain=False, qos=0):
        pkt = bytearray(b"x30")
        pkt[0] |= qos << 1 | retain
        sz = 2 + len(topic) + len(msg)
        if qos > 0:
            sz += 2
        assert sz < 2097152
        i = 1
        while sz > 0x7F:
            pkt[i] = (sz & 0x7F) | 0x80
            sz >>= 7
            i += 1
        pkt[i] = sz
        # print(hex(len(pkt)), hexlify(pkt, ":"))
        self.sock.write(pkt, i + 1)
        self._send_str(topic)
        if qos > 0:
            self.pid += 1
            pid = self.pid
            struct.pack_into("!H", pkt, 0, pid)
            self.sock.write(pkt, 2)
        self.sock.write(msg)
        if qos == 1:
            while 1:
                op = self.wait_msg()
                if op == 0x40:
                    sz = self.sock.read(1)
                    assert sz == b"x02"
                    rcv_pid = self.sock.read(2)
                    rcv_pid = rcv_pid[0] << 8 | rcv_pid[1]
                    if pid == rcv_pid:
                        return
        elif qos == 2:
            assert 0


    def subscribe(self, topic, qos=0):
        assert self.cb is not None, "Subscribe callback is not set"
        pkt = bytearray(b"x82")
        self.pid += 1
        struct.pack_into("!BH", pkt, 1, 2 + 2 + len(topic) + 1, self.pid)
        # print(hex(len(pkt)), hexlify(pkt, ":"))
        self.sock.write(pkt)
        self._send_str(topic)
        self.sock.write(qos.to_bytes(1, "little"))
        while 1:
            op = self.wait_msg()
            if op == 0x90:
                resp = self.sock.read(4)
                # print(resp)
                assert resp[1] == pkt[2] and resp[2] == pkt[3]
                if resp[3] == 0x80:
                    raise MQTTException(resp[3])
                return


    # Wait for a single incoming MQTT message and process it.
    # Subscribed messages are delivered to a callback previously
    # set by .set_callback() method. Other (internal) MQTT
    # messages processed internally.
    def wait_msg(self):
        res = self.sock.read(1)
        self.sock.setblocking(True)
        if res is None:
            return None
        if res == b"":
            raise OSError(-1)
        if res == b"xd0":  # PINGRESP
            sz = self.sock.read(1)[0]
            assert sz == 0
            return None
        op = res[0]
        if op & 0xF0 != 0x30:
            return op
        sz = self._recv_len()
        topic_len = self.sock.read(2)
        topic_len = (topic_len[0] << 8) | topic_len[1]
        topic = self.sock.read(topic_len)
        sz -= topic_len + 2
        if op & 6:
            pid = self.sock.read(2)
            pid = pid[0] << 8 | pid[1]
            sz -= 2
        msg = self.sock.read(sz)
        self.cb(topic, msg)
        if op & 6 == 2:
            pkt = bytearray(b"x40x02")
            struct.pack_into("!H", pkt, 2, pid)
            self.sock.write(pkt)
        elif op & 6 == 4:
            assert 0


    # Checks whether a pending message from server is available.
    # If not, returns immediately with None. Otherwise, does
    # the same processing as wait_msg.
    def check_msg(self):
        self.sock.setblocking(False)
        return self.wait_msg()

主程序代碼如下:

import time
import network
from umqttsimple import MQTTClient
from machine import Pin,Timer


def do_connect():
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print('connecting to network...')
        wlan.connect('11', '1234567a')
        i = 1
        while not wlan.isconnected():
            print("正在鏈接...{}".format(i))
            i += 1
            time.sleep(1)
    print('network config:', wlan.ifconfig())




def sub_cb(topic, msg): # 回調(diào)函數(shù),收到服務(wù)器消息后會(huì)調(diào)用這個(gè)函數(shù)
    print(topic, msg)
    top=str(topic,'UTF-8')
    strdata=str(msg,'UTF-8')
    count=strdata.find("power_switch")
    print(strdata[count+len("power_switch")+2])
    if strdata[count+len("power_switch")+2]=='0' and top=='$thing/down/property/D89S2VVAFT/esp_led':
        led.value(1)
    if strdata[count+len("power_switch")+2]=='1' and top=='$thing/down/property/D89S2VVAFT/esp_led':
        led.value(0)
        
#客戶(hù)端ID    
client_id="D89S2VVAFTesp_led|securemode=3,signmethod=hmacsha1|"
#服務(wù)器域名
addr="D89S2VVAFT.iotcloud.tencentdevices.com"
#端口號(hào)
port=1883
#用戶(hù)名
username="D89S2VVAFTesp_led;12010126;KTXHT;1669512546"
#密碼
password="0569df86e0c75494960cc922703c9ddd47c3fee048ed03d6b1a22d89a8b8a305;hmacsha256"




led=Pin(22,Pin.OUT)
led.value(1)
# 1. 聯(lián)網(wǎng)
do_connect()
# 2. 創(chuàng)建mqt
c = MQTTClient(client_id=client_id,server=addr,port=port,user=username,password=password,keepalive=60)  # 建立一個(gè)MQTT客戶(hù)端
c.set_callback(sub_cb)  # 設(shè)置回調(diào)函數(shù)
c.connect()  # 建立連接
c.subscribe(b"$thing/down/property/D89S2VVAFT/esp_led")  # 監(jiān)控ledctl這個(gè)通道,接收控制命令
timer1 = Timer(0)
timer1.init(period=1000*60, mode=Timer.PERIODIC, callback=lambda t: c.ping())
while True:
    c.check_msg()

fd57451e-69b2-11ed-8abf-dac502259ad0.png

點(diǎn)擊編譯,編譯成功如下

fd76b6f6-69b2-11ed-8abf-dac502259ad0.png

查看騰訊云建立的設(shè)備,可以看到,此時(shí)設(shè)備已經(jīng)在線(xiàn)

fd94977a-69b2-11ed-8abf-dac502259ad0.png

點(diǎn)擊二維碼,打開(kāi)騰訊連連小程序,掃碼添加設(shè)備

fdb7937e-69b2-11ed-8abf-dac502259ad0.png

現(xiàn)在就可以通過(guò)騰訊連連來(lái)控制ESP32設(shè)備啦!點(diǎn)擊點(diǎn)燈開(kāi)關(guān),ESP32設(shè)備打印出收到的消息,如下:

fdd28e04-69b2-11ed-8abf-dac502259ad0.png

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 遠(yuǎn)程控制
    +關(guān)注

    關(guān)注

    4

    文章

    617

    瀏覽量

    34883
  • 騰訊云
    +關(guān)注

    關(guān)注

    0

    文章

    207

    瀏覽量

    16744
  • MQTT
    +關(guān)注

    關(guān)注

    5

    文章

    647

    瀏覽量

    22392
  • ESP32
    +關(guān)注

    關(guān)注

    17

    文章

    950

    瀏覽量

    16992

原文標(biāo)題:使用ESP32連接騰訊云實(shí)現(xiàn)遠(yuǎn)程控制

文章出處:【微信號(hào):嵌入式開(kāi)發(fā)愛(ài)好者,微信公眾號(hào):嵌入式開(kāi)發(fā)愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    GD32F310連接ESP8266實(shí)現(xiàn)遠(yuǎn)程控制

    通過(guò)mcu與esp01通過(guò)uart連接,通過(guò)at指令來(lái)創(chuàng)建socket連接,接收遠(yuǎn)端控制燈的指令,來(lái)實(shí)現(xiàn)燈亮,滅及閃爍;
    的頭像 發(fā)表于 09-22 18:10 ?2898次閱讀
    GD32F310<b class='flag-5'>連接</b><b class='flag-5'>ESP</b>8266<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>遠(yuǎn)程</b>燈<b class='flag-5'>控制</b>

    使用CW32單片機(jī)通過(guò)ESP8266連接OneNET物聯(lián)網(wǎng)平臺(tái)

    這期視頻向大家介紹如何使用CW32單片機(jī)通過(guò)ESP8266連接OneNET物聯(lián)網(wǎng)平臺(tái),發(fā)送溫濕度數(shù)據(jù)到平臺(tái),并接受平臺(tái)的控制。
    的頭像 發(fā)表于 11-09 14:32 ?1362次閱讀

    ESP32S3連接阿里物聯(lián)網(wǎng)平臺(tái)LinkSDK報(bào)錯(cuò)怎么解決?

    posix_port.c,具體報(bào)錯(cuò)信息如圖所示。向阿里客服提交工單希望能夠解決,客服最終回復(fù):posix_port.c這個(gè)文件,是系統(tǒng)依賴(lài)接口的實(shí)現(xiàn),也是用戶(hù)需要進(jìn)行移植的那一部分,根據(jù)對(duì)應(yīng)的底層系統(tǒng)進(jìn)行實(shí)現(xiàn)。由于本人對(duì)這個(gè)不
    發(fā)表于 06-28 11:30

    STM32F103C8T6連接阿里物聯(lián)網(wǎng)平臺(tái)

    STM32F103C8T6連接阿里物聯(lián)網(wǎng)平臺(tái)(1)—阿里lot Studio控制Web開(kāi)發(fā)分享一下自己使用stm32f103c8t6通過(guò)ESP
    發(fā)表于 08-11 09:33

    請(qǐng)問(wèn)esp8266如何通過(guò)mqtt協(xié)議建立連接實(shí)現(xiàn)小車(chē)的遠(yuǎn)程控制?

    請(qǐng)問(wèn)esp8266如何通過(guò)mqtt協(xié)議建立連接實(shí)現(xiàn)小車(chē)的遠(yuǎn)程控制?
    發(fā)表于 11-01 06:32

    為什么ESP32對(duì)騰訊ASR平臺(tái)會(huì)出現(xiàn)偶發(fā)性的簽名錯(cuò)誤問(wèn)題呢

    為什么ESP32對(duì)騰訊ASR平臺(tái)會(huì)出現(xiàn)偶發(fā)性的簽名錯(cuò)誤問(wèn)題呢?怎樣去解決這個(gè)問(wèn)題?
    發(fā)表于 12-23 09:24

    如何使用Arduino IDE開(kāi)發(fā)讓ESP32連接wifi?

    如何使用Arduino IDE開(kāi)發(fā)讓ESP32連接wifi?
    發(fā)表于 01-14 07:09

    有沒(méi)有例程通過(guò)esp32連接AWS IOT平臺(tái)?如何連接到AWSiot平臺(tái)?

    有沒(méi)有例程通過(guò)esp32連接AWS IOT平臺(tái)??如何連接到AWSiot平臺(tái)?百度找的一些博客都說(shuō)在樂(lè)鑫SDK esp-idf的例程esp-
    發(fā)表于 02-20 06:00

    使用esp8266連接阿里進(jìn)行OTA升級(jí)提示錯(cuò)誤咋辦?

    使用esp8266連接阿里進(jìn)行OTA升級(jí)提示no memory recive buffer
    發(fā)表于 02-24 14:25

    請(qǐng)問(wèn)能提供一份release版本的ESP32騰訊AT固件嗎?

    請(qǐng)問(wèn)能提供一份 release 版本的 ESP32 騰訊 AT 固件嗎? 我們?cè)?ESP-AT 倉(cāng)庫(kù)編譯出來(lái)的固件在驗(yàn)證 ota 時(shí)候有問(wèn)題: 發(fā)現(xiàn)顯示 207 報(bào)錯(cuò),經(jīng)查文檔這個(gè)
    發(fā)表于 04-24 09:16

    想通過(guò)ESP8266連接阿里,固件哪里有?

    想用新唐的板子,通過(guò)esp8266連接阿里 有沒(méi)有測(cè)試好的esp8266的固件? 還是說(shuō),這個(gè)固件要自己修改,自己寫(xiě)?
    發(fā)表于 06-27 07:40

    關(guān)于ESP8266和機(jī)智實(shí)現(xiàn)遠(yuǎn)程控制車(chē)庫(kù)卷簾門(mén)解析

    [?本文概述 ? ] 本案例展示通過(guò)機(jī)智IoT開(kāi)發(fā)平臺(tái),使用單片機(jī)搭載ESP8266Wi-Fi模塊連接路由器,實(shí)現(xiàn)設(shè)備聯(lián)網(wǎng),同時(shí)借助機(jī)智
    的頭像 發(fā)表于 05-31 09:12 ?3752次閱讀
    關(guān)于<b class='flag-5'>ESP</b>8266和機(jī)智<b class='flag-5'>云</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>遠(yuǎn)程控制</b>車(chē)庫(kù)卷簾門(mén)解析

    吃白菜一樣用micropython玩esp32(四)—— siri遠(yuǎn)程控制點(diǎn)燈

    這節(jié)讓esp32通過(guò)wifi自己建立一個(gè)web server,就是自己建立一個(gè)網(wǎng)站服務(wù)器,就會(huì)有一個(gè)ip地址,在手機(jī)或電腦和esp32連接同一個(gè)wifi的情況下,讓手機(jī)或電腦登錄那個(gè)ip地址的網(wǎng)站
    發(fā)表于 12-29 19:02 ?7次下載
    吃白菜一樣用micropython玩<b class='flag-5'>esp32</b>(四)—— siri<b class='flag-5'>遠(yuǎn)程控制</b>點(diǎn)燈

    使用ESP32、Python和javascript的遠(yuǎn)程控制繼電器

    電子發(fā)燒友網(wǎng)站提供《使用ESP32、Python和javascript的遠(yuǎn)程控制繼電器.zip》資料免費(fèi)下載
    發(fā)表于 11-10 10:27 ?1次下載
    使用<b class='flag-5'>ESP32</b>、Python和javascript的<b class='flag-5'>遠(yuǎn)程控制</b>繼電器

    啟明云端測(cè)試分享|ESP32-C3連接阿里

    啟明云端手把手教程ESP32-C3連接阿里
    的頭像 發(fā)表于 09-13 15:10 ?2639次閱讀
    啟明云端測(cè)試分享|<b class='flag-5'>ESP32</b>-C3<b class='flag-5'>連接</b>阿里<b class='flag-5'>云</b>