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 命令---------------上面有提到

相关推荐
许商1 小时前
【stm32】【printf】
java·前端·stm32
LaoZhangGong1232 小时前
以太网HTTP数据包格式分析
c语言·stm32·网络协议·http·tcp·arp
云山工作室2 小时前
用于电动汽车的永磁同步电机调速系统建模与仿真(论文+)
stm32·单片机·嵌入式硬件·毕业设计·毕设
DIY机器人工房4 小时前
嵌入式面试题:纹波率怎么计算;Buck 电路电感值的标准计算式是什么?
stm32·嵌入式硬件·面试题·diy机器人工房
DIY机器人工房4 小时前
嵌入式面试题:电容滤波,低频高频谁来滤?放置顺序怎么定?
stm32·单片机·嵌入式硬件·diy机器人工房
d111111111d9 小时前
STM32外设--SPI读取W25Q64(学习笔记)硬件SPI
笔记·stm32·单片机·嵌入式硬件·学习
pq113_610 小时前
开源软件学习笔记 - 移植SFUD
笔记·stm32·sfud·ft4222h
steins_甲乙11 小时前
stm32入门篇(6)
stm32·单片机·嵌入式硬件
一支闲人1 天前
CAN:STM32 CAN外设2
stm32·单片机·基础知识·can协议·stm外设