* 导师视频讲解:[去听课](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
```
命令执行结果如图所示。

<br/>
## **硬件准备**
本课程配套的开发将用户MQTT协议的其中一个客户端,按如下所示做好准备。
* 把拨码开关的第3和4位分别打到UTX和URX端,然后插入配套的NB-IoT卡,如图所示。

注意,NB-IoT卡的缺口要朝外,如图所示。

###
* 用配套的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)
###
* 找到下载地址,如图所示。


下载所需要的版本软件

###
* 下载后直接安装即可
<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

###
* 禁用休眠:AT+QSCLK=0

###
* 打开MQTT连接:AT+QMTOPEN=0,"**1.15.27.206**",1883

###
* 连接服务器:AT+QMTCONN=0,"iotdevice"

###
* 订阅:AT+QMTSUB=0,1,"topic/report",2

###
* 订阅:AT+QMTSUB=0,1,"topic/write",2

###
* 取消订阅(退订):AT+QMTUNS=0,2,"topic/write"

###
* 发布消息:AT+QMTPUB=0,0,0,0,"topic/pub",13
内容(注意不能带回车换行符):{"value":123}

###
* 远程服务器显示完整的连接、订阅、退订和发布流程

<br/>
# **使用手机 App**
可以在手机App应用商店中下载一个 MQTT 测试工具。这里我们以苹果手机为例,到应用商店中下载并安装MQTTool App。**此工具也可用作MQTT客户端**。
>[info] 使用Android手机的读者在App应用商店搜索MQTT即可
* 输入Host地址、Client Id,然后点击 "Connect"

###
* 连接远程服务器成功

###
* APP上订阅主题:topic/pub

###
* APP上订阅主题成功

###
* 可以看到远程服务器 mosquitto 的提示消息

###
* NB-IoT开发板重新发送数据:AT+QMTPUB=0,0,0,0,"topic/pub",13

###
* 发送内容

###
* 手机APP上接收到消息

###
* 通过手机APP上发布消息,主题:topic/report

###
* 开发板收到消息

###
* 关闭MQTT连接:AT+MQTDISC=0

###
* 最后,必须关闭远程服务器的服务程序:组合键 ctrl+c

<br/>
<br/>
## **商务合作**
如有以下需求,可扫码添加管理员好友,注明“**商务合作**”
* 项目定制开发,技术范围:**NB-IoT**、**CATn(4G)**、**WiFi**、**ZigBee**、**BLE Mesh**以及**STM32**、**嵌入式Linux**等;
* 入驻平台,成为讲师;
* 接项目赚外快;
* 善学坊官网:[www.sxf-iot.com](https://www.sxf-iot.com/)

(非商务合作**勿扰**,此处**非**技术支持)
- 课程介绍
- 配套资源下载
- 配套开发套件简介
- 简介
- 硬件组成 & 技术参数
- 电路原理图 & 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. 数据通信任务说明
- 版权声明与免责声明