Skip to content

Commit 9a48db8

Browse files
committed
[linkkit] add linkkit sdk source code
1 parent 6ed55ad commit 9a48db8

575 files changed

Lines changed: 202182 additions & 1 deletion

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
framework/protocol/linkkit/sdk/iotx-sdk-c_clone
21
trace_test
32
activate
43
out
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
*.so
2+
*.exe
3+
.settings/
4+
*.cproject
5+
*.project
6+
*.o
7+
*.d
8+
*.lo
9+
*.gcno
10+
*.gcda
11+
/INSTALL
12+
cscope.*
13+
*.swp
14+
*.swo
15+
ltmain.sh
16+
*.kv
17+
*.bak
18+
/Default/
19+
.O/
20+
.config
21+
output/
22+
ota.bin
23+
src/packages/*.git/hooks/*.sample
24+
vs_build/
25+
.vs/
26+
doc/html/
27+
compile.log
28+
CMakeLists.txt.user
29+
qt_build/
30+
.vscode/
31+
GPATH
32+
GRTAGS
33+
GTAGS
34+
iotx-sdk-c-test/
35+
aos_board_conf.mk
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
2+
MESSAGE (FATAL_ERROR "in-tree build not allowded")
3+
endif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
4+
5+
CMAKE_MINIMUM_REQUIRED (VERSION 2.8)
6+
PROJECT (iotkit-embedded-V2.2 C)
7+
8+
SET (EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
9+
SET (LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
10+
SET (CMAKE_C_FLAGS " -Os -Wall")
11+
12+
IF (WIN32)
13+
SET (CMAKE_EXE_LINKER_FLAGS "-L${PROJECT_SOURCE_DIR}/prebuilt/win7/libs")
14+
ENDIF (WIN32)
15+
16+
MESSAGE ("---------------------------------------------------------------------")
17+
MESSAGE ("Project Name : " ${PROJECT_NAME})
18+
MESSAGE ("Source Dir : " ${PROJECT_SOURCE_DIR})
19+
MESSAGE ("Binary Dir : " ${PROJECT_BINARY_DIR})
20+
MESSAGE ("System Processor : " ${CMAKE_SYSTEM_PROCESSOR})
21+
MESSAGE ("System Platform : " ${CMAKE_SYSTEM})
22+
MESSAGE ("C Compiler : " ${CMAKE_C_COMPILER})
23+
MESSAGE ("Executable Dir : " ${EXECUTABLE_OUTPUT_PATH})
24+
MESSAGE ("Library Dir : " ${LIBRARY_OUTPUT_PATH})
25+
MESSAGE ("SDK Version : " V2.2)
26+
MESSAGE ("")
27+
28+
IF (WIN32)
29+
MESSAGE ("Building on WINDOWS ...")
30+
ELSE (WIN32)
31+
MESSAGE ("Building on LINUX ...")
32+
ENDIF (WIN32)
33+
MESSAGE ("---------------------------------------------------------------------")
34+
35+
FILE (REMOVE_RECURSE ${PROJECT_SOURCE_DIR}/../iotx-sdk-c.pkgs)
36+
FILE (MAKE_DIRECTORY ${PROJECT_SOURCE_DIR}/../iotx-sdk-c.pkgs)
37+
38+
39+
ADD_DEFINITIONS (-D_IS_LINKKIT_)
40+
ADD_DEFINITIONS (-DALCS_ENABLED)
41+
ADD_DEFINITIONS (-DCMP_VIA_MQTT_DIRECT)
42+
ADD_DEFINITIONS (-DCM_ENABLED)
43+
ADD_DEFINITIONS (-DCM_VIA_CLOUD_CONN)
44+
ADD_DEFINITIONS (-DCM_VIA_CLOUD_CONN_MQTT)
45+
ADD_DEFINITIONS (-DCOAP_OBSERVE_CLIENT_SUPPORTED)
46+
ADD_DEFINITIONS (-DCOAP_OBSERVE_SERVER_SUPPORTED)
47+
ADD_DEFINITIONS (-DCOAP_SERV_MULTITHREAD)
48+
ADD_DEFINITIONS (-DCOAP_USE_PLATFORM_LOG)
49+
ADD_DEFINITIONS (-DCOAP_USE_PLATFORM_MEMORY)
50+
ADD_DEFINITIONS (-DCONFIG_DM_DEVTYPE_SINGLE)
51+
ADD_DEFINITIONS (-DCONFIG_DM_DEVTYPE_SINGLE)
52+
ADD_DEFINITIONS (-DCONFIG_GUIDER_AUTH_TIMEOUT=500)
53+
ADD_DEFINITIONS (-DCONFIG_HTTP_AUTH_TIMEOUT=500)
54+
ADD_DEFINITIONS (-DCONFIG_MID_HTTP_TIMEOUT=500)
55+
ADD_DEFINITIONS (-DDM_ENABLED)
56+
ADD_DEFINITIONS (-DFORCE_SSL_VERIFY)
57+
ADD_DEFINITIONS (-DHTTP_COMM_ENABLED)
58+
ADD_DEFINITIONS (-DMQTT_COMM_ENABLED)
59+
ADD_DEFINITIONS (-DMQTT_DIRECT)
60+
ADD_DEFINITIONS (-DOTA_ENABLED)
61+
ADD_DEFINITIONS (-DOTA_SIGNAL_CHANNEL=1)
62+
ADD_DEFINITIONS (-DSDK_ENHANCE)
63+
ADD_DEFINITIONS (-DSERVICE_OTA_ENABLED)
64+
ADD_DEFINITIONS (-DSUPPORT_TLS)
65+
ADD_DEFINITIONS (-DUSING_UTILS_JSON)
66+
ADD_DEFINITIONS (-D_PLATFORM_IS_HOST_)
67+
68+
ADD_SUBDIRECTORY (src/infra/utils)
69+
ADD_SUBDIRECTORY (src/infra/log)
70+
ADD_SUBDIRECTORY (src/infra/system)
71+
ADD_SUBDIRECTORY (src/sdk-impl)
72+
ADD_SUBDIRECTORY (src/protocol/mqtt)
73+
ADD_SUBDIRECTORY (src/services/uOTA)
74+
ADD_SUBDIRECTORY (src/protocol/http)
75+
ADD_SUBDIRECTORY (src/protocol/alcs)
76+
ADD_SUBDIRECTORY (src/services/linkkit/cm)
77+
ADD_SUBDIRECTORY (src/services/linkkit/dm)
78+
79+
ADD_SUBDIRECTORY (src/ref-impl/hal)
80+
ADD_SUBDIRECTORY (examples)
81+
ADD_SUBDIRECTORY (tests)
82+
ADD_SUBDIRECTORY (src/ref-impl/tls)
83+
ADD_SUBDIRECTORY (src/tools/linkkit_tsl_convert)
84+
85+
ADD_LIBRARY (iot_sdk STATIC
86+
$<TARGET_OBJECTS:iot_utils>
87+
$<TARGET_OBJECTS:iot_log>
88+
$<TARGET_OBJECTS:iot_system>
89+
$<TARGET_OBJECTS:sdk_impl>
90+
$<TARGET_OBJECTS:iot_mqtt>
91+
$<TARGET_OBJECTS:iot_ota>
92+
$<TARGET_OBJECTS:iot_http>
93+
$<TARGET_OBJECTS:iot_alcs>
94+
$<TARGET_OBJECTS:iot_cm>
95+
$<TARGET_OBJECTS:iot_dm>
96+
)
97+
if(WIN32)
98+
TARGET_LINK_LIBRARIES (iot_sdk ws2_32)
99+
endif(WIN32)
100+
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
Copyright (c) 2014-2016 Alibaba Group. All rights reserved.
2+
License-Identifier: Apache-2.0
3+
4+
Licensed under the Apache License, Version 2.0 (the "License"); you may
5+
not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12+
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
# 阿里云物联网套件
2+
3+
物联网套件是阿里云专门为物联网领域的开发人员推出的, 其目的是帮助开发者搭建安全且性能强大的数据通道, 方便终端(如传感器, 执行器, 嵌入式设备或智能家电等等)和云端的双向通信.
4+
5+
- **[官方代码首页](https://github.com/aliyun/iotkit-embedded)**
6+
- **[官方维基首页](https://github.com/aliyun/iotkit-embedded/wiki)**
7+
8+
# 快速开始
9+
10+
本节描述如何申请自己的设备, 并结合本SDK快速体验该设备通过`MQTT`+`TLS/SSL`协议连接到阿里云, 上报和接收业务报文. 关于SDK的更多使用方式, 请访问[官方WiKi](https://github.com/aliyun/iotkit-embedded/wiki)
11+
12+
> 实现原理:
13+
>
14+
> `MQTT协议`(`Message Queuing Telemetry Transport`, 消息队列遥测传输)是IBM开发的一个即时通讯协议, 是为大量计算能力有限, 且工作在低带宽, 不可靠的网络的远程传感器和控制设备通讯而设计的协议
15+
>
16+
> 利用MQTT协议是一种基于二进制消息的发布/订阅编程模式的消息协议, 下面的应用程序先在阿里云IoT平台订阅(`Subscribe`)一个`Topic`成功, 然后自己向该`Topic`做发布(`Publish`)动作
17+
> 阿里云IoT平台收到之后, 就会原样推送回这个应用程序, 因为该程序之前已经通过订阅(`Subscribe`)动作成为该`Topic`的一个接收者, 发布到这个`Topic`上的任何消息, 都会被推送到已订阅该`Topic`的所有终端上
18+
19+
## 一. 开发环境准备
20+
21+
#### **1. 安装Ubuntu16.04**
22+
23+
本SDK的编译环境是`64位``Ubuntu16.04`, 在其它Linux上尚未测试过, 所以推荐安装与阿里开发者一致的发行版
24+
25+
如果您使用`Windows`操作系统, 建议安装虚拟机软件`Virtualbox`, 下载地址: [https://www.virtualbox.org/wiki/Downloads](https://www.virtualbox.org/wiki/Downloads)
26+
27+
然后安装64位的desktop版本`Ubuntu 16.04.x LTS`, 下载地址: [https://www.ubuntu.com/download/desktop](https://www.ubuntu.com/download/desktop)
28+
29+
#### **2. 安装必备软件**
30+
31+
本SDK的开发编译环境使用如下软件: `make-4.1`, `git-2.7.4`, `gcc-5.4.0`, `gcov-5.4.0`, `lcov-1.12`, `bash-4.3.48`, `tar-1.28`, `mingw-5.3.1`
32+
33+
可使用如下命令行安装必要的软件:
34+
35+
apt-get install -y build-essential make git gcc
36+
37+
## 二. 在控制台创建设备
38+
39+
#### **1. 注册/登录阿里云账号**
40+
41+
访问阿里云[登录页面](https://account.aliyun.com/login/login.htm), 点击[免费注册](https://account.aliyun.com/register/register.htm), 免费获得一个阿里云账号. 若您已有账号, 可直接登录
42+
43+
#### **2. 访问物联网套件控制台**
44+
45+
登入之后, 鼠标悬停在**产品**上, 弹出层叠菜单
46+
47+
![image](https://raw.githubusercontent.com/wiki/aliyun/iotkit-embedded/pics/iotconsole-product.png)
48+
49+
然后向下滚动页面, 点击**物联网套件**
50+
51+
![image](https://raw.githubusercontent.com/wiki/aliyun/iotkit-embedded/pics/iotconsole-iotkit.png)
52+
53+
或直接访问[https://www.aliyun.com/product/iot](https://www.aliyun.com/product/iot), 之后点击**立即开通**, 或者**管理控制台**, 登入[控制台主界面](https://iot.console.aliyun.com/)
54+
55+
#### **3. 创建产品和设备**
56+
57+
点击页面右上角的**创建产品**按钮, 创建一个品类, 然后在左侧导航栏点击**设备管理**, 再到页面右侧点**添加设备**, 创建该品类下的一个设备, 如下图则得到创建成功后的**设备标识三元组**
58+
59+
- `productKey`: 标识产品的品类
60+
- `deviceName`: 标识品类下的具体设备
61+
- `deviceSecret`: 该设备的密钥, 需填写到SDK中, 用于连接阿里云服务器时完成认证
62+
63+
![image](https://raw.githubusercontent.com/wiki/aliyun/iotkit-embedded/pics/iotconsole-devinfo.png)
64+
65+
#### **4. 创建可订阅可发布的Topic**
66+
67+
点击左侧导航栏的**消息通信**, 再到页面右侧点**定义Topic类**, 创建一个新的`/${productKey}/${deviceName}/data`, 并设置为**可订阅可发布**权限
68+
69+
![image](https://raw.githubusercontent.com/wiki/aliyun/iotkit-embedded/pics/iotconsole-subpub.png)
70+
71+
## 三. 编译样例程序
72+
73+
#### **1. 下载SDK**
74+
75+
登录Linux, 运行如下命令从github克隆代码, 或者访问最新地址[下载页面](https://github.com/aliyun/iotkit-embedded/releases/latest), **将下载到的压缩包在Linux上解压缩**
76+
77+
$ git clone https://github.com/aliyun/iotkit-embedded
78+
79+
#### **2. 填入设备信息**
80+
81+
编辑文件`sample/mqtt/mqtt-example.c`, 编辑如下代码段, 填入之前**创建产品和设备**步骤中得到的**设备标识三元组**:
82+
83+
![image](https://raw.githubusercontent.com/wiki/aliyun/iotkit-embedded/pics/sdk-devinfo.png)
84+
85+
#### **3. 编译SDK产生样例程序**
86+
87+
运行如下命令:
88+
89+
$ make distclean
90+
$ make
91+
92+
编译成功完成后, 生成的样例程序在当前目录的`output/release/bin`目录下:
93+
94+
$ tree output/release
95+
output/release
96+
├── bin
97+
│   ├── coap-example
98+
│   ├── http-example
99+
│   ├── mqtt-example
100+
│   ├── mqtt_rrpc-example
101+
│   ├── ota_mqtt-example
102+
│   ├── sdk-testsuites
103+
│   ├── shadow-testsuites
104+
│   └── subdev-example
105+
...
106+
...
107+
108+
## 四. 运行样例程序
109+
110+
#### **1. 执行样例程序**
111+
112+
$ ./output/release/bin/mqtt-example
113+
[inf] iotx_device_info_init(40): device_info created successfully!
114+
[dbg] iotx_device_info_set(50): start to set device info!
115+
[dbg] iotx_device_info_set(64): device_info set successfully!
116+
[dbg] _calc_hmac_signature(57): | source: clientId2UCRZpAbCGC.ExampleDevdeviceNameExampleDevproductKey2UCRZpAbCGCtimestamp2524608000000 (93)
117+
[dbg] _calc_hmac_signature(58): | secret: fbh47lGBSayncmTHEjF1E5x4CZdeJTO9 (32)
118+
[dbg] _calc_hmac_signature(61): | method: hmacsha1
119+
[dbg] _calc_hmac_signature(74): | signature: 326a4a6ed38b1bd5ddb6a5d11d27928bfb5a62d0 (40)
120+
[dbg] guider_print_dev_guider_info(236): ....................................................
121+
[dbg] guider_print_dev_guider_info(237): ProductKey : 2UCRZpAbCGC
122+
[dbg] guider_print_dev_guider_info(238): DeviceName : ExampleDev
123+
[dbg] guider_print_dev_guider_info(239): DeviceID : 2UCRZpAbCGC.ExampleDev
124+
[dbg] guider_print_dev_guider_info(240): DeviceSecret : fbh47lGBSayncmTHEjF1E5x4CZdeJTO9
125+
[dbg] guider_print_dev_guider_info(241): ....................................................
126+
...
127+
...
128+
_demo_message_arrive|136 :: ----
129+
_demo_message_arrive|140 :: Topic: '/2UCRZpAbCGC/ExampleDev/data' (Length: 28)
130+
_demo_message_arrive|144 :: Payload: '{"attr_name":"temperature", "attr_value":"1"}' (Length: 45)
131+
_demo_message_arrive|145 :: ----
132+
[inf] iotx_mc_unsubscribe(1416): mqtt unsubscribe success,topic = /2UCRZpAbCGC/ExampleDev/data!
133+
[dbg] iotx_mc_disconnect(2106): rc = MQTTDisconnect() = 0
134+
[inf] _network_ssl_disconnect(413): ssl_disconnect
135+
[inf] iotx_mc_disconnect(2114): mqtt disconnect!
136+
[inf] iotx_mc_release(2160): mqtt release!
137+
138+
---------------------------------------------------
139+
. bytes_total_allocated: 1292
140+
. bytes_total_freed: 1292
141+
. bytes_total_in_use: 0
142+
. bytes_max_allocated: 560
143+
. bytes_max_in_use: 1066
144+
. iterations_allocated: 20
145+
. iterations_freed: 20
146+
. iterations_in_use: 0
147+
. iterations_max_in_use: 11
148+
---------------------------------------------------
149+
main|441 :: out of sample!
150+
151+
#### **2. 观察消息上报**
152+
153+
如下日志信息显示样例程序正在通过`MQTT``Publish`类型消息, 上报业务数据到`/${prodcutKey}/${deviceName}/data`
154+
155+
mqtt_client|256 :: packet-id=3, publish topic msg={"attr_name":"temperature", "attr_value":"1"}
156+
157+
#### **3. 观察消息下推**
158+
159+
如下日志信息显示该消息因为是到达已被订阅的`Topic`, 所以又被服务器原样推送到样例程序, 并进入相应的回调函数
160+
161+
_demo_message_arrive|136 :: ----
162+
_demo_message_arrive|140 :: Topic: '/2UCRZpAbCGC/ExampleDev/data' (Length: 28)
163+
_demo_message_arrive|144 :: Payload: '{"attr_name":"temperature", "attr_value":"1"}' (Length: 45)
164+
_demo_message_arrive|145 :: ----
165+
166+
#### **4. 观察控制台日志**
167+
168+
可以登录物联网套件控制台, 到[设备页面](https://iot.console.aliyun.com/#/product/detail), 找到刚才填写在SDK中的设备并点击进入, 点左边导航栏的**日志服务**, 可以看到刚才被上报的消息
169+
170+
![image](https://raw.githubusercontent.com/wiki/aliyun/iotkit-embedded/pics/iotconsole-publog.png)
171+
172+
# 关于SDK的更多使用方式, 请访问[官方WiKi](https://github.com/aliyun/iotkit-embedded/wiki)

0 commit comments

Comments
 (0)