ESP8266

一、简介

ESP8266:芯片

ESP8266-NodeMCU:方便对ESP8266芯片操作。

模块内嵌TCP/IP协议栈,可以实现串口、WIFI之间的数据转换传输。

产品特性

支持无线802.11b/g/n三种标准 支持STA/AP+STA+AP三种工作模式 支持TCP/IP协议栈,支持多路TCP Client连接 内置丰富的Socket AT指令 支持UART/GPIO数据通信接口 支持Smart Link 智能联网功能 适合电池供电应用 3.3V单电源供电

1、ATK-MW8266D 引脚功能

注意:IO_0引脚用于固件烧写,低电平有效

2、ATK-ESP-01引脚功能

3、串口配置

默认UART通讯配置参数

参数参数值
波特率115200bps
数据位8
停止位1
校验位

4、工作模式

(1)STA

在此模式下,ATK-MW8266D 模块可连接其他设备提供的无线网络,例如通过 WIFI 连接至路由器,从而可以访问互联网,进而实现手机或电脑通过互联网实现对设备的远程控制。STA也可以理解为终端的意思,每一个连接到无线网络中的终端(例如笔记本电脑,芯片等其他可以联网的设备)都可以成为一个STA站点。

通俗:在此模式下,该模块相当于一个用户,需要链接外部的wifi(或自己的热点),通过链接的WiFi进行与其他设备的通信。

(2)AP

AP是无线接入点,是一个无线网络的创建者,是网络的中心节点。板块自身充当路由器角色,可以产生热点由其他设备查询到并接入。

通俗:在此模式下,该模块相当于提供了一个热点,创建一个小范围的局域网,只要和他连接就能与其进行通信。

(3)STA+AP

该模式为 STA 模式与 AP 模式共存的一种模式,ATK-MW8266D 模块既能连接至其他

设备提供的无线网络,又能作为热点,供其他设备连接,以实现广域网与局域网的无缝切换,

方便操作使用。

5、AT指令说明

通过串口将AT指令传输到ESP8266中去,ESP8266便可以开始工作;后面的单片机控制,也是通过AT指令对模块进行作用。

AT指令可以细分为四种类型,如表所示:

类型指令格式描述
测试类型AT+< CMD >=?该命令用于查询设置指令的参数以及取值范围
查询类型AT+< CMD >?该命令用于返回参数的当前值
设置类型AT+< CMD >=<...>该命令用于设置用户自定义的参数值
执行类型AT+< CMD >该命令用于执行受模块内部程序控制,且参数不可变的功能。

注意:①注意串口RXD,TXD线的连接

②是否需要对模块进行固件烧录

③AT指令必须大写,且每条指令都需以回车换行符结尾“\r\n”;

④串口波特率与模块是否一致。

⑤ 使用双引号表示字符串数据,例如:AT+CWJAP=”ALIENTEK”,”15902020353”。

二、固件烧录

1、需要的资料

2、硬件连接

①串口:ESP8266的串口引脚与开发板的USART1串口进行交叉连接 (TXD--RXD) (RXD--TXD)。

②电源:VCC接5v,GND接地,IO_0需要连接至GND;

IO_0引脚用于固件烧写,低电平有效

3、硬件连接

3.1 打开“flash_tool”软件

选择“chip Type(芯片类型)”为“ESP8266”、"workMode(工作模式)"为”develop“,如下图所示:

3.2 点击擦除“ERASE”

配置好模式并进入软件后,选择待烧录固件的bin文件,并设置好bin文件烧录至芯片的地址信息,一定要打勾,然后选择下面的串口,首先先擦除ERASE。

3.3 擦除成功后,点击“START”
3.4 “START”成功后的信息

注意:烧写成功后一定要重启ESP8266,然后拔掉IO_0。

3.5 START显示成功后,使用串口助手

输入“AT"指令,注意换行,只要串口助手回复”OK“,表明固件烧写成功。

三、TCP透传实验

(1)配置模块为AP模式并且模块作为服务器

指令集:

AT+CWMODE=2//设置AP模式

AT+RST//重启⽣效

AT+CWSAP="ATK-MW8266D","12345678",1,4//设置 AP 参数。SSID 为 ATK-MW8266D、密

码为 12345678、 通道为 1、加密方式为 WPA_WPA2_PSK

AT+CIPMUX=1//开启多连接

AT+CIPSERVER=1,8086//开启 SERVER 模式,端⼝号为 8086

注:AT 指令必须⼤写,且每条指令都需以回⻋换⾏符结尾

3.1.1 命令截图
① AT+CWMODE=2

② AT+RST
③ AT+CWSAP="ATK-MW8266D","12345678",1,4
④ AT+CIPMUX=1
⑤ AT+CIPSERVER=1,8086
3.1.2 配置完成后,显示对应WIFI

密码就是12345678

(1)手机下载网络调试精灵。

(2)打开“网络调试精灵”,点击客户端

(3)在手机给电脑发送数据前,首先需要使用串口去查找主机号(主机的ip地址):AT+CIFSR

(4)填写主机号和端口号

(5)显示连接成功

(6)手机发送信息给主机

通过串口接受信息

(7)主机要是给主机发送信息,需要输入指令"AT+CIPSEND=0,5",0表示从机的ip,5表示发送多少数据。

以上便是,在AP模式下,ESP8266作为服务器双方通信的建立;

从机断开连接会显示如下图所示

如下图所示,是手机上接收到的信息

(2) 配置板块为AP模式并且作为客户端

指令集:

AT+CWMODE=2//设置为 AP 模式

AT+RST//重启⽣效

AT+CWSAP="ATK-MW8266D", "12345678",1,4//设置 AP 参数。SSID 为 ATK-MW8266D、密

码为 12345678、 通道为 1、加密⽅式为 WPA_WPA2_PSK

AT+CIPMUX=0//开启单连接

AT+CIPSTART="TCP","192.168.4.xxx",8086//建⽴ TCP 连接到 192.168.4.XXX:8086

AT+CIPMODE=1//开启透传模式(仅单连接 Client 时⽀持)

AT+CIPSEND//开始发送数据

3.2.1 命令截图

①②③和上面(1)是一样的。

④开启单连接
⑤建立TCP连接
⑥开启透传模式
⑦开始发送数据

①这里都是手机(服务器端)给电脑(客户端)发的信息,在一个缓冲区中(可能是没有换行)。

当手机(服务端)建立成功后,一直在监听事件。后面有人连接他,会发送http报头(类似三次握手四次挥手的connect操作),后续主从机交互信息,在此期间,只要从机不断开连接,④就不会消失。

如图所示是断开连接后的,④就会消失。

易错点:一定要关闭防火墙,不然连不上。还有手机和电脑必须连上同一个网络就是下图这个

(3) 配置模块为STA模式并且作为服务器

指令集:

AT+CWMODE=1//设置为 STA 模式

AT+RST//重启⽣效

AT+CWLAP //显示目前可以搜到的WIFI信号

AT+CWJAP=”ATK-MW8266D”, ”12345678”//加⼊ WiFi 热点。SSID:ATK-MW8266D、密码:

12345678

AT+CIPMUX=1//开启多连接

AT+CIPSERVER=1,8086//开启 SERVER 模式,端⼝号为 8086

AT+CIPSEND=0,5//向 ID0 发送 5 字节数据包

3.3.1命令截图
①设置为STA模式
②重启
③显示目前可以搜到的WIFI信号
④加⼊ WiFi 热点。SSID:xxx 密码:xxx

注意:AT+CWJAP=后面跟的是你要连接的热点和密码,这个和AP不一样,而且这个WIFI的AP频段是2.4GHz不是5 GHz!!!

⑤开启多连接
⑥开启 SERVER 模式,端⼝号为 8086
⑦连接客户端

其中,主机号依旧是利用:AT+CIFSR 查询;端口号,8086;

⑧给客户端回复数据

(4) 配置模块为STA模式并且作为客户端

指令集:

AT+CWMODE=1//设置为STA 模式

AT+RST//重启⽣效

AT+CWJAP=”ATK-MW8266D”, ”12345678”//加⼊ WiFi 热点。SSID:ATK-MW8266D、密码:

12345678

AT+CIPMUX=0//开启单连接

AT+CIPSTART=”TCP”, ”192.168.4.XXX”,8086//建⽴ TCP 连接到 192.168.4.XXX:8086

AT+CIPMODE=1//开启透传模式(仅单连接 Client 时⽀持)

AT+CIPSEND//开始发送数据

3.4.1 命令截图
①加入WIFI热点
②开启单连接
③建立TCP连接

重点:AT+CIPSTART=此处需要填的是手机端的IP(自动生成)与端口号(端口号自行设置);此时ESP8266作为客户端。它需要主动去连接手机;

错误示范:

连接一个已经关闭的服务器端,会显示ERROR信息,并告诉客户端这个服务器端关闭

正确操作:
④开启透传模式(仅单连接 Client 时⽀持)
⑤开始发送数据

四、连接原子云服务器

4.1 创建设备

原子云的网址:原子云-用户登录创建并登入账号;

接着在弹出的窗口中,根据 ATK-MW8266D 模块的设备类型选择“ESP8266”

随后根据个人喜好填入“设备名称”和“密码”(这里的密码在就是 ATK-MW8266D 模块通过 AT

指令连接原子云时需要的密码),如下图所示:

最后,点击“新增”按钮,即可创建设备,设备创建好后,如下图所示:

创建好设备后,系统会自动为设备生成编号,这个设备编号就是 ATK-MW8266D 模块

使用 AT 指令连接原子云时需要的设备 ID。

4.2 连接原子云

创建好设备后,系统会自动为设备生成编号,这个设备编号就是 模块 使用 AT 指令连接原子云时需要的设备 ID。

创建好设备后,就能后根据设备的编号和密码并通过 AT 指令操作 ATK-MW8266D 模块

连接原子云了。具体的 AT 指令如下所示:

AT+CWMODE=1 /* 使能 ATK-MW8266D 模块的 STA 模式,以连接路由器的 AP */

AT+CWJAP=”ALIENTEK-YF”,”15902020353” /* 连接路由器的 AP,以访问互联网 */

AT+ATKCLDSTA=”71103822668332005526”,”12345678” /* 连接原子云服务器 */

注意:连接原子云服务器时那个命令后面不能有空格,我就是因为这个原因卡了好长时间

当串口调试助手显示“CLOUD CONNECTED”后,说明已成功连接上原子云服务器, 此时在原子云的设备管理界面,也能够看到对应的设备显示为“已连接”的连接状态,如下图所示:

4.3 发送信息

当模块成功连接原子云服务器后,即进入了透传模式,此时就能够在原子云的对应设备的“消息收发”操作界面通过原子云服务器发送消息至模块,同时,也能后在该界面下,查看到接收自 模块的消息.

五、串口与AT指令

通过usart3发送AT指令,然后通过Usart3接收口接受回的OK

#include "stm32f4xx.h"                  // Device header
#include "stdio.h"
#include "stdlib.h"

uint8_t num = 0;
uint8_t buf[256];
uint8_t flag = 0;

void My_UsartInit(void)
{
    GPIO_InitTypeDef      GPIO_InitStructure;
    GPIO_InitTypeDef      GPIO_InitStructure1;
    USART_InitTypeDef     USART_InitStructure;

    /*使能GPIOA 的时钟*/
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
    
    /*使能串口1 的时钟*/
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
    
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;             //设置GPIO为复用模式
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //设置GPIO速率为50MHz
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;         //不使用上拉,下拉
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;  //GPIO Pin 设置
    GPIO_Init(GPIOA,&GPIO_InitStructure);    //GPIOA_9 初始化
    
    GPIO_InitStructure1.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure1.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure1.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure1);
    
    /* 多功能引脚的配置,将PA9和PA10连接到串口1 */
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);   
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);
    
    USART_InitStructure.USART_BaudRate = 115200;    //波特率的配置
    USART_InitStructure.USART_WordLength = USART_WordLength_8b; //8位的数据位
    USART_InitStructure.USART_StopBits = USART_StopBits_1;  //1个停止位
    USART_InitStructure.USART_Parity = USART_Parity_No; //无校验
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;	//无流控制
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //支持数据的发送与接收
    USART_Init(USART1, &USART_InitStructure);
    
    USART_Cmd(USART1,ENABLE); //使能串口
}

//重定向printf
int fputc(int ch, FILE *f)
{
    USART_SendData(USART1,ch);
    while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET); 
    
    return ch;
}
void Usart1_SendString(uint8_t *string)
{
    uint8_t i;
    for(i = 0; string[i] != '\0'; i++)
    {
        USART_SendData(USART1,string[i]);
        while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
    }
}
/********************************************
    初始化USART3 相关
    USART3_TX: 向模块发送AT指令
    USART3_RX: 接收模块返回的应答号
*/
void My_Usart3Init(void)
{
    GPIO_InitTypeDef      GPIO_InitStructure;
    GPIO_InitTypeDef      GPIO_InitStructure1;
    GPIO_InitTypeDef      GPIO_InitStructure2;
    USART_InitTypeDef     USART_InitStructure;

    /*使能GPIOB 的时钟*/
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
    
    /*使能串口3 的时钟*/
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
    
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;             //设置GPIO为复用模式
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //设置GPIO速率为50MHz
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;         //不使用上拉,下拉
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;  //GPIO Pin 设置
    GPIO_Init(GPIOB,&GPIO_InitStructure);    //GPIOA_9 初始化
    
    GPIO_InitStructure1.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure1.GPIO_Pin = GPIO_Pin_11;
    GPIO_InitStructure1.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB,&GPIO_InitStructure1);
    
    /* 配置PB0 作为模块的复位引脚 */
    GPIO_InitStructure2.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure2.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure2.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure2.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_Init(GPIOB,&GPIO_InitStructure2);
    
    /* 多功能引脚的配置,将PA9和PA10连接到串口1 */
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_USART3);   
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_USART3);
    
    USART_InitStructure.USART_BaudRate = 115200;    //波特率的配置
    USART_InitStructure.USART_WordLength = USART_WordLength_8b; //8位的数据位
    USART_InitStructure.USART_StopBits = USART_StopBits_1;  //1个停止位
    USART_InitStructure.USART_Parity = USART_Parity_No; //无校验
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;	//无流控制
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //支持数据的发送与接收
    USART_Init(USART3, &USART_InitStructure);
    
    /*******************************/
    //usart3中断配置
    USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);
    NVIC_InitTypeDef Struct;
    Struct.NVIC_IRQChannel = USART3_IRQn;
    Struct.NVIC_IRQChannelCmd = ENABLE;
    Struct.NVIC_IRQChannelPreemptionPriority = 1;
    Struct.NVIC_IRQChannelSubPriority = 1;
    NVIC_Init(&Struct);
    USART_ClearITPendingBit(USART3,USART_IT_RXNE);
    
    USART_Cmd(USART3,ENABLE); //使能串口
}

void Usart3_SendString(uint8_t *string)
{
    uint8_t i;
    for(i = 0; string[i] != '\0'; i++)
    {
        USART_SendData(USART3,string[i]);
        while(USART_GetFlagStatus(USART3,USART_FLAG_TXE) == RESET);
    }
}

void USART3_IRQHandler(void)
{
    uint8_t data;
    if(USART_GetITStatus(USART3,USART_IT_RXNE) == SET)
    {
        if(flag == 0)
        {
            buf[num] = USART_ReceiveData(USART3);
            num ++;
        }
     USART_ClearITPendingBit(USART3,USART_IT_RXNE);
    }
    if(USART_GetITStatus(USART3,USART_IT_IDLE) == SET)
    {
        flag = 1;
        num = 0;
    }
    USART_ClearITPendingBit(USART3,USART_IT_IDLE); 

}

以上是关于ESP8266的基础入门篇

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想远程编程ESP8266,可以使用OTA(Over-the-Air)方式。这种方式可以让你无需连接USB,直接通过Wi-Fi网络进行编程。 以下是ESP8266 OTA的步骤: 1. 首先,在你的ESP8266上安装一个OTA Bootloader。可以使用Arduino IDE或者PlatformIO来完成这个步骤。 2. 在你的代码中添加OTA库,并将ESP8266上传到你的设备。 3. 打开串口监视器,在其中查找设备的IP地址。 4. 打开Arduino IDE,选择“Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP8266 Sketch Data Upload” -> “Tools” -> “ESP826

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值