Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
不穿格子衫的农民
TencentOS Tiny
提交
0eaa4608
T
TencentOS Tiny
项目概览
不穿格子衫的农民
/
TencentOS Tiny
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TencentOS Tiny
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
0eaa4608
编写于
4月 08, 2021
作者:
S
supowang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update 08.QCloud_IoTHub_Quick_Start.md
上级
654b3135
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
84 addition
and
92 deletion
+84
-92
doc/08.QCloud_IoTHub_Quick_Start.md
doc/08.QCloud_IoTHub_Quick_Start.md
+84
-92
未找到文件。
doc/08.QCloud_IoTHub_Quick_Start.md
浏览文件 @
0eaa4608
...
...
@@ -200,7 +200,7 @@ Client和Broker之间的发布和订阅是根据主题(Topic)来进行的, 不
在本节中, 我们介绍如何使用腾讯TencentOS tiny与腾讯云通过MQTT进行通信.
腾讯IoT OS
集成了对MQTT和腾讯云的支持, 开发者只需要通过简单的设置即可实现与腾讯云的通信, 整体步骤主要包含:
TencentOS Tiny
集成了对MQTT和腾讯云的支持, 开发者只需要通过简单的设置即可实现与腾讯云的通信, 整体步骤主要包含:
-
项目工程中添加MQTT组件相关文件
-
适配AT HAL层串口及网络接口函数
...
...
@@ -209,15 +209,9 @@ Client和Broker之间的发布和订阅是根据主题(Topic)来进行的, 不
**项目工程中添加MQTT组件相关文件**
在工程
中新建
`hal`
、
`at`
和
`mqtt`
组, 并添加下列源文件,可以参考TencentOS_tiny
\b
oard
\T
encentOS_tiny_EVB_MX
\K
EIL
\t
encent_os_mqtt工程:
在工程
添加hal、at、devices、和mqtt client源码, 可以参考TencentOS-tiny
\b
oard
\T
encentOS_tiny_EVB_MX_Plus
\K
EIL
\m
qttclient工程
![](
image/iothub_guide/mqtt_file.png
)
上述文件分别位于
`TencentOS_tiny\net\at`
,
`TencentOS_tiny\components\connectivity\Eclipse-Paho-MQTT`
和
`TencentOS_tiny\platform\hal\st\stm32l4xx\src`
目录下.
相应的, 也需要引入对应的头文件
![](
image/iothub_guide/mqtt_header.png
)
**适配AT HAL层串口及网络接口函数**
...
...
@@ -278,23 +272,16 @@ esp8266_sal_init(hal_uart_port_t uart_port);
![](
image/iothub_guide/dev_info.png
)
开发者在终端节点开发过程中, 可以自行修改MQTT配置
文件
`mqtt_config.h`
开发者在终端节点开发过程中, 可以自行修改MQTT配置
参数
```
shell
#ifndef TOS_MQTT_CONFIG_H
#define TOS_MQTT_CONFIG_H
#define MQTT_SERVER_IP "111.230.189.156"
#define MQTT_SERVER_PORT "1883"
#define MQTT_PRODUCT_ID "25KCIUIR1G"
#define MQTT_DEV_NAME "dev1"
#define MQTT_CLIENT_ID "25KCIUIR1Gdev1"
#define MQTT_USR_NAME "25KCIUIR1Gdev1;12010126;R2MUQ;1618721647"
#define MQTT_PASSWORD "bd9755216393179086306766bf7d428dca7d6a1c8a78b305adc281706a5eb963;hmacsha256"
#define MQTT_SUBSCRIBE_TOPIC "25KCIUIR1G/dev1/control"
#define MQTT_PUBLISH_TOPIC "25KCIUIR1G/dev1/event"
#endif
#define IOTHUB_MQTT_IP "111.230.189.156"
#define IOTHUB_MQTT_PORT "1883"
#define IOTHUB_MQTT_CLIENT_ID "KHHIXM0JJ5dev001"
#define IOTHUB_MQTT_USERNAME "KHHIXM0JJ5dev001;12010126;9K3WO;1647628324"
#define IOTHUB_MQTT_PASSWD "53696f22a061ed2524b1de185815ad2fcae7739afd3f395cb6131521da7f0bb7;hmacsha256"
#define IOTHUB_MQTT_PUB_TOPIC "KHHIXM0JJ5/dev001/data"
#define IOTHUB_MQTT_SUB_TOPIC "KHHIXM0JJ5/dev001/control"
```
如上所示, 需要腾讯云设备信息自行修改
`Product ID`
,
`Device Name`
和
`Password`
,
`MQTT_USR_NAME`
,
`MQTT_PASSWORD`
,
`MQTT_SUBSCRIBE_TOPIC`
,
`MQTT_PUBLISH_TOPIC`
,订阅/发布的topic, 如果采用默认的control和event如图即可, 也可自行设置. 开发者将其放置到自己的工程目录下任意位置并在工程中添加头文件引用即可.
...
...
@@ -304,88 +291,93 @@ esp8266_sal_init(hal_uart_port_t uart_port);
以下是与腾讯云对接并收发信息的例程:
```
c
void
mqtt_demo
(
void
)
/* Tencent IoThub Device Info */
#define IOTHUB_MQTT_IP "111.230.189.156"
#define IOTHUB_MQTT_PORT "1883"
#define IOTHUB_MQTT_CLIENT_ID "KHHIXM0JJ5dev001"
#define IOTHUB_MQTT_USERNAME "KHHIXM0JJ5dev001;12010126;9K3WO;1647628324"
#define IOTHUB_MQTT_PASSWD "53696f22a061ed2524b1de185815ad2fcae7739afd3f395cb6131521da7f0bb7;hmacsha256"
#define IOTHUB_MQTT_PUB_TOPIC "KHHIXM0JJ5/dev001/data"
#define IOTHUB_MQTT_SUB_TOPIC "KHHIXM0JJ5/dev001/control"
static
void
tos_topic_handler
(
void
*
client
,
message_data_t
*
msg
)
{
int
count
=
1
;
int
sock_id
=
0
;
uint8_t
read_data
[
40
];
int
read_len
;
char
topic
[
30
];
char
buffer
[
32
];
mqtt_con_param_t
con_param
;
con_param
.
keep_alive_interval
=
2000
;
con_param
.
cleansession
=
1
;
con_param
.
username
=
MQTT_USR_NAME
;
con_param
.
password
=
MQTT_PASSWORD
;
con_param
.
client_id
=
MQTT_CLIENT_ID
;
mqtt_pub_param_t
pub_param
;
pub_param
.
dup
=
0
;
pub_param
.
qos
=
0
;
pub_param
.
retained
=
0
;
pub_param
.
id
=
0
;
pub_param
.
topic
=
MQTT_PUBLISH_TOPIC
;
mqtt_sub_param_t
sub_param
;
sub_param
.
count
=
1
;
sub_param
.
dup
=
0
;
sub_param
.
id
=
1
;
sub_param
.
req_qos
=
0
;
sub_param
.
topic
=
MQTT_SUBSCRIBE_TOPIC
;
(
void
)
client
;
MQTT_LOG_I
(
"-----------------------------------------------------------------------------------"
);
MQTT_LOG_I
(
"%s:%d %s()...
\n
topic: %s, qos: %d.
\n
message:
\n\t
%s
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
msg
->
topic_name
,
msg
->
message
->
qos
,
(
char
*
)
msg
->
message
->
payload
);
MQTT_LOG_I
(
"-----------------------------------------------------------------------------------
\n
"
);
}
void
mqttclient_task
(
void
)
{
int
error
;
char
buf
[
100
]
=
{
0
};
mqtt_client_t
*
client
=
NULL
;
mqtt_message_t
msg
;
memset
(
&
msg
,
0
,
sizeof
(
msg
));
#ifdef USE_ESP8266
esp8266_sal_init
(
HAL_UART_PORT_0
);
esp8266_join_ap
(
"
SheldonDai"
,
"srnr6x9xbhmb0
"
);
esp8266_join_ap
(
"
Mculover666"
,
"mculover666
"
);
#endif
#ifdef USE_NB_BC35
int
bc35_28_95_sal_init
(
hal_uart_port_t
uart_port
);
bc35_28_95_sal_init
(
HAL_UART_PORT_0
);
#endif
sock_id
=
tos_mqtt_connect
(
MQTT_SERVER_IP
,
MQTT_SERVER_PORT
,
&
con_param
);
printf
(
"socket id: %d
\r\n
"
,
sock_id
);
if
(
tos_mqtt_subscribe
(
sock_id
,
&
sub_param
)
!=
0
)
{
printf
(
"subscribe failed!!!
\n
"
);
#ifdef USE_EC600S
ec600s_sal_init
(
HAL_UART_PORT_0
);
#endif
mqtt_log_init
();
client
=
mqtt_lease
();
mqtt_set_port
(
client
,
IOTHUB_MQTT_PORT
);
mqtt_set_host
(
client
,
IOTHUB_MQTT_IP
);
mqtt_set_client_id
(
client
,
IOTHUB_MQTT_CLIENT_ID
);
mqtt_set_user_name
(
client
,
IOTHUB_MQTT_USERNAME
);
mqtt_set_password
(
client
,
IOTHUB_MQTT_PASSWD
);
mqtt_set_clean_session
(
client
,
1
);
error
=
mqtt_connect
(
client
);
MQTT_LOG_D
(
"mqtt connect error is %#x"
,
error
);
mqtt_subscribe
(
client
,
IOTHUB_MQTT_SUB_TOPIC
,
QOS0
,
tos_topic_handler
);
MQTT_LOG_D
(
"mqtt subscribe error is %#x"
,
error
);
memset
(
&
msg
,
0
,
sizeof
(
msg
));
for
(;;)
{
sprintf
(
buf
,
"welcome to mqttclient, this is a publish test, a rand number: %d ..."
,
random_number
());
msg
.
qos
=
QOS0
;
msg
.
payload
=
(
void
*
)
buf
;
error
=
mqtt_publish
(
client
,
IOTHUB_MQTT_PUB_TOPIC
,
&
msg
);
tos_task_delay
(
4000
);
}
}
void
application_entry
(
void
*
arg
)
{
mqttclient_task
();
while
(
1
)
{
memset
(
buffer
,
0
,
sizeof
(
buffer
));
snprintf
(
buffer
,
sizeof
(
buffer
),
"@%3.1f@%3.1f@%.1f"
,
25
.
8
,
80
.
6
,
90
.
1
);
printf
(
"publish topic
\r\n
"
);
pub_param
.
topic
=
MQTT_PUBLISH_TOPIC
;
pub_param
.
payload
=
(
unsigned
char
*
)
buffer
;
pub_param
.
payload_len
=
sizeof
(
buffer
);
if
(
tos_mqtt_publish
(
sock_id
,
&
pub_param
)
!=
0
)
{
printf
(
"publish failed!!!
\n
"
);
}
printf
(
"MQTT count: %d
\r\n
"
,
count
);
printf
(
"read buf
\r\n
"
);
read_len
=
tos_mqtt_receive
(
topic
,
sizeof
(
topic
),
read_data
,
sizeof
(
read_data
));
if
(
read_len
>=
0
)
{
printf
(
"---------->topic: %s, payload: %s, payload_len: %d
\n
"
,
topic
,
read_data
,
read_len
);
}
count
++
;
osDelay
(
1000
);
printf
(
"This is a mqtt demo!
\r\n
"
);
tos_task_delay
(
1000
);
}
}
```
可以看到, 其中核心的接口为:
`tos_mqtt_connect`
: 连接腾讯云
`tos_mqtt_subscribe`
: 订阅Topic
`tos_mqtt_receive`
: 读取订阅消息
`tos_mqtt_publish`
: 发布消息
开发者可以根据自己的业务需求来调用这些接口完成特定的业务逻辑.
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录