基于STM32物联网开发板(5)--ESP8266

电子说

1.3w人已加入

描述

1.概述

      ESP8266 系列无线模块是安信可科技自 主研发设计的一系列高性价比 WiFi SOC 模组。该系列模块支持标准的 IEEE802.11 b/g/n 协议, 内置完整的 TCP/IP 协议栈。 用户可以使用该系列模块为现有的设备添加联网功能, 也可以构建独立的网络控制器。

   特性:

  • 完整的802. 11b/g/n Wi-Fi SoC模块;
  • 内置 Tensilica L106 超低功耗32位微型MCU,主频支持 80 MHz和160 MHz,支持RTOS;
  • 内置1路10 bit高精度ADC;
  • 支持UART/GPIO/ADC/PWM/SPI/I2C接口;
  • 采用SMD-22封装;
  • 集成Wi-Fi MAC/ BB/RF/PA/LNA;
  • 支持多种休眠模式,深度睡眠电流低至 20uA
  • 串口速率最高可达4Mbps;
  • 内嵌Lwip协议栈;
  • 支持 STA/AP/STA+AP工作模式;
  • 支持安卓、IOS的Smart Config(APP) /AirKiss(微信)一键配网;
  • 支持串口本地升级和远程固件升级(FOTA);
  • 通用AT指令可快速上手;
  • 支持二次开发,集成了Windows、Linux开发环境;
ESP8266ESP8266


硬件接口:

引脚

说明

TXD0

PC11串口3接收脚

RXD0

PC10串口3发送脚

2.通讯协议

      本模块采用串口通讯方式,波特率115200,1位起始信号+8位数据位+1位停止位,无校验位,AT指令集开发。

      AT 指令可以细分为四种类型:

类型

指令格式

描述

测试指令

AT+=?

该命令⽤于该命令⽤于查询设置指令的参数以及取值范围。

查询指令

AT+?

该命令⽤于返回参数的当前值。

设置指令

AT+=<...>

该命令⽤于设置⽤户⾃定义的参数值。

执行指令

AT+

该命令⽤于执⾏受模块内部程序控制的变参数不可变的功能。

注意:

  • 不是每条AT指令都具备上述4种类型命令。
  • 括号内为缺省值,不必填写或者可能不显示。使用双引号表示字符串数据,例如:AT+CWSAP=”ESP56290”,”21030826”,1,4
  • 默认波特率为115200。
  • AT指令必须大写,并且以回车换行符结尾(CRLF)。

3.常用AT指令

(1)测试指令AT

执行指令

AT

响应

OK

参数说明

-

(2)重启模块AT+RST

执行指令

AT+RST

响应

OK

参数说明

-

(3)开关回显ATE

执行指令

ATE

响应

OK

参数说明

ATE0:关闭回显

ATE1:开启回显

(4)AT+CWMODE_DEF设置WIFI模式并保存到Flash

指令

测试指令:

AT+CWMODE_DEF=?

查询指令:

AT+CWMODE_DEF?

功能:查询当前WIFI模式

设置指令:

AT+CWMODE_DEF=

功能:设置当前wifi模式

响应

+CWMODE_DEF:取值列表

OK

+CWMODE_DEF:

OK

 

OK

参数

 

1:Station模式

2:SoftAP模式

3:SoftAP+Station模式

注意

本设置保存到Flash system parameter区域,

示例

AT+CWMODE_DEF=3

(5)AT+CWJAP_DEF 连接AF,保存到Flash

指令

查询指令:

AT+CWJAP_DEF?

功能:查询WIFI已连接的AP信息

设置指令:

AT+CWJAP_DEF=,,[,bassid,]

功能:设置需要连接的AP

响应

+CWJAP_DEF:,,, 
OK

OK
或者
+CWJAP_DEF:
FAI

参数

:字符串参数,AP的SSID
:AP 的MAC地址
:信道号
:信号强度

:⽬标AP的 SSID

:密码最⻓64字节ASCII
[]:⽬标AP的MAC地址,⼀般⽤于                                           

有多个SSID相同的AP的情况;
[]:选填参数,不允许连接WEP和  

open的路由器,可⽤于PCI认证
• :(仅供参考,并不可靠)
  ‣ 1:连接超时
  ‣ 2:密码错误
  ‣ 3:找不到⽬标AP
  ‣ 4:连接失败
参数设置需要开启Station模式,若SSID或者password中含有特殊符号,例如 , 或者 “ 或者 时,需要进⾏转义,其它字符转义⽆效。

注意

本设置保存到 Flash 系统参数区。

示例

AT+CWJAP_DEF="abc","0123456789" 
例如,⽬标AP的SSID为 "ab,c",password为"0123456789"",则指令如下:
AT+CWJAP_DEF="ab\,c","0123456789"\" 
如果有多个AP的SSID均为"abc",可通过BSSID确定⽬标AP:
AT+CWJAP_DEF="abc","0123456789","ca:d7:19:d8:a6:44"

(6)AT+CIPMUX 设置多连接

指令

查询指令:

AT+CIPMUX?

设置指令:

AT+CIPMUX=

 

响应

+CIPMUX:

OK

OK
 

参数

 

‣ 0:单连接模式
‣ 1:多连接模式

注意

• 默认为单连接;
• 只有⾮透传模式 (AT+CIPMODE=0),才能设置为多连接;
• 必须在没有连接建⽴的情况下,设置连接模式;
• 如果建⽴了 TCP 服务器,想切换为单连接,必须关闭服务器 (AT+CIPSERVER=0),服务器仅⽀持多连接。

示例

AT+CIPMUX=1

(7)AT+CIPMODE 设置传输模式

指令

查询指令:

AT+CIPMODE?

功能:查询传输模式

设置指令:

AT+CIPMODE=

功能:设置传输模式

响应

+CIPMODE:

OK

OK
 

参数

 

‣ 0:普通传输模式
‣ 1:透传模式,仅⽀持TCP单连接和UDP固定通信对端的情况

注意

• 本设置不保存到Flash。
• 透传模式传输时,如果连接断开, ESP8266会不停尝试重连,此时单独输⼊+++退出透传,则停⽌重连;普通传输模式则不会重连,提示连接断开。

示例

AT+CIPMODE=1

(8)AT+CIFSR查询本地IP

指令

AT+CIFSR

响应

+CIFSR:APIP, 
+CIFSR:APMAC, 
+CIFSR:STAIP, 
+CIFSR:STAMAC, 
OK

参数


ESP8266 SoftAP 的 IP 地址
ESP8266 Station 的 IP 地址

ESP8266 SoftAP 的 MAC 地址
ESP8266 Station 的 MAC 地址

注意

ESP8266 Station IP 需连上 AP 后,才可以查询。

(9)AT+CIPSTART 建立TCP连接、UDP传输或者SSL连接

指令

TCP 单连接 (AT+CIPMUX=0)时:
AT+CIPSTART=,,

[,]

TCP 多连接 (AT+CIPMUX=1) 时:
AT+CIPSTART=,,,

[,]

响应

OK

ERROR 
如果连接已经存在,则返回
ALREADY CONNECTED

参数

• :⽹络连接 ID (0 ~ 4),⽤于多连接的情况
• :字符串参数,连接类型, "TCP","UDP"或"SSL"
• :字符串参数,远端 IP 地址
• :远端端⼝号
• []:TCP keep-alive 侦测时间,默认关闭此功能
   ‣ 0:关闭 TCP keep-alive 功能
   ‣ 1 ~ 7200:侦测时间,单位为 1s

示例

AT+CIPSTART="TCP","iot.espressif.cn",8000 
AT+CIPSTART="TCP","192.168.101.110",1000 

(10)AT+CIPSEND发送数据

指令

设置指令:
1.单连接时(+CIPMUX=0)
   AT+CIPSEND=
2.多连接时(+CIPMUX=1)
   AT+CIPSEND=,
3.如果是UDP传输,可以设置远端IP 和端⼝:
  AT+CIPSEND=[,]    [,,]
功能:在普通传输模式时,设置发送数据的⻓
度。

执⾏指令:AT+CIPSEND

功能:在透传模式时,开始发送数据。

响应

发送指定⻓度的数据。
收到此命令后先换⾏返回 >,然后

开始接收串⼝数据,当数据⻓度满 

时发送数据,回到普通指令模

式,等待下⼀条AT指令。

若未建⽴连接或连接被断开,返回:ERROR

如果数据发送成功,返回:SEND OK 

如果数据发送失败,返回:SEND FAIL

收到此命令后先换⾏返回 >。

进⼊透传模式发送数据,每包最⼤2048字

节,或者每包数据以20 ms间隔区分。
当输⼊单独⼀包 +++ 时,返回普通 AT 

指令模式。发送 +++ 退出透传时,请⾄少

间隔 1秒再发下⼀条 AT 指令。

本指令必须在开启透传模式以及单连接

下使⽤。
若为 UDP 透传,指令 AT+CIPSTART 参数

必须为 0。

参数

• :⽹络连接ID号 (0 ~ 4),⽤于多连接的情况
• :数字参数,表明发送数据的⻓度,最⼤⻓度为2048
• []:UDP传输可以设置对端IP
• []:UDP传输可以设置对端端⼝

-

示例

-

(11)AT+AT+CWSAP_DEF 设置SoftAP参数并保存到flash

指令

查询指令:
AT+CWSAP_DEF? 
查询ESP8266 SoftAP的配置参数。

设置指令:
AT+CWSAP_DEF=,,,[,
][,] 
功能:设置ESP8266 SoftAP的配置参数。

响应

+CWSAP_DEF:,,,,,

OK 

ERROR

参数

• :字符串参数,接⼊点名称
• :字符串参数,密码⻓度范围:  

8 ~ 64 字节ASCII
• :通道号
• :加密⽅式,不⽀持WEP
 ‣ 0: OPEN
 ‣ 2: WPA_PSK
 ‣ 3: WPA2_PSK
 ‣ 4: WPA_WPA2_PSK
• [](选填参数):允许连⼊ ESP8266 SoftAP 的最多Station数⽬,取值范围 [1, 8]。
• [](选填参数):默认为 0,开启⼴播 ESP8266 SoftAP SSID。
 ‣ 0:⼴播 SSID
 ‣ 1:不⼴播 SSID

同左。
⚠ 注意:
指令只有在 SoftAP 模式开启后有效。

注意

本设置保存到 Flash system parameter 区域。

示例

AT+CWSAP_DEF="ESP8266","1234567890",5,3

(12)AT+CIPSERVER建⽴TCP服务器

指令

AT+CIPSERVER=[,]

响应

OK

参数

• :
‣ 0:关闭服务器
‣ 1:建⽴服务器

• :端⼝号,默认为333。

注意

• 多连接情况下 (AT+CIPMUX=1),才能开启 TCP 服务器。
• 创建 TCP 服务器后,⾃动建⽴TCP服务器监听。
• 当有 TCP 客户端接⼊,会⾃动占⽤⼀个连接 ID。

示例

AT+CIPMUX=1 
AT+CIPSERVER=1,1001

(13) 创建TCP服务器配置示例

"ATrn",//测试指令
"ATE0rn",//关闭回显
"AT+CWMODE_DEF=2rn",//--设置为AP(热点)模式
"AT+RSTrn",//模块重启
"ATE0rn",//关闭回显
"AT+CWSAP="EPS8266_123","01234567",1,4rn", //--设置wifi信息
"AT+CIPMUX=1rn",//设置多连接
"AT+CIPSERVER=1,10rn", //--设置TCP服务器模式,端口号(0~65535)
"AT+CIFSRrn"//查询IP地址

(14) 创建TCP客户端示例

"ATrn",//测试指令
"ATE0rn",//关回显
"AT+CWMODE=1rn",//设置STA模式
"AT+RSTrn",//模块复位
"ATE0rn",//关回显
"AT+CWJAP="HUAWEIshui","asdfghjkl12"rn",//连接wifi
"AT+CIPMUX=0rn",//设置单连接
"AT+CIFSRrn",//查询IP
"AT+CIPSTART="TCP","192.168.43.204",8080rn",//连接服务器
"AT+CIPMODE=1rn",//设置透传模式
"AT+CIPSENDrn",//开始发送数据

4.WIFI配置示例

开发平台:STM32CubeMX6.0+KEIL5

硬件资源:STM32F103RET6

通讯方式:串口通讯(USART3)

4.1 硬件配置

ESP8266通讯接口为串口3,波特率115200,1位起始信号+8位数据位+1位停止位,无校验位。

ESP8266ESP8266ESP8266

      配置完成,生成代码。

4.2 DMA接收处理示例

    通过DMA处理串口数据接收。

uint8_t usart3_rx_buff[1024];//串口1接收数据缓冲区
uint16_t usart3_cnt=0;//保存数组下班
uint8_t usart3_flag;//接收完成标志符
/*************************串口接收数据函数********************/
static void Usart3_Receive_Data(void)
{
	DMA1_Channel3->CCR&=~(1<<0);//关闭通道传输
	usart3_cnt=1024-DMA1_Channel3->CNDTR;//获取接收到是字符长度
	if(usart3_cnt>=1024)usart3_cnt=0;
	DMA1->IFCR|=1<<9;//清除标志位
	DMA1_Channel3->CNDTR=1024;//从新赋值
	DMA1_Channel3->CCR|=1<<0;//开启通道传输
	usart3_flag=1;
}

   串口中断服务函数如下:

void USART3_IRQHandler(void)
{
  /* USER CODE BEGIN USART3_IRQn 0 */
  uint8_t c;
  /* USER CODE END USART3_IRQn 0 */
  HAL_UART_IRQHandler(&huart3);
  /* USER CODE BEGIN USART3_IRQn 1 */
  if(__HAL_UART_GET_FLAG(&huart3,UART_FLAG_IDLE))
  {
    c=huart3.Instance->DR;
    c=c;
    Usart3_Receive_Data();
  }
  /* USER CODE END USART3_IRQn 1 */
}

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分