ESP8266蓝牙模块

Wi-Fi AT 命令集 --- ESP-AT 用户指南 文档

一、ESP8266介绍

ESP8266EX 由乐鑫公司开发,提供了⼀套⾼度集成的 Wi-Fi SoC 解决⽅案,其低功耗、紧凑设计和⾼稳定性可以满⾜⽤户的需求。 ESP8266EX 拥有完整的且⾃成体系的 Wi-Fi ⽹络功能,既能够独⽴应⽤,也可以作为从机搭载于其他主机 MCU 运⾏。当 ESP8266EX 独⽴应⽤时,能够直接从外接flash中启动。内置的⾼速缓冲存储器有利于提⾼系统性能,并且优化存储系统。此外 ESP8266EX 只需通过 SPI/SDIO 接⼝或 UART 接⼝即可作为 Wi-Fi 适配器,应⽤到基于任何微控制器的设计中。

二、硬件原理图

三、STM32CubeMx配置

首先在STM32CubeMx中配置UART通信,这里我们用UART3。

并在之后配置中断优先级,保证UART3能正常的运行,不会因为其他程序的阻塞而迟迟得不到执行。

四、PC机与ESP8266建立通信

这里我们用串口调试助手来进行和UART3的通信。UART1负责和串口调试助手通信,UART3负责和ESP8266蓝牙模块通信,如上图

cpp 复制代码
char uart1_rx_buf[1024]={0};
char uart3_rx_buf[1024]={0};
//之前我们提到过空闲中断回调函数,这里就是用中断回调函数来进行通信
void uart_interrupt_init()
{
    // 以中断方式接收UART(通用异步收发传输器)数据,直到接收到空闲线(Idle Line)为止
    HAL_UARTEx_ReceiveToIdle_IT(&huart1, (uint8_t*)uart1_rx_buf, sizeof(uart1_rx_buf));
    HAL_UARTEx_ReceiveToIdle_IT(&huart3, (uint8_t*)uart3_rx_buf, sizeof(uart3_rx_buf));
}

//开启空闲中断接收函数,自动调用回调函数
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart,uint16_t Size)
{
    //如果等于UART1就是在和串口调试助手通信
    if(huart == &huart1)
    {
        //发送从蓝牙模块接收的信息
        HAL_UART_Transmit(&huart3, (const uint8_t*)uart1_rx_buf, Size, HAL_MAX_DELAY);
    }
    //另外一种可能是UART3和ESP8266模块通信
    else if(huart == &huart3)
    {
        //发送从串口助手接收的消息
        HAL_UART_Transmit(&huart1, (const uint8_t*)uart3_rx_buf, Size, HAL_MAX_DELAY);
    } 
    uart_interrupt_init();
} 
// 测试代码
void uart_receive()
{
    //调用中断,开始执行
    uart_interrupt_init();
}

串口调试助手UartAssist串口调试工具使用指南 (附UartAssist工具包)_串口调试助手-CSDN博客

五、ESP8266配置wifi的AT指令

这里的命令比较晦涩,但是格式基本固定,现在简单介绍一下指令

5.1 Station(客户端模式)

5.1.1 模式选择

AT+CWMODE= <mode>[,<auto_connect>]

<mode>:模式

0: 无 Wi-Fi 模式,并且关闭 Wi-Fi RF

1: Station 模式:指设备作为无线网络中的一个客户端

2: SoftAP 模式:理解成无线路由器或热点。负责管理连接的客户端设备

3:SoftAP+Station 模式

<auto_connect>:切换ESP设备的Wi-Fi模式时(例如,从SoftAP或无Wi-Fi模式切换为Station模式或 SoftAP+Station 模式),是否启用自动连接 AP 的功能,默认值:1。参数缺省时,使用默认值,也就是能自动连接

0: 禁用自动连接 AP 的功能

1: 启用自动连接 AP 的功能,若之前已经将自动连接 AP 的配置保存到 flash 中,则ESP设备将自动连接AP

5.1.2 模式查询

查询工作模式

命令:

AT+CWMODE?

响应:

+CWMODE:<mode>

OK

5.1.3 扫描当前可用的无线接入点(AP)(ACCESS POINT)

cpp 复制代码
扫描当前可用的 AP

命令:
AT+CWLAP=[<ssid>,<mac>,<channel>,<scan_type>,
<scan_time_min>,<scan_time_max>]
<ssid> :字符串参数,AP的SSID(wifi名称)
<rssi> :信号强度
<mac> :字符串参数,AP的MAC地址
<channel> :信道号
<scan_type> :Wi-Fi 扫描类型 0: 主动扫 描1: 被动扫描
<scan_time_min>:每个信道最短扫描时间,单位:毫秒,范围:[0,1500]
如果扫描类型为被动扫描,本参数无效
<scan_time_max>:每个信道最长扫描时间,单位:毫秒,范围:[0,1500],
如果设为 0,固件采用参数默认值,主动扫描为 120 ms,被动扫描为 360 ms

响应:
+CWLAP:<ecn>,<ssid>,<rssi>,<mac>,<channel>,<freq_offset>,
<freqcal_val>,<pairwise_cipher>,<group_cipher>,
<bgn>,<wps>
OK
说明:
<ecn>:加密方式
    0: OPEN
    1: WEP
    2: WPA_PSK
    3: WPA2_PSK
    4: WPA_WPA2_PSK
    5: WPA2_ENTERPRISE
    6: WPA3_PSK
    7: WPA2_WPA3_PSK
<rssi> :信号强度
<freq_offset> :频偏(保留项目)
<freqcal_val> :频率校准值(保留项目)
<pairwise_cipher>:成对加密类型
    0: None
    1: WEP40
    2: WEP104
    3: TKIP
    4: CCMP
    5: TKIP and CCMP
    6: AES-CMAC-128
    7: 未知
<group_cipher> :组加密类型,与 <pairwise_cipher> 参数的
枚举值相同
<bgn> :802.11 b/g/n,若 bit 设为 1,则表示使
能对应模式,若设为 0,则表示禁用对应模式
bit 0: 是否使能 802.11b 模式
bit 1: 是否使能 802.11g 模式
bit 2: 是否使能 802.11n 模式
<wps> :wps flag
0: 不支持 WPS
1: 支持 WPS

示例:
AT+CWLAP
AT+CWLAP="Wi-Fi"// 寻找指定 SSID 的 AP
AT+CWLAP="Wi-Fi","ca:d7:19:d8:a6:44",6,0,400,1000

5.1.4 连接AP

cpp 复制代码
连接AP

命令:
AT+CWJAP=[<ssid>],[<pwd>][,<bssid>][,<pci_en>][,
<reconn_interval>]
            [,<listen_interval>][,<scan_mode>][,
<jap_timeout>][,<pmf>]
<ssid> :目标 AP 的 SSID 如果 SSID 和密码中有,、等特殊字符,需转义
<pwd> :密码最长 64 字节 ASCII
<bssid> :目标 AP 的 MAC 地址,当多个 AP 有相同的 SSID 时,该参数不可省略
<channel> :信道号
<rssi> :信号强度
<pci_en> :PCI 认证

0: ESP station 可与任何一种加密方式的 AP 连接,包括 OPEN 和
WEP
1: ESP station 可与除 OPEN 和 WEP 之外的任何一种加密方式的 AP连接

<reconn_interval>:Wi-Fi 重连间隔,单位:秒 
                    默认值:1,最大值:7200
                    0: 断开连接后,ESP station 不重连
AP
[1,7200]: 断开连接后,ESP station
每隔指定的时间与 AP 重连
<listen_interval>:监听 AP beacon 的间隔,单位为 AP beacon
间隔,默认值:3,范围:[1,100]
<scan_mode> :扫描模式
0: 快速扫描,找到目标 AP 后终止扫描,ESP station 与第一个扫描
到的 AP 连接
1: 全信道扫描,所有信道都扫描后才终止扫描,ESP station 与扫描
到的信号最强的 AP 连接
<jap_timeout> :AT+CWJAP 命令超时的最大值,单位:秒,默认
值:15,范围:[3,600]
<pmf> :PMF(Protected Management Frames,受
保护的管理帧),默认值 0
响应:
WIFI CONNECTED
WIFI GOT IP
OK
或 WI
FI DISCONNECT
+CWJAP:<error code>
FAIL
<error code> :错误码,仅供参考
    1: 连接超时
    2: 密码错误
    3: 无法找到目标 AP
    4: 连接失败
    其它值: 发生未知错误

示例:
AT+CWJAP="feifanyc教室3","feifanjs3"

ESP8266不能连接5GHZ频段的wifi

ESP8266在连接wifi的时候,如果wifi是5GHZ频段,会连接失败。WiFi设备工作在 2.4G 频段或 5G 频段,但ESP8266和ESP32目前只支持2.4G频段,也就是说:8266只能接收2.4Ghz的信号。

5.1.5 查询当前连接的AP

cpp 复制代码
命令:
AT+CWJAP?
响应
+CWJAP:<ssid>,<bssid>,<channel>,<rssi>,<pci_en>,
<reconn_interval>,<listen_interval>,<scan_mode>,
<pmf>
OK
<ssid> :目标 AP 的 SSID 如果 SSID 和密码中有,、\\ 等特殊字符,需转义
<pwd> :密码最长 64 字节 ASCII
<bssid> :目标 AP 的 MAC 地址,当多个 AP 有相同
的 SSID 时,该参数不可省略
<channel> :信道号
<rssi> :信号强度
<pci_en> :PCI 认证
0: ESP station 可与任何一种加密方式的 AP 连接,包括 OPEN 和
WEP
1: ESP station 可与除 OPEN 和 WEP 之外的任何一种加密方式的 AP
连接
<reconn_interval>:Wi-Fi 重连间隔,单位:秒
                    默认值:1,最大值:7200
                    0: 断开连接后,ESP station 不重连AP
                    [1,7200]: 断开连接后,ESP station每隔指定的时间与 AP 重连
<listen_interval>:监听 AP beacon 的间隔,单位为 AP beacon
间隔,默认值:3,范围:[1,100]
<scan_mode> :扫描模式

0: 快速扫描,找到目标 AP 后终止扫描,ESP station 与第一个扫描
到的 AP 连接
1: 全信道扫描,所有信道都扫描后才终止扫描,ESP station 与扫描
到的信号最强的 AP 连接

<jap_timeout> :AT+CWJAP 命令超时的最大值,单位:秒,默认
值:15,范围:[3,600]
<pmf> :PMF(Protected Management Frames,受
保护的管理帧),默认值 0

5.1.6 查询Station 的IP地址

cpp 复制代码
命令:
AT+CIPSTA?

响应:
+CIPSTA:ip:<"ip">
+CIPSTA:gateway:<"gateway">
+CIPSTA:netmask:<"netmask">
+CIPSTA:ip6ll:<"ipv6 addr">
+CIPSTA:ip6gl:<"ipv6 addr">
OK

5.2 AP(服务端模式)

5.2.1 设置模式

5.2.2 配置 ESP SoftAP 参数

cpp 复制代码
命令:
AT+CWSAP=<ssid>,<pwd>,<chl>,<ecn>[,<max conn>][,<ssid hidden>]
<ssid> :字符串参数,接入点名称
<pwd> :字符串参数,密码,范围:8 ~ 64 字节
ASCII
<channel> :信道号
<ecn> :加密方式,不支持 WEP

0: OPEN(不需要密码)
2: WPA_PSK
3: WPA2_PSK
4: WPA_WPA2_PSK

[<max conn>] :允许连入ESP SoftAP的最多station数目,默认值:4, 取值范围:[1,10]
[<ssid hidden>]:

0: 广播 SSID(默认)
1: 不广播 SSID
响应:
OK

案例:
AT+CWSAP="ESP8266_WIFI","0123456789",11,4

5.2.3 查询 ESP SoftAP 的配置参数

cpp 复制代码
命令:
AT+CWSAP?

响应:
+CWSAP:<ssid>,<pwd>,<channel>,<ecn>,<max conn>,<ssid hidden>
OK
<ssid> :字符串参数,接入点名称
<pwd> :字符串参数,密码,范围:8 ~ 64 字节 ASCII
<channel> :信道号
<ecn> :加密方式,不支持 WEP

0: OPEN(不需要密码)
2: WPA_PSK
3: WPA2_PSK
4: WPA_WPA2_PSK

[<max conn>] :允许连入 ESP SoftAP 的最多 station 数目,取值范围:[1,10]
[<ssid hidden>]:

0: 广播 SSID(默认)
1: 不广播 SSID

5.2.4 通过手机连接AP

5.2.4 开启多连接模式

cpp 复制代码
AT+CIPMUX=1
开启多连接模式,因为只有在开启多连接模式的时候才能开启服务器模
式。

"?"表示查询是否开启多连接模式

5.3 Station+AP(混合模式)

cpp 复制代码
AT+CWMODE=3
cpp 复制代码
AT+CWSAP="ESP8266_WIFI","0123456789",11,4
cpp 复制代码
AT+CWJAP="feifanyc教室3","feifanjs3"

六、透传模式

6.1 普通模式与透传模式

在普通传输模式下,用户可以发送 AT 命令。 例如,用户可以通过 AT+CIPSEND 命令,发送 AT 命令口收到的 MCU 数据到传输对端。从传输对端收到的数据,会通过 AT 命令口返回给 MCU,同时会附带+IPD 信息。

普通传输模式时,如果连接断开,ESP 不会重连,并提示连接断开。
透传模式也称为 "透传发送接收模式"。在透传模式下,用户不能发送其它 AT 命令,除了特别的 +++命令。AT 命令口收到的所有的 MCU 数据都将无修改地,发送到传输对端。从传输对端收到的数据也会通过 AT 命令口无修改地,返回给 MCU。 Wi-Fi 透传模式传输时,如果连接断开,ESP 会不停地尝试重连,此时单独输入 +++ 退出透传,则停止重连。

所以这两中模式最大的不同在于用户能否发送AT命令和是否重连。

设置透传模式

cpp 复制代码
命令:
AT+CIPMODE=<mode>
<mode>:
0: 普通传输模式
1: Wi-Fi 透传接收模式,仅支持TCP单连接、UDP固定通信对端

响应:
OK

注意:
<1>配置更改不保存到 flash
<2>如果设置透传模式error,请重置RSP 【AT+RST】

这里我们就进入了透传模式

进入 Wi-Fi 透传模式

cpp 复制代码
命令:
AT+CIPSEND
响应:
OK
> 或 ERROR

注意1:
进入 Wi-Fi 透传模式,ESP8266 设备每次最大接收 2048 字节,最大
发送 1460 字节

如果当前接收的数据长度大于最大发送字节数,AT 将立即发送;否
则,接收的数据将在 20 ms 内发送。

当输入单独一包 +++(不能包含\r\n) 时,退出 透传模式 下的数据
发送模式,请至少间隔 1 秒再发下一条 AT 命令。

注意2:
本命令必须在开启 透传模式 以及单连接下使用。
若为 Wi-Fi UDP 透传,AT+CIPSTART 命令的参数 <mode> 必须设置为0。

在进入透传模式后我们还可以选择进入WiFI透传模式(仅仅支持TCP,UDP单端通信)

AT+CIPSTART="TCP","192.168.31.99",8989

进入 Wi-Fi 透传模式

发送数据

设置开机进入 TCP透传模式信息savetranslink

cpp 复制代码
命令:
AT+SAVETRANSLINK=<mode>,<"remote host">,<remote port>[,
<"type">,<keep alive>]

<mode>
0: 关闭 ESP 上电进入 Wi-Fi 透传模式
1: 开启 ESP 上电进入 Wi-Fi 透传模式(需要重启生效,下次上电自动进入 透传模式)

<"remote host"> :字符串参数,表示远端 IPv4 地址、IPv6 地址,或域名
<remote port> :远端端口值
<"type"> :字符串参数,表示传输类型:"TCP","TCPv6","SSL",或 "SSLv6"。默认值:"TCP"
<keep alive> :TCP keep-alive 间隔,默认值:0

0: 禁用 keep-alive 功能
1 ~ 7200: 检测间隔,单位:秒

示例:
AT+SAVETRANSLINK=1,"192.168.31.99",8989,"TCP"
AT+SAVETRANSLINK=0 关闭透传

退出透传模式

当输入单独一包 +++(不能包含\r\n) 时,退出 透传模式 下的数据发送模式,请至少间隔 1 秒再发下一条 AT 命令---------------上面有提到

相关推荐
单片机系统设计2 小时前
基于STM32的水质检测系统
网络·stm32·单片机·嵌入式硬件·毕业设计·水质检测
Y1rong4 小时前
STM32之IIC
stm32·单片机
光子物联单片机8 小时前
STM32传感器模块编程实践(十七)DIY智能电子门锁套件模型
c语言·stm32·单片机·嵌入式硬件·mcu
raindrops.8 小时前
STM32之LL库使用(一)
stm32·单片机·嵌入式硬件
麻辣长颈鹿Sir8 小时前
STM32出现FLASH擦除失败异常现象分析及解决方法
stm32·单片机·嵌入式硬件·flash写入失败·stm32g070·类内构造函数定义域异常
码咔吧咔8 小时前
STM32 MCU 的引脚分类
stm32·单片机·嵌入式硬件
意法半导体STM329 小时前
【文末送NUCLEO-G431RB】一文说明白STM32G4双Bank启动与升级 LAT1596
前端·数据库·stm32·单片机·嵌入式硬件·mcu·stm32开发
ting_zh9 小时前
TIM 简介
stm32·tim
单片机系统设计9 小时前
基于STM32单片机的智能恒温水壶设计
c语言·stm32·单片机·嵌入式硬件·毕业设计·智能温水壶
sjh21009 小时前
stm32L431+hal+freertos+lptime+tickless 进入stop模式失败记录(结果还是放弃了)
stm32·单片机·嵌入式硬件