mqtt_simple例程 nrf9160做主控連接阿里云——( 五 )


mqtt_simple例程 nrf9160做主控連接阿里云——

文章插圖
Url:a1tETt7fUG1.iot-as-mqtt.cn-shanghai.aliyuncs.com
port:1883
mqtt_simple例程 nrf9160做主控連接阿里云——

文章插圖
可見服務器回復20 02 00 00,接受我們連接了(其中20,表示報文類型,20是回復包,02是剩余長度——后面還有兩個字節,00相當于站位字節,最后以一個00,表示已經接受)
MQTT協議定義的響應命令如下:
mqtt_simple例程 nrf9160做主控連接阿里云——

文章插圖
阿里云上也顯示我們的設備在線:
mqtt_simple例程 nrf9160做主控連接阿里云——

文章插圖
如果連接包存在錯誤會是怎么樣的結果,我們來看一下:
mqtt_simple例程 nrf9160做主控連接阿里云——

文章插圖
04提示我們無效的密碼或者用戶名 , 因為我們把原來的39改為了00,密碼錯誤 。
以上就是對CONNECT報文的講解,那么我在上一篇博客使用了一個阿里云的計算器,其實就是完成上面我們復制的計算,只要復制我們的設備信息,就可以一鍵生成我們的密碼名稱等 。工具連接如下:阿里云參數小工具 (lovemcu.cn),這里值得注意的是每一個云的情況不一樣 , 要去根據云的文檔確定,但是報文格式是一樣的 。
上面是為了使用PC端工具進行連接,以便于我們更好的理解CONNNECT報文包,那下我們來使用nrf9160連接阿里云 , 本節獲取的云連接信息如下:
3.3.1、連接信息(有三元組計算得到)綜上所述連接信息如下:
clientid:T123|securemode=3,signmethod=hmacmd5|username:T123&a1tETt7fUG1password: 86a087f11cad5c325127ae5f79305109三、mqtt_simple程序修改(NCSV1.8)使用vs code創建一個mqtt_simple工程,不會的請參看我起那么的不可或者頂部的官方中文博客連接,這就不細講了,然后我們對程序進行修改 。
1、prj.conf文件修改1)、打開工程中的prj.conf配置文件 , 修改聯網方式,中國只有NB網絡,從LTE修改為NBCONFIG_LTE_NETWORK_MODE_NBIOT_GPS=y
mqtt_simple例程 nrf9160做主控連接阿里云——

文章插圖
2)、加入PDN定義,為了把PDN的函數編譯進來CONFIG_PDN=yCONFIG_PDN_LEGACY_PCO=yCONFIG_PDN_SYS_INIT=y編譯后,對于1.8的NCS需要確定pdn.c文件中的AT%%XEPCO=0處為2個%分號,如果不是,請修改為
mqtt_simple例程 nrf9160做主控連接阿里云——

文章插圖
修改后如下:
mqtt_simple例程 nrf9160做主控連接阿里云——

文章插圖
然后再編譯
3)、加入連接參數和推送訂閱的主題CONFIG_MQTT_PUB_TOPIC="/a1tETt7fUG1/T123/user/get"CONFIG_MQTT_SUB_TOPIC="/a1tETt7fUG1/T123/user/update"CONFIG_MQTT_CLIENT_ID="T123|securemode=3,signmethod=hmacmd5|"CONFIG_MQTT_BROKER_HOSTNAME="a1tETt7fUG1.iot-as-mqtt.cn-shanghai.aliyuncs.com"CONFIG_MQTT_BROKER_PORT=1883#對于端口1883和前面的等號不要有空格,這一點要注意
發布和訂閱的主題需要在阿里云中,即我們前面建立的設備端下topic中去找一個有訂閱和發布權限的類型即可(不知道在哪的可以去看上一篇文章) 。
mqtt_simple例程 nrf9160做主控連接阿里云——

文章插圖
如圖中間的${deviceName}換為我們的設備名T123 。
4)、用戶名和密碼緩沖區配置加入如果不加入這 , 當你用戶名和密碼過長時會包-12的錯誤 , 我們給他大一點的空間
CONFIG_MQTT_MESSAGE_BUFFER_SIZE=512CONFIG_MQTT_PAYLOAD_BUFFER_SIZE=5122、程序修改打開main.c找到client_init()函數
添加如下代碼:
#define CONFIG_MQTT_BROKER_USERNAME_test"T123&a1tETt7fUG1"#define CONFIG_MQTT_BROKER_PASSWORD_test"86a087f11cad5c325127ae5f79305109"#這加成宏定義#以下放置在client_init中struct mqtt_utf8 password_test={.utf8=CONFIG_MQTT_BROKER_PASSWORD_test,.size=strlen(CONFIG_MQTT_BROKER_PASSWORD_test)};struct mqtt_utf8 user_name_test={.utf8=CONFIG_MQTT_BROKER_USERNAME_test,.size= strlen(CONFIG_MQTT_BROKER_USERNAME_test)};#以下直接修改client->password =&password_test;client->user_name =&user_name_test;修改后:
mqtt_simple例程 nrf9160做主控連接阿里云——

文章插圖
3、mqtt_simple鏈接阿里云然后我們就編譯下載:
mqtt_simple例程 nrf9160做主控連接阿里云——

文章插圖
連接成功過,然后再阿里云端可以看到設備在線:
mqtt_simple例程 nrf9160做主控連接阿里云——

推薦閱讀