概述
概述
本文带大家一起,基于上篇文章中的的4G模块连接到阿里云平台
传送门:
RT-Thread Studio使用笔记(六):4G模块SIM7600的使用
https://blog.csdn.net/tigerots/article/details/108132814
参考资料:
https://help.aliyun.com/document_detail/89301.html?spm=a2c4g.11186623.6.706.bec8429dZDvMvG
阿里云创建产品
阿里云物联网平台地址:https://iot.console.aliyun.com/studio?spm=a2c56.12526802.1304866.1.743b107bMaky1X
关于属性和事件
阿里关于设备属性,事件的描述有专门的章节,我们一般选用Alink json格式
使用Alink格式的数据如下:
上行(Alink JSON):
- 设备请求用的Topic:
/sys/{productKey}/{deviceName}/thing/event/property/post
本例程使用的请求Topic
"/sys/a1ZkpqGqexK/DTU_4G_002/thing/event/property/post"
- 设备请求用的payload数据, 应包含方法, ID, 参数几个重要选项
{
"method": "thing.event.property.post",
"id": "20",
"params": {
"RGBColor": {
"Red": 20,
"Blue": 21,
"Green": 22
}
},
"version": "1.0.0"
}
- 云响应设备Topic:
/sys/{productKey}/{deviceName}/thing/event/property/post_reply
/sys/
a1ZkpqGqexK/DTU_4G_002//thing/event/property/post_reply
- 云响应设备的数据内容, code为200表示成功, ID号与请求ID号一致
{
"code": 200,
"data": {
},
"id": "45",
"message": "success",
"method": "thing.event.property.post",
"version": "1.0"
}
一定要了解,你的设备要订阅或发布的主题,否则无法进行嵌入式程序的编写。
RT-Thread配置
1. 使能阿里云的mqtt软件包,()如需要深入了解MQTT协议,建议大家观看超威的视频,裸机分析,讲的非常透彻),并根据阿里云上你的产品进行配置。
以上信息来自于阿里云设备管理,如下图所示:
2. 配置完成后,打开例程,即可根据阿里的主题规则,配置订阅和要发布的主题
uint32_t id_cnt = 0;
// 上传修改属性值
static int example_publish(void *handle)
{
int
res = 0;
const char
*fmt = "/sys/%s/%s/thing/event/property/post";
char
*topic = NULL;
int
topic_len = 0;
char
*fmt2 = "{%s,%s,%s,%s}";
char
*method = ""method": "thing.event.property.post"";// 方法
char
id[16] = "";// 唯一ID
char
params[128] = "";// 参数
char
*version = ""version":"1.0.0"";// 版本,固定
char
*payload = NULL;
int
payload_len = 0;
// 生成payload所用的参数
id_cnt ++;
HAL_Snprintf(id, 16, ""id": "%d"", id_cnt);
HAL_Snprintf(params, 128, ""params":{"CurrentHumidity":%d,"VehSpeed":%d,"Atmosphere":%d,"CurrentTemperature":%d}",
(id_cnt%100), (id_cnt%1150), (id_cnt%10+990), (id_cnt%10+20));
// 生成payload
payload_len = strlen(fmt2) + strlen(method) + strlen(id) + strlen(params) + strlen(version) + 1;
payload = HAL_Malloc(payload_len);
if (payload == NULL) {
EXAMPLE_TRACE("memory not enough");
return -1;
}
memset(payload, 0, payload_len);
HAL_Snprintf(payload, payload_len, fmt2, method, id, params, version);
// 生成topic
topic_len = strlen(fmt) + strlen(DEMO_PRODUCT_KEY) + strlen(DEMO_DEVICE_NAME) + 1;
topic = HAL_Malloc(topic_len);
if (topic == NULL) {
EXAMPLE_TRACE("memory not enough");
return -1;
}
memset(topic, 0, topic_len);
HAL_Snprintf(topic, topic_len, fmt, DEMO_PRODUCT_KEY, DEMO_DEVICE_NAME);
// 发布主题
res = IOT_MQTT_Publish_Simple(0, topic, IOTX_MQTT_QOS0, payload, strlen(payload));
if (res < 0) {
EXAMPLE_TRACE("publish failed, res = %d", res);
HAL_Free(topic);
return -1;
}
HAL_Free(topic);
return 0;
}
static int example_subscribe(void *handle)
{
int res = 0;
const char *fmt = "/%s/%s/user/get";
char *topic = NULL;
int topic_len = 0;
topic_len = strlen(fmt) + strlen(DEMO_PRODUCT_KEY) + strlen(DEMO_DEVICE_NAME) + 1;
topic = HAL_Malloc(topic_len);
if (topic == NULL) {
EXAMPLE_TRACE("memory not enough");
return -1;
}
memset(topic, 0, topic_len);
HAL_Snprintf(topic, topic_len, fmt, DEMO_PRODUCT_KEY, DEMO_DEVICE_NAME);
res = IOT_MQTT_Subscribe(handle, topic, IOTX_MQTT_QOS0, example_message_arrive, NULL);
if (res < 0) {
EXAMPLE_TRACE("subscribe failed");
HAL_Free(topic);
return -1;
}
HAL_Free(topic);
return 0;
}
编译运行后,中断一直提示保存,出现异常,是因为(基于上一篇博客《RT-Thread Studio使用笔记(六):4G模块SIM7600的使用》)中的主机地址数组长度不够,此处解析的阿里云地址数据比较长,默认为32字节,会导致内存溢出
修改完成后, 即可通过控制台,成功连接到阿里云,并且能够实现主题的发布与订阅。
各位,不好意思,这篇博文遗漏比较多,不够详细, 本来计划边写代码,边写博客,但是因为中间公司的开发任务比较多,耽误了时间,所以没有及时完成博客,现在想补,但是手头已经没有的板子,无法截取相关操作的图片了,如果有需要交流该问题的小伙伴,请私信我。
最后
以上就是俏皮大碗为你收集整理的RT-Thread Studio使用笔记(七):通过4G模块连接到阿里云概述阿里云创建产品关于属性和事件RT-Thread配置的全部内容,希望文章能够帮你解决RT-Thread Studio使用笔记(七):通过4G模块连接到阿里云概述阿里云创建产品关于属性和事件RT-Thread配置所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复