* 导师视频讲解:[去听课](https://www.bilibili.com/video/BV1Cb4y1171H?p=10)
>[success] **技术支持说明**
> 1.**客服**提供简单的技术支持,一般自主学习为主
> 2.可到官方问答社区中提问:[**去提问**](https://bbs.csdn.net/forums/nb-iot)
> 3.工程师**会尽快**解答社区问题,但他们是一线开发,【**难以保证**】解答时效,解答辛苦,感谢理解!
<br/>
# **开发环境准备**
<br/>
## **登录远程服务器**
依照前述方法通过PuTTY登录到远程服务器,并且其次输入如下命令运行 mosquitto服务,此服务将用作MQTT协议的服务端。
```
./killall
./mosquitto -v
```
命令执行结果如图所示。
![](https://img.kancloud.cn/fa/98/fa98a7d4a08d42ddfed796b2229f3183_856x472.png =400x)
<br/>
## **硬件准备**
本课程配套的开发将用户MQTT协议的其中一个客户端,按如下所示做好准备。
* 把拨码开关的第3和4位分别打到UTX和URX端,然后插入配套的NB-IoT卡,如图所示。
![](https://img.kancloud.cn/f2/93/f29311a2564ef5352f62c2a570508295_1671x1884.png =250x)
注意,NB-IoT卡的缺口要朝外,如图所示。
![](https://img.kancloud.cn/e2/d9/e2d9c3f34a6a15055f81fb75741a6849_990x982.png =150x)
###
* 用配套的Micro USB线把开发板与电脑连接。
<br/>
## **安装MQTT测试工具MQTT.fx**
上述的开发板可以作为MQTT的一个客户端,还需要另外安装一个Windows PC端的客户端,即共两个MQTT客户端。
* MQTT.fx下载地址:[https://mqttfx.jensd.de/index.php/download](https://mqttfx.jensd.de/index.php/download)
###
* 找到下载地址,如图所示。
![](https://img.kancloud.cn/01/3f/013f344d1ac5011228eabb8d518e6cdf_1872x1256.png =300x)
![](https://img.kancloud.cn/d1/2c/d12c3b0b16e8e3bb37fa98703e38f911_1660x1178.png =300x)
下载所需要的版本软件
![](https://img.kancloud.cn/6b/4c/6b4c2aab99b83121958610957585a939_1028x684.png =200x)
###
* 下载后直接安装即可
<br/>
# **MQTT 协议**
<br/>
## **MQTT的QoS**
  MQTT包含了一套保证消息稳定传输的机制,包括消息应答、存储和重传。在这套机制下,有三种不同层次QoS(Quality of Service):
* QoS0,At most once,至多一次;
* QoS1,At least once,至少一次;
* QoS2,Exactly once,确保只有一次。
  QoS 是消息的发送方(Sender)和接受方(Receiver)之间达成的一个协议:
  QoS0 代表,Sender 发送的一条消息,Receiver 最多能收到一次,也就是说 Sender 尽力向 Receiver 发送消息,单如果发送失败,也就算了;
  QoS1 代表,Sender 发送的一条消息,Receiver 至少能收到一次,也就是说 Sender 向 Receiver 发送消息时,如果发送失败,会继续重新发送,直到 Receiver 收到这个消息为止,但是因为重传的原因,Receiver 有可能会收到多条重复的消息;
  QoS2 代表,Sender 发送的一条消息,Receiver 确保能收到而且只会收到一次,也就是说 Sender 尽力向 Receiver 发送消息,如果发送失败,会继续重新发送,直到 Receiver 收到这个消息为止,同时保证 Receiver 不会因为消息重传而收到重复的消息。
<br/>
## **MQTT.fx连接MQTT服务器**
本部分详细内容请观看导师视频讲解:[去听课](https://www.bilibili.com/video/BV1Cb4y1171H?p=10)
<br/>
## **开发板连接MQTT服务器**
**AT 指令说明**
| AT 指令 | 描述 | 数据格式 | 参数说明 |
| --- | --- | --- | --- |
| AT | 测试模块是否正常 | AT | 无 |
| AT+QSCLK| 配置模块休眠模式 | AT+QSCLK=n |0: 禁用休眠 <br/> 1: 使能休眠,并通过PSM\_EINT下降沿唤醒深度休眠 <br/> 2: 仅使能轻休眠 |
| AT+QMTOPEN| 创建MQTT连接 | AT+QMTOPEN=0,"host",port |服务器地址及端口 |
| AT+QMTCONN| 发起连接 | AT+QMTCONN=0,"clientid" |客户端ID |
| AT+QMTSUB| 订阅主题 | AT+QMTSUB=0,id,"topic",qos | id: 消息ID <br/>topic: 主题 <br/>qos: 服务质量 |
| AT+QMTUNS| 退订主题 | AT+QMTUNS=0,id,"topic" | id: 消息ID <br/>topic: 主题 |
| AT+QMTPUB| 发布消息 | AT+QMTPUB=0,0,0,0,topic,len | topic: 主题 <br/> len: 数据长度 |
| AT+QMTDISC| 断开连接 | AT+QMTDISC=0 | 无 |
<br/>
**AT 指令测试**
* 模块测试:AT
![](https://img.kancloud.cn/d1/8f/d18f2d122a290b35f41a0decd9af854b_1281x953.png =500x)
###
* 禁用休眠:AT+QSCLK=0
![](https://img.kancloud.cn/f8/04/f8042517d9dc241c566b3e5614bd3c29_1278x951.png =500x)
###
* 打开MQTT连接:AT+QMTOPEN=0,"**1.15.27.206**",1883
![](https://img.kancloud.cn/79/69/79693c6ddd2b84f64c057225f78a5ab9_1272x966.png =500x)
###
* 连接服务器:AT+QMTCONN=0,"iotdevice"
![](https://img.kancloud.cn/5a/48/5a48a8da8f5f525405339c57f40283e3_1271x965.png =500x)
###
* 订阅:AT+QMTSUB=0,1,"topic/report",2
![](https://img.kancloud.cn/59/6b/596b1c113aa4095391de48cce4254976_1271x968.png =500x)
###
* 订阅:AT+QMTSUB=0,1,"topic/write",2
![](https://img.kancloud.cn/41/9d/419dbcaee5dd5e87aeced1d63cf9c4e1_1269x968.png)
###
* 取消订阅(退订):AT+QMTUNS=0,2,"topic/write"
![](https://img.kancloud.cn/73/0a/730aadf24f004c3a64c8ed0c61f8695e_1271x965.png =500x)
###
* 发布消息:AT+QMTPUB=0,0,0,0,"topic/pub",13
内容(注意不能带回车换行符):{"value":123}
![](https://img.kancloud.cn/38/24/3824effe05ca402b789f21b36362e337_1269x963.png =500x)
###
* 远程服务器显示完整的连接、订阅、退订和发布流程
![](https://img.kancloud.cn/59/d2/59d23a014f40eb29b52641736ec9138a_915x1027.png =500x)
<br/>
# **使用手机 App**
可以在手机App应用商店中下载一个 MQTT 测试工具。这里我们以苹果手机为例,到应用商店中下载并安装MQTTool App。**此工具也可用作MQTT客户端**。
>[info] 使用Android手机的读者在App应用商店搜索MQTT即可
* 输入Host地址、Client Id,然后点击 "Connect"
![](https://img.kancloud.cn/f2/8a/f28a91faf92e67b862f8be672369402c_828x1792.png =230x)
###
* 连接远程服务器成功
![](https://img.kancloud.cn/9b/73/9b732515c2d0d22b613916ee1945b4ee_828x1792.png =230x)
###
* APP上订阅主题:topic/pub
![](https://img.kancloud.cn/fb/9e/fb9e7c2f528d62e302cc9126fe2fc0bb_828x1792.png =230x)
###
* APP上订阅主题成功
![](https://img.kancloud.cn/84/17/8417c2fe3e7e841167b0d968595fed63_828x1792.png =230x)
###
* 可以看到远程服务器 mosquitto 的提示消息
![](https://img.kancloud.cn/39/6c/396c3b16c6939bbbbdab65fc481da533_955x521.png =500x)
###
* NB-IoT开发板重新发送数据:AT+QMTPUB=0,0,0,0,"topic/pub",13
![](https://img.kancloud.cn/e6/76/e676e552418159cdb68a8fd3f6ab6ca1_1269x965.png =500x)
###
* 发送内容
![](https://img.kancloud.cn/60/6e/606e5af58dff3a3e0faada98e40f6d06_1268x964.png =500x)
###
* 手机APP上接收到消息
![](https://img.kancloud.cn/54/27/542745e7fc9d2f023466e0d0b843c7c2_828x1792.png =230x)
###
* 通过手机APP上发布消息,主题:topic/report
![](https://img.kancloud.cn/f2/73/f27338a48a08b3c45dd6ac067078503d_828x1792.png =230x)
###
* 开发板收到消息
![](https://img.kancloud.cn/57/b3/57b37d92f6e8347b431c393396e1cef1_1270x965.png =500x)
###
* 关闭MQTT连接:AT+MQTDISC=0
![](https://img.kancloud.cn/d2/40/d24020a73932371a131224af0717fbba_1270x964.png =500x)
###
* 最后,必须关闭远程服务器的服务程序:组合键 ctrl+c
![](https://img.kancloud.cn/e2/a1/e2a1a5f8d3c61efe2df9d5336a703472_960x524.png =500x)
<br/>
<br/>
## **商务合作**
如有以下需求,可扫码添加管理员好友,注明“**商务合作**”
* 项目定制开发,技术范围:**NB-IoT**、**CATn(4G)**、**WiFi**、**ZigBee**、**BLE Mesh**以及**STM32**、**嵌入式Linux**等;
* 入驻平台,成为讲师;
* 接项目赚外快;
* 善学坊官网:[www.sxf-iot.com](https://www.sxf-iot.com/)
![](https://img.kancloud.cn/ca/73/ca739f92cab220a3059378642e3bd502_430x430.png =150x)
(非商务合作**勿扰**,此处**非**技术支持)
- 课程介绍
- 配套资源下载
- 配套开发套件简介
- 简介
- 硬件组成 & 技术参数
- 电路原理图 & PCB图
- 拨码开关使用说明
- 第一部分:无线通信 开发指南
- 1.1.1 NB-IoT:技术简介
- 1.1.2 NB:CH34x USB转串口驱动安装
- 1.1.3 NB:AT 指令开发与测试
- 1.1.4 NB:基础指令集简介
- 1.1.5 NB:云端服务器
- 1.1.5.1 PuTTY 简介与安装
- 1.1.5.2 登录云端服务器
- 1.1.6 NB:移远官方工具简介
- 1.1.7 NB:使用UDP协议与云端服务器通信
- 1.1.8 NB:使用TCP协议与云端服务器通信
- 1.1.9 NB:使用MQTT协议与云端服务器通信
- 进阶课程
- 第二部分:STM32 开发指南
- 2.1 搭建开发环境
- 2.1.1 Keil MDK 简介与安装
- 2.1.2 STM32 Pack 简介与安装
- 2.1.3 CH34x 驱动简介与安装
- 2.1.4 其他开发工具
- 2.2 STM32 开发基础
- 2.2.1 新建工程
- 2.2.2 实现第1个程序
- 2.2.3 Hex 文件烧录详解
- 2.3 移植官方标准工程模板
- 2.4 GPIO实验——LED灯
- 2.5 系统延时应用
- 2.6 GPIO实验——按键
- 2.7 GPIO中断实验——按键触发
- 2.8 使用定时器TIM3
- 2.9 串口通信实验
- 2.10 ADC 实验
- 2.11 OLED显示器实验
- 2.12 SDK 设计思想
- 2.13 SDK 架构解析
- 2.14 多任务应用
- 2.15 输入型任务:按键输入
- 2.16 输入型任务:串口接收
- 课外篇:项目实战
- 基于STM32+NB-IoT的温湿度采集
- 系统简介
- 系统搭建
- 系统详解
- 1.代码编译与架构说明
- 2.DHT11温湿度传感器
- 3. 数据通信任务说明
- 版权声明与免责声明