湖南小企业网站建设怎么做,如何建设属于自己的网站,中山 网站建设一条龙全包,程序外包平台一、简介 ESP8266:芯片
ESP8266-NodeMCU:方便对ESP8266芯片操作。 模块内嵌TCP/IP协议栈#xff0c;可以实现串口、WIFI之间的数据转换传输。
产品特性
支持无线802.11b/g/n三种标准 支持STA/APSTAAP三种工作模式 支持TCP/IP协议栈#xff0c;支持多路TCP Client连接 内置…一、简介 ESP8266:芯片
ESP8266-NodeMCU:方便对ESP8266芯片操作。 模块内嵌TCP/IP协议栈可以实现串口、WIFI之间的数据转换传输。
产品特性
支持无线802.11b/g/n三种标准 支持STA/APSTAAP三种工作模式 支持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、工作模式
1STA
在此模式下ATK-MW8266D 模块可连接其他设备提供的无线网络例如通过 WIFI 连接至路由器从而可以访问互联网进而实现手机或电脑通过互联网实现对设备的远程控制。STA也可以理解为终端的意思每一个连接到无线网络中的终端例如笔记本电脑芯片等其他可以联网的设备都可以成为一个STA站点。
通俗在此模式下该模块相当于一个用户需要链接外部的wifi或自己的热点通过链接的WiFi进行与其他设备的通信。 2AP
AP是无线接入点是一个无线网络的创建者是网络的中心节点。板块自身充当路由器角色可以产生热点由其他设备查询到并接入。 通俗在此模式下该模块相当于提供了一个热点创建一个小范围的局域网只要和他连接就能与其进行通信。
3STAAP
该模式为 STA 模式与 AP 模式共存的一种模式ATK-MW8266D 模块既能连接至其他
设备提供的无线网络又能作为热点供其他设备连接以实现广域网与局域网的无缝切换
方便操作使用。
5、AT指令说明
通过串口将AT指令传输到ESP8266中去ESP8266便可以开始工作后面的单片机控制也是通过AT指令对模块进行作用。
AT指令可以细分为四种类型如表所示
类型指令格式描述测试类型AT CMD ?该命令用于查询设置指令的参数以及取值范围查询类型AT CMD ?该命令用于返回参数的当前值设置类型AT CMD ...该命令用于设置用户自定义的参数值执行类型AT CMD 该命令用于执行受模块内部程序控制且参数不可变的功能。
注意①注意串口RXD,TXD线的连接
②是否需要对模块进行固件烧录
③AT指令必须大写且每条指令都需以回车换行符结尾“\r\n”;
④串口波特率与模块是否一致。
⑤ 使用双引号表示字符串数据例如ATCWJAP”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模式并且模块作为服务器 指令集 ATCWMODE2//设置AP模式 ATRST//重启⽣效 ATCWSAPATK-MW8266D,12345678,1,4//设置 AP 参数。SSID 为 ATK-MW8266D、密 码为 12345678、 通道为 1、加密方式为 WPA_WPA2_PSK ATCIPMUX1//开启多连接 ATCIPSERVER1,8086//开启 SERVER 模式端⼝号为 8086 注AT 指令必须⼤写且每条指令都需以回⻋换⾏符结尾 3.1.1 命令截图
① ATCWMODE2 ② ATRST ③ ATCWSAPATK-MW8266D,12345678,1,4
④ ATCIPMUX1 ⑤ ATCIPSERVER1,8086 3.1.2 配置完成后显示对应WIFI 密码就是12345678
1手机下载网络调试精灵。 2打开“网络调试精灵”点击客户端 3)在手机给电脑发送数据前首先需要使用串口去查找主机号主机的ip地址ATCIFSR
4填写主机号和端口号 5显示连接成功 6手机发送信息给主机 通过串口接受信息
7主机要是给主机发送信息需要输入指令ATCIPSEND0,5,0表示从机的ip,5表示发送多少数据。 以上便是在AP模式下ESP8266作为服务器双方通信的建立
从机断开连接会显示如下图所示 如下图所示是手机上接收到的信息
(2) 配置板块为AP模式并且作为客户端 指令集 ATCWMODE2//设置为 AP 模式 ATRST//重启⽣效 ATCWSAPATK-MW8266D, 12345678,1,4//设置 AP 参数。SSID 为 ATK-MW8266D、密 码为 12345678、 通道为 1、加密⽅式为 WPA_WPA2_PSK ATCIPMUX0//开启单连接 ATCIPSTARTTCP,192.168.4.xxx,8086//建⽴ TCP 连接到 192.168.4.XXX:8086 ATCIPMODE1//开启透传模式仅单连接 Client 时⽀持 ATCIPSEND//开始发送数据 3.2.1 命令截图
①②③和上面1是一样的。
④开启单连接 ⑤建立TCP连接 ⑥开启透传模式 ⑦开始发送数据 ①这里都是手机服务器端给电脑客户端发的信息在一个缓冲区中可能是没有换行。 当手机服务端建立成功后一直在监听事件。后面有人连接他会发送http报头类似三次握手四次挥手的connect操作后续主从机交互信息在此期间只要从机不断开连接④就不会消失。
如图所示是断开连接后的④就会消失。 易错点一定要关闭防火墙不然连不上。还有手机和电脑必须连上同一个网络就是下图这个
(3) 配置模块为STA模式并且作为服务器 指令集 ATCWMODE1//设置为 STA 模式 ATRST//重启⽣效 ATCWLAP //显示目前可以搜到的WIFI信号 ATCWJAP”ATK-MW8266D”, ”12345678”//加⼊ WiFi 热点。SSIDATK-MW8266D、密码 12345678 ATCIPMUX1//开启多连接 ATCIPSERVER1,8086//开启 SERVER 模式端⼝号为 8086 ATCIPSEND0,5//向 ID0 发送 5 字节数据包 3.3.1命令截图
①设置为STA模式 ②重启
③显示目前可以搜到的WIFI信号
④加⼊ WiFi 热点。SSID:xxx 密码:xxx
注意ATCWJAP后面跟的是你要连接的热点和密码这个和AP不一样而且这个WIFI的AP频段是2.4GHz不是5 GHz ⑤开启多连接 ⑥开启 SERVER 模式端⼝号为 8086 ⑦连接客户端
其中主机号依旧是利用ATCIFSR 查询端口号8086 ⑧给客户端回复数据
(4) 配置模块为STA模式并且作为客户端 指令集 ATCWMODE1//设置为STA 模式 ATRST//重启⽣效 ATCWJAP”ATK-MW8266D”, ”12345678”//加⼊ WiFi 热点。SSIDATK-MW8266D、密码 12345678 ATCIPMUX0//开启单连接 ATCIPSTART”TCP”, ”192.168.4.XXX”,8086//建⽴ TCP 连接到 192.168.4.XXX:8086 ATCIPMODE1//开启透传模式仅单连接 Client 时⽀持 ATCIPSEND//开始发送数据 3.4.1 命令截图
①加入WIFI热点 ②开启单连接 ③建立TCP连接
重点ATCIPSTART此处需要填的是手机端的IP自动生成与端口号端口号自行设置此时ESP8266作为客户端。它需要主动去连接手机
错误示范 连接一个已经关闭的服务器端会显示ERROR信息并告诉客户端这个服务器端关闭
正确操作
④开启透传模式仅单连接 Client 时⽀持 ⑤开始发送数据
四、连接原子云服务器
4.1 创建设备
原子云的网址原子云-用户登录创建并登入账号
接着在弹出的窗口中根据 ATK-MW8266D 模块的设备类型选择“ESP8266”
随后根据个人喜好填入“设备名称”和“密码”这里的密码在就是 ATK-MW8266D 模块通过 AT
指令连接原子云时需要的密码如下图所示 最后点击“新增”按钮即可创建设备设备创建好后如下图所示
创建好设备后系统会自动为设备生成编号这个设备编号就是 ATK-MW8266D 模块
使用 AT 指令连接原子云时需要的设备 ID。
4.2 连接原子云
创建好设备后系统会自动为设备生成编号这个设备编号就是 模块 使用 AT 指令连接原子云时需要的设备 ID。
创建好设备后就能后根据设备的编号和密码并通过 AT 指令操作 ATK-MW8266D 模块
连接原子云了。具体的 AT 指令如下所示 ATCWMODE1 /* 使能 ATK-MW8266D 模块的 STA 模式以连接路由器的 AP */ ATCWJAP”ALIENTEK-YF”,”15902020353” /* 连接路由器的 AP以访问互联网 */ ATATKCLDSTA”71103822668332005526”,”12345678” /* 连接原子云服务器 */ 注意连接原子云服务器时那个命令后面不能有空格我就是因为这个原因卡了好长时间
当串口调试助手显示“CLOUD CONNECTED”后说明已成功连接上原子云服务器 此时在原子云的设备管理界面也能够看到对应的设备显示为“已连接”的连接状态如下图所示
4.3 发送信息
当模块成功连接原子云服务器后即进入了透传模式此时就能够在原子云的对应设备的“消息收发”操作界面通过原子云服务器发送消息至模块同时也能后在该界面下查看到接收自 模块的消息.
五、串口与AT指令
通过usart3发送AT指令然后通过Usart3接收口接受回的OK
#include stm32f4xx.h // Device header
#include stdio.h
#include stdlib.huint8_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速率为50MHzGPIO_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速率为50MHzGPIO_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的基础入门篇