DX-WF24 Wi-Fi/蓝牙二合一模组单片机AT使用记录

驱动源文件dx_wf_24.c驱动头文件dx_wf_24.h

前言介绍

大夏龙雀科技 DX-WF24 是 Wi-Fi/蓝牙二合一模组,拥有 802.11 b/g/n 协议和 BLE 5.2 蓝牙协议,模块内置标准串口协议。设备可以通过模块跟移动端、PC 端、主设备端、路由器等进行数据交互,并可以使用 AT 命令对模块参数进行配置和修改。从而使设备以极低的成本、极快的速度加入物联网,让设备更方便、智能。

基本参数

模块串口默认参数:115200bps/8/n/1(波特率/数据位/无校验/停止位)

串口使用

使用AT指令

命令格式说明

AT+Command=<param1,param2,param3><CR><LF>
  • 所有的指令以 AT 开头,<CR><LF> 结束,在本文档中表现命令和响应的表格中,省略了 <CR><LF>,仅显示命令和响应。
  • 所有 AT 命令字符都为大写。
  • <> 内为可选内容,如果命令中有多个参数,以逗号“,”隔开,实际命令中不包含尖括号。
  • <CR> 为回车字符 \r,十六进制为 0X0D
  • <LF> 为换行字符 \n,十六进制为 0X0A
  • 指令执行成功,返回相应命令以 OK 结束,失败返回 ERROR=<>,“<>”内容为对应错误码。

回应格式说明

+Indication:<param1,param2,param3><CR><LF>
  • 回应指令以加号“+”开头,<CR><LF> 结束
  • 等于“:”后面为回应参数
  • 如果回应参数中有多个参数,会以逗号“,”隔开

WIFI配置AT命令

注意: 模块默认为 Station 模式

  1. 假设目标 AP 的 SSID 是 abc,密码是 0123456789,则命令是:AT+CWJAP=abc,0123456789
  2. 如果多个 AP 有相同的 SSID 是 abc,可通过查询目标 AP 的 BSSID,找到目标 AP:
    AT+CWJAP=abc,0123456789,11:22:33:44:55:66

1. 测试模块

  • 命令:

    AT
  • 响应:

    OK

2. 重启模块

  • 命令:

    AT+RST
  • 响应:

    OK power on

3. 查询设备的Wi-Fi状态

  • 查询命令:

    AT+CWSTATE?
  • 响应:

    +CWSTATE:<state>,<ssid>
    OK
  • 说明:

    • <state>:当前 Wi-Fi 状态

      • 0: Station 尚未进行任何 Wi-Fi 连接
      • 1: Station 已连接上 AP,但尚未获取 IPv4 地址
      • 2: Station 已连接上 AP,并已经获取 IPv4 地址
      • 3: Station 正在进行 Wi-Fi 连接或 Wi-Fi 重连
      • 4: Station 处于 Wi-Fi 断开状态
    • <ssid>:所连接 AP 的 SSID

4. 设置Station需连接的AP

  • 设置命令:

    AT+CWJAP=<ssid>,<pwd>[,<bssid>]
  • 响应:

    OK
    +CWJAP:1,<ssid>,<ip>

MQTT配置AT命令

1. 查询MQTT连接属性

  • 查询命令:

    AT+MQTTCONNCFG?
  • 响应:

    +MQTTCONNCFG:<keepalive>,<disable_clean_session>,<lwt_topic>,<lwt_msg>,<lwt_qos>,<lwt_retain>
    OK
  • 说明:

    • <keepalive>: MQTT ping超时时间,范围:[0,7200]秒,默认:120秒。
    • <disable_clean_session>: MQTT清理会话标志。

2. 设置MQTT连接属性

  • 设置命令:

    AT+MQTTCONNCFG=<keepalive>,<disable_clean_session>,<lwt_topic>,<lwt_msg>,<lwt_qos>,<lwt_retain>
  • 响应:

    OK
  • 说明:

    • <keepalive>: MQTT ping超时时间,范围:[0,7200]秒,默认:120秒。
    • <disable_clean_session>: MQTT清理会话标志。

      • 1:使能清理会话(默认)
      • 0:禁用清理会话
    • <lwt_topic>: 遗嘱主题,最大长度:64字节。
    • <lwt_msg>: 遗嘱消息,最大长度:64字节。
    • <lwt_qos>: 遗嘱QoS。

      • 0:最多一次(默认)
      • 1:最少一次
      • 2:只有一次
    • <lwt_retain>: 遗嘱retain。

      • 0:关闭(默认)
      • 1:开启
  • 备注: 该指令需在未连接MQTT服务器的状态下使用。
  • 使用示例:

    发送:AT+MQTTCONNCFG=120,1,TTT,456,0,0
    返回:
    OK

3. 设置MQTT客户端ID

  • 设置命令:

    AT+MQTTLONGCLIENTID=<client_id>
  • 响应:

    OK
  • 说明:

    • <client_id>:客户端ID,最长为100个字节。
  • 举例:

    发送:AT+MQTTLONGCLIENTID=123456
    返回:
    OK

4. 设置MQTT登录用户名

  • 设置命令:

    AT+MQTTLONGUSERNAME=<username>
  • 响应:

    OK
  • 说明:

    • <username>:用户名,最长为64个字节。
  • 备注: MQTT服务器无用户名和密码验证时,跳过该步骤。
  • 示例:

    发送:AT+MQTTLONGUSERNAME=TEST123
    返回:
    OK

5. 设置MQTT密码

  • 设置命令:

    AT+MQTTLONGPASSWORD=<password>
  • 响应:

    OK
  • 说明:

    • <password>:密码,最长为64个字节。
  • 备注: MQTT服务器无用户名和密码验证时,跳过该步骤。
  • 示例:

    发送:AT+MQTTLONGPASSWORD=123456
    返回:
    OK

6. 连接MQTT服务器

  • 设置命令:

    AT+MQTTCONN=<host>,<port>,<reconnect>
  • 响应:

    OK
    +MQTTCONNECTED:<host>,<port>,<reconnect>
  • 说明:

    • <host>:MQTT服务器IP,最大长度:128字节。
    • <port>:MQTT服务器端口号,范围:[0,65535]
    • <reconnect>:自动重连。

      • 0: MQTT不自动重连(默认)
      • 1: MQTT自动重连
  • 使用示例:

    发送:AT+MQTTCONN=192.168.0.124,1883,0
    返回:
    OK
    +MQTTCONNECTED:192.168.0.124,1883,0

7. 发布MQTT主题消息

  • 设置命令:

    AT+MQTTPUBRAW=<topic>,<length>,<qos>,<retain>
  • 响应:

    OK
    >
  • 说明:

    • <topic>:MQTT topic,最大长度:128字节。
    • <length>:MQTT消息长度,最大长度:1000
    • <qos>:发布消息的QoS。

      • 0:最多一次(默认)
      • 1:最少一次
      • 2:只有一次
    • <retain>:发布retain。

      • 0:关闭(默认)
      • 1:开启
  • 备注: retain=1时,服务器为该主题存储一条最新的保留消息,消息发布后才上线的客户端在订阅主题时仍可以接收到该消息。
  • 示例:

    发送:AT+MQTTPUBRAW=wf24,12,0,0
    返回:
    OK
    >
    发送数据后返回:+MQTTPUB:OK

8. 订阅MQTT主题

  • 设置命令:

    AT+MQTTSUB=<topic>,<qos>
  • 响应:

    OK
  • 说明:

    • <topic>:订阅的topic,主题最大长度:120字节,订阅的最大数量:8个。
    • <qos>:订阅的QoS。

      • 0:最多一次(默认)
      • 1:最少一次
      • 2:只有一次
  • 举例:

    发送:AT+MQTTSUB=phone1,0
    返回:
    OK
    (若已订阅过该主题后输入该指令,则返回:ALREADY SUBSCRIBE)

9. 取消订阅MQTT Topic

  • 设置命令:

    AT+MQTTUNSUB=<topic>
  • 响应:

    OK
  • 说明:

    • <topic>:订阅的topic,主题最大长度:120字节。
  • 举例:

    发送:AT+MQTTUNSUB=phone1
    返回:
    OK
    (若未订阅过该topic,则返回:NO UNSUBSCRIBE OK)

10. 断开MQTT连接

  • 设置命令:

    AT+MQTTCLEAN
  • 响应:

    OK
    +MQTTDISCONNECTED
  • 举例:

    发送:AT+MQTTCLEAN
    返回:
    OK
    +MQTTDISCONNECTED

官方连接程序CONNECT_TO_MQTT 函数执行流程分析

表格1:主要步骤执行表格

序号执行操作AT指令/操作预期响应超时时间说明
1清理MQTT连接AT+MQTTCLEANOK1000ms断开现有MQTT连接
2恢复出厂设置AT+RESTOREOK5000ms重置模块所有配置
3测试模块通讯ATOK1000ms验证AT指令可用
4设置Wi-Fi模式AT+CWMODE=0OK2000ms设为Station客户端模式
5连接Wi-Fi网络AT+CWJAP=<ssid>,<password>+CWJAP:1,5000ms连接传入的Wi-Fi
6设置MQTT客户端IDAT+MQTTLONGCLIENTID=WF-TEST2OK1000ms固定ID"WF-TEST2"
7连接MQTT服务器AT+MQTTCONN=broker.emqx.io,1883,0MQTTCONNECTED:2000ms连接公共EMQX服务器
8订阅主题AT+MQTTSUB=test-app,0OK2000ms订阅主题"test-app"
9准备发布消息AT+MQTTPUBRAW=test-w,32,0,0OK2000ms准备发布到"test-w"
10发送提示信息发送"MQTT_Connected\r\n"调试/状态提示
11清理缓冲区WIFI_BUFF_MEMSET()清空接收缓存
12设置连接标志CONNECT_FLEG = 1标记连接成功

表格2:配置参数表格

参数类型参数名称设定值说明
Wi-Fi配置工作模式0 (STA)仅作为客户端
SSID函数参数id外部传入Wi-Fi名称
密码函数参数password外部传入Wi-Fi密码
MQTT服务器地址broker.emqx.ioEMQX公共服务器
端口1883标准MQTT端口
自动重连0禁用自动重连
MQTT客户端客户端IDWF-TEST2固定标识符
订阅主题test-app接收消息的主题
发布主题test-w发送消息的主题
QoS等级0最多一次
消息长度32字节发布消息长度