NoOneZero 发表于 2024-2-17 10:53

【安信可BW16-Kit】AT指令体验之MQTT

<div class='showpostmsg'># 【安信可BW16-Kit】AT指令体验之MQTT

我用emqx在本地搭建了一个MQTT服务器,搭建过程可以查看官网搭建方式

# 01 连接Wifi

连接WiFi请看上篇帖子

# 02 配置MQTT

命令: ```AT+MQTT=<key>,<data>```
参数2:```<data>```设置的参数
参数1:```<key>```MQTT参数。
1:设置连接的域名或 IP
2:设置服务器端口号
3:设置连接方式(暂时默认 1:使用tcp连接)
4:设置客户端ID
5:设置用户名(最大长度63字节)
6:设置登录密码(最大长度63字节)
7:设置遗嘱消息
格式为
```c
AT+MQTT=7,<LWT_topic>,<LWT_qos>,<LWT_Retained>,<LWTpayload>
LWT_topic:遗嘱主题(不需要遗嘱这里设置为空)
LWT_qos:遗嘱 QOS(0/1/2)
LWT_Retained:遗嘱 retained(0/1)
LWTpayload:遗嘱消息内容
```

## 示例

```shell
AT+MQTT=1,192.168.1.9        // 设置MQTT服务器URL
flash save ok

AI_HalWriteFlash success

OK
After do cmd, available heap 120224
AT+MQTT=2,1883                // 设置MQTT服务器端口
flash save ok

AI_HalWriteFlash success

OK
After do cmd, available heap 120224
AT+MQTT=3,1                // 设置连接方式 TCP
don't need save flash

OK
After do cmd, available heap 120224
AT+MQTT=4,bw16                        // 设置客户端ID
flash save ok

AI_HalWriteFlash success

OK
After do cmd, available heap 120224
AT+MQTT=5,                        // 设置用户名 我这里为空
cmd format error

+MQTT:3
ERROR
After do cmd, available heap 120224
AT+MQTT=6,                        // 设置密码 我这里为空
cmd format error

+MQTT:3
ERROR
After do cmd, available heap 120224
AT+MQTT?                        // 查询 MQTT 连接和配置情况

+MQTT:0,192.168.1.9,1883,1,bw16,,,,0,0,
OK
After do cmd, available heap 120224
AT+MQTT                        // 连接MQTT
not set LWT
MQTT connect config
host:192.168.1.9:1883
username:
password:
clientID:bw16
use tcp

OK
After do cmd, available heap 103680
start MQTT connect
host:192.168.1.9:1883
username:
password:
clientID:bw16
willFlag:0
use tcp
addr=192.168.1.9
Set mqtt status to MQTT_CONNECT
send mqtt connect cmd success
Read packet type is CONNACK
recive MQTT Connected ack
// 连接成功
```

此时,后台会有对应客户端连接


# 03 订阅消息
命令: ```AT+MQTTSUB=<topic>,<qos>```
参数1:```<topic>```要订阅的主题。(最多订阅四个主题)
参数2:```<qos>```qos 等级(0,1,2)。

```c
AT+MQTTSUB=topic,0
Set mqtt status to MQTT_SUBTOPIC
send topic topic cmd success,wait ack
Read packet type is SUBACK
wait subscribe ack success,grantedQoS=0
Set mqtt status to MQTT_RUNNING
recive Subscribe ack,subscribe success

OK
After do cmd, available heap 103136
```
后台显示


## 当订阅消息后,该主题有消息后,就会通过串口显示
### 其他客户端发送消息

### BW16收到主题
```c
Message arrived

+EVENT:MQTT_SUB,topic,18,{ "msg": "hello" }
```

# 04 发布消息
命令: ```AT+MQTTPUB=<topic>,<qos>,<Retained>,<payload>```
参数1:```<topic>```要发布的主题
参数2:```<qos>```qos 等级(0,1,2)。
参数3:```<Retained>```0:普通消息 1:保留消息
参数4:```<payload>```数据内容(最大长度为1024个字节)

```c
AT+MQTTPUB=topic,0,0,hello bw16                // 发送消息
Publish Topic topic:0
Qos0 not need Ack

OK
After do cmd, available heap 103136
Read packet type is PUBLISH
Message arrived

+EVENT:MQTT_SUB,topic,11,hello bw16                // 接收消息
```
### 客户端显示



# 05取消订阅
命令: ```AT+MQTTUNSUB=<topic>```
参数1:```<topic>```要取消订阅的主题

```c
AT+MQTTUNSUB=topic
Read packet type is UNSUBACK
topic:topic set AI_MQTT_RECIVE_UNSUBACK
recive UnSubscribe ack,UnSubscribe success

OK
After do cmd, available heap 103200
```
取消订阅成功
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                               
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>
页: [1]
查看完整版本: 【安信可BW16-Kit】AT指令体验之MQTT