NBIoT模組NB35-A開發(3)— 使用UDP模擬CoAP協議連接到EMQ

NBIoT模組NB35-A開發(3)— 使用UDP模擬CoAP協議連接到EMQ

一、直接發送消息到EMQ

先發送一條消息到EMQ再說,關於EMQ的CoAP使用可以參考:https://blog.csdn.net/qq_38113006/article/details/105859481#t5

創建一個UDPsocket

AT+NSOCR=DGRAM,17,0

得到socket編號1
在這裏插入圖片描述
接下來使用這個socket發送到EMQ

AT+NSOST=1,39.96.35.207,5683,47,420369495562b46d71747406746f7069633149633d636c69656e743205753d746f6d08703d736563726574ff313234

在這裏插入圖片描述
然後可以看到,在EMQ平臺訂閱topic1主題的websocket接收到了消息
在這裏插入圖片描述
可以看到,發送成功

二、發送數據解析

我們來看一下我們發送的這一串數據,將其分割開來:

42036949    5562    b46d71747406746f7069633149633d636c69656e743205753d746f6d08703d736563726574    ff    313234

1、第一段數據42036949

第一個字節數據42,用二進制表示爲01000010‬

  • 最高兩位爲版本號,即01,表示CoAP版本爲 V1版本
  • 接下來兩位爲報文形式,即00,表示爲CON報文,需要被確認的請求
  • 然後剩下的四位爲Token的長度,即Token的長度爲2個字節

第二個字節數據03,用二進制表示爲0000‭0011‬‬

  • 這個字節是Method Code,即方法代碼,前3位一部分,後5位一部分,爲了方便描述它被寫成了c.dd結構,這裏即爲0.03,表示PUT。其他的方法:GET ->0.01POST->0.02DELETE->0.04

第三和第四字節數據6949,爲Message ID(消息編號),每個CoAP消息都有一個ID,每條消息要唯一。

2、第二段數據5562

第二段數據爲標記 Token,其長度由第一段數據的Token長度決定,通過token,客戶端收到響應後,取出Token,就可以知道該響應是針對之前哪個請求回覆的。Token是可選的。

3、第三段數據

b46d71747406746f7069633149633d636c69656e743205753d746f6d08703d736563726574

這一長串數據表示的是:/mqtt/topic1?c=client2&u=tom&p=secret,其爲選項 Options,可以看到,這裏面可以有多個選項。

4、第四段數據ff

這是CoAP報文和具體負載之間的分隔符。

5、第五段數據

實際攜帶的數據內容,313234從16進制轉化爲字符串即爲124

數據解析參考自博客:CoAP協議學習筆記 1.2 一張表瞭解 CoAP 協議
和視頻:【COAP】COAP協議詳細講解(二)服務器測試與抓包分析

三、收到的回覆消息

發送數據後,我們可以看到NBIoT收到了6個字節的回覆數據
在這裏插入圖片描述
我們將其讀取出來
在這裏插入圖片描述
得到的數據爲624469495562
同樣的,將其分段解析:

62   44  6949  5562

第一段數據62,用二進制表示爲‭01100010‬

  • 最高兩位爲版本號,即01,表示CoAP版本爲 V1版本
  • 接下來兩位爲報文形式,即10,表示爲ACK報文,應答消息,接受到CON消息的響應。
  • 然後剩下的四位爲Token的長度,即Token的長度爲2個字節

第二段數據44,用二進制表示爲‭01000100‬‬‬

  • 這個字節是Response codes,即響應代碼,前3位一部分,後5位一部分,爲了方便描述它被寫成了c.dd結構,這裏即爲2.04,表示Changed。其他的響應:

    +------------------+--------------------------------+---------------+
    | Code 			   | Description 					| 				|
    +------------------+--------------------------------+---------------+
    | 2.01 (65, 0x41)  | Created 						| Success 		|
    | 2.02 (66, 0x42)  | Deleted 						| 				|
    | 2.03 (67, 0x43)  | Valid 							| 				|
    | 2.04 (68, 0x44)  | Changed 						| 				|
    | 2.05 (69, 0x45)  | Content 						| 				|
    | 2.31 (95, 0x5F)  | Continue 						| 				|
    +------------------+--------------------------------+---------------+
    | 4.00 (128, 0x80) | Bad Request 					| Client Error 	|
    | 4.01 (129, 0x81) | Unauthorized 					| 				|
    | 4.02 (130, 0x82) | Bad Option 					| 				|
    | 4.03 (131, 0x83) | Forbidden 						| 				|
    | 4.04 (132, 0x84) | Not Found 						| 				|
    | 4.05 (133, 0x85) | Method Not Allowed 			| 				|
    | 4.06 (134, 0x86) | Not Acceptable 				| 				|
    | 4.08 (136, 0x88) | Request Entity Incomplete 		| 				|
    | 4.12 (140, 0x8C) | Precondition Failed 			| 				|
    | 4.13 (141, 0x8D) | Request Entity Too Large 		| 				|
    | 4.15 (143, 0x8F) | Unsupported Content-Format 	| 				|
    +------------------+--------------------------------+---------------+
    | 5.00 (160, 0xA0) | Internal Server Error 			| Server Error 	|
    | 5.01 (161, 0xA1) | Not Implemented 				| 				|
    | 5.02 (162, 0xA2) | Bad Gateway 					| 				|
    | 5.03 (163, 0xA3) | Service Unavailable 			| 				|
    | 5.04 (164, 0xA4) | Gateway Timeout 				| 				|
    | 5.05 (165, 0xA5) | Proxying Not Supported 		| 				|
    +------------------+--------------------------------+---------------+
    

第三段數據6949,爲Message ID(消息編號)。
第四段數據5562爲標記 Token,其長度由第一段數據的Token長度決定,通過token,客戶端收到響應後,取出Token,就可以知道該響應是針對之前哪個請求回覆的。Token是可選的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章