* 導師視頻講解:[去聽課](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. 數據通信任務說明
- 版權聲明與免責聲明