Wi-Fi設(shè)備實(shí)現(xiàn)網(wǎng)關(guān)協(xié)助子設(shè)備連接阿里云示例
1. 案例簡介
linksdk_gateway_demo是Link SDK網(wǎng)關(guān)代理子設(shè)備上云最簡示例。
其完成的主要功能包括:
系統(tǒng)板級初始化
內(nèi)核基礎(chǔ)組件初始化
網(wǎng)絡(luò)配置
網(wǎng)絡(luò)配置成功(獲取ip)后創(chuàng)建Link SDK主線程
Link SDK參數(shù)配置
Link SDK初始化
創(chuàng)建獨(dú)立線程用于MQTT保活及QoS1消息重發(fā)
創(chuàng)建獨(dú)立線程用于下行數(shù)據(jù)接收
初始化子設(shè)備模塊
批量添加子設(shè)備topo關(guān)系
子設(shè)備批量上線
子設(shè)備下線
該示例的運(yùn)行依賴下述基本功能完成對接:
AOS API
LwIP
MbedTLS
Link SDK
2. 基礎(chǔ)知識
2.1 基礎(chǔ)目錄結(jié)構(gòu)
.
├── main.c # 網(wǎng)絡(luò)配置及SDK啟動入口
├── maintask.c # 系統(tǒng)主任務(wù)入口處理,入口**aos_maintask**
├── Makefile # aos make編譯時(shí)入口
├── package.yaml # 編譯系統(tǒng)配置文件
├── README.md # 本說明文檔
├── SConstruct # Makefile => Scon => aostools
└── subdev_basic_demo.c # Link SDK 網(wǎng)關(guān)(代理子設(shè)備上云)演示示例
3. 物料清單
3.1 HaaS100 硬件
4. 案例實(shí)現(xiàn)
4.1 硬件連接
該案例只需要連接電源線以及串口線,如下圖所示:
注意:由于本案例需要使用Wi-Fi聯(lián)網(wǎng),需將標(biāo)有2.4G/5.8G的天線連接到HaaS100 靠近USB口的天線端子上,如上圖所示。
4.2 軟件實(shí)現(xiàn)
4.2.1 云端創(chuàng)建產(chǎn)品
請先點(diǎn)擊登錄物聯(lián)網(wǎng)平臺(未注冊阿里云賬戶的用戶,請先完成賬戶注冊),按下面步驟一步步去打造。
1、創(chuàng)建項(xiàng)目
注冊登入后,如下圖所示,前往管理控制臺。
點(diǎn)擊公共實(shí)例,進(jìn)行產(chǎn)品創(chuàng)建。
2、創(chuàng)建網(wǎng)關(guān)演示產(chǎn)品
點(diǎn)擊創(chuàng)建產(chǎn)品,見下圖所示,這里創(chuàng)建了一個(gè)名稱“haas_gateway”產(chǎn)品。
3、創(chuàng)建網(wǎng)關(guān)設(shè)備
在設(shè)備列表中增加對應(yīng)產(chǎn)品的設(shè)備。
4、創(chuàng)建子設(shè)備演示產(chǎn)品
點(diǎn)擊創(chuàng)建產(chǎn)品,見下圖所示,這里創(chuàng)建了一個(gè)名稱“haas_subdev”產(chǎn)品。
5、創(chuàng)建多個(gè)子設(shè)備
在設(shè)備列表中增加對應(yīng)產(chǎn)品的設(shè)備。
創(chuàng)建后的設(shè)備設(shè)備證書(ProductKey、DeviceName、DeviceSecret)信息需要同步到設(shè)備端的開發(fā)代碼段中,在4.2.2章節(jié)會介紹。待設(shè)備端開發(fā)結(jié)束,就可以在物聯(lián)網(wǎng)平臺中參看設(shè)備在線狀態(tài)。
4.2.2 AliOS Things開發(fā)環(huán)境搭建
開發(fā)環(huán)境的搭建請參考《AliOS Things集成開發(fā)環(huán)境使用說明之搭建開發(fā)環(huán)境》,其中詳細(xì)的介紹了AliOS Things 3.3的IDE集成開發(fā)環(huán)境的搭建流程。
4.2.3 linksdk_gateway_demo代碼下載
物模型上云的代碼下載請參考《AliOS Things集成開發(fā)環(huán)境使用說明之創(chuàng)建工程》,其中,選擇解決方案:“l(fā)inksdk_gateway_demo”選擇開發(fā)板:HaaS100。
4.2.4 設(shè)備端代碼修改
演示用例路徑為solutions/{your_project}/data_model_basic_demo.c 此演示用例演示Link SDK物模型單品上云的功能。注意:{your_project} 為studio中創(chuàng)建的工程名(基于linksdk_gateway_demo模板)。
1.修改網(wǎng)關(guān)設(shè)備證書(ProductKey、DeviceName、DeviceSecret),使用4.2.1章節(jié)得到的設(shè)備證書(ProductKey、DeviceName、DeviceSecret)填入代碼如下區(qū)域:
int32_t demo_mqtt_start(void **handle)
{
...
/* TODO: 替換為自己設(shè)備的設(shè)備證書(ProductKey、DeviceName、DeviceSecret) */
char *product_key = "替換為上章節(jié)創(chuàng)建的product_key";
char *device_name = "替換為上章節(jié)創(chuàng)建的device_name";
char *device_secret = "替換為上章節(jié)創(chuàng)建的device_secret";
...
2.修改子設(shè)備證書(ProductKey、DeviceName、DeviceSecret),使用4.2.1章節(jié)得到的設(shè)備證書(ProductKey、DeviceName、DeviceSecret)填入代碼如下區(qū)域:
aiot_subdev_dev_t g_subdev[] = { { "替換為上章節(jié)創(chuàng)建的子設(shè)備1的product_key", "替換為上章節(jié)創(chuàng)建的子設(shè)備1的product_secret", "替換為上章節(jié)創(chuàng)建的子設(shè)備1的device_name", "替換為上章節(jié)創(chuàng)建的子設(shè)備1的device_secret" }, { "替換為上章節(jié)創(chuàng)建的子設(shè)備2的product_key", "替換為上章節(jié)創(chuàng)建的子設(shè)備2的product_secret", "替換為上章節(jié)創(chuàng)建的子設(shè)備2的device_name", "替換為上章節(jié)創(chuàng)建的子設(shè)備2的device_secret" }, ... };
4.2.5 代碼編譯、燒錄
編譯linksdk_gateway_demo的過程如下:
-- 編譯固件可參考《AliOS Things集成開發(fā)環(huán)境使用說明之編譯固件》。
-- 燒錄固件可參考《AliOS Things集成開發(fā)環(huán)境使用說明之燒錄固件》。
4.3 調(diào)試
CLI命令行輸入聯(lián)網(wǎng)命令:
netmgr -t wifi -c ssid password
注意:ssid和password需要替換成自己的路由的ssid及密碼。
連上路由器后會自動連接到阿里云物聯(lián)網(wǎng)平臺。
4.3.1 關(guān)鍵日志
CLI日志:
success to establish mbedtls connection, fd = 3(cost 0 bytes in total, max used 0 bytes)
[104.526][LK-0313] MQTT connect success in 1908 ms
AIOT_MQTTEVT_CONNECT
云端查看創(chuàng)建的主設(shè)備及子設(shè)備是否顯示在線。
5. 總結(jié)
本用例簡單介紹了如何使用AliOS Things及HaaS開發(fā)板進(jìn)行端云一體網(wǎng)關(guān)設(shè)備的開發(fā)。了解更多連云相關(guān)知識請參考Link SDK編程手冊。