设备接入华为云IoT平台体验边云协同【我的IoT端边云体验】
一、华为云IoT平台介绍
华为云IoT平台地址:https://www.huaweicloud.com/product/iothub.html
设备接入服务(IoT Device Access)是华为云的物联网平台,提供海量设备连接上云、设备和云端双向消息通信、批量设备管理、远程控制和监控、OTA升级、设备联动规则等能力,并可将设备数据灵活流转到华为云其他服务,帮助物联网行业用户快速完成设备联网及行业应用集成。
设备连接华为IoT平台后,设备端可向华为IoT平台上传设备状态、数据等信息。同时华为IoT平台也可以下发命令给设备端,设备端收到命令后进行响应。
二、设备接入华为云IoT平台的步骤
我们把设备端与华为IoT平台连接分为获取华为IoT平台IP地址、华为IoT平台的搭建、编写上传数据相关代码以及编写下发命令相关代码四个部分。
(1)华为IoT平台IP地址
设备端与云端通讯采用的相关协议为MQTT协议。
首先在华为IoT平台选择MQTT协议的接入地址,并复制接入地址在PC终端上ping一下该接入地址。得到一个地址为121.36.42.100的IP地址,该地址为华为IoT平台的IP地址。
在oc_mqtt.h文件里我们可以查看到相应代码配置。
(2)华为IoT平台的搭建
华为IoT平台的搭建首先创建产品并且注册对应的设备,华为IoT平台就会分配给设备一个设备ID,设备端可通过设备ID和相应的密钥来确保安全可信的连接到华为IoT平台。
注册对应的设备步骤如下:
① 所有设备 --> 注册设备
② 选择所属产品、填写标识符和设备名称,分配设备ID平台会自动分配可以不用修改
③ 点击确认后会有两条设备信息,一条为设备ID另外一条为设备密钥,点击保存并关闭会提示你下载一个txt文件,txt文件里面就包含这两条信息。
④ 进去设备对接信息网站填写设备ID、设备密钥:https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/
⑤ 生成相应信息:Clienid、Username、Password。(每设备生成的信息都是不一样的)
在balcony.c文件里可以查看到以下配置:
华为云IoT平台产品创建:
产品模型用于描述设备具备的能力和特性。开发者通过定义产品模型,在物联网平台构建一款设备的抽象模型,使平台理解该款设备支持的服务、属性、命令等信息,如颜色、开关等。
注册设备后,我们可以在华为IOT平台产品中的模型定义里创建一个产品,并添加服务、属性、命令等内容。
服务信息:(服务ID、服务类型)
服务ID | 服务类型 |
---|---|
Balcony | senser |
属性信息:(属性名称、数据类型)
属性名称 | 数据类型 |
---|---|
voltage | decimal(小数) |
Windoow_flag | string(字符串) |
Rain_flag | string(字符串) |
Motor_flag | string(字符串) |
命令信息:(命令名称、参数名称、数据类型、长度、枚举)
命令名称 | 参数名称 | 数据类型 | 长度 | 枚举 |
---|---|---|---|---|
Balcony_Control_Motor | Motor | string | 3 | ON,OFF |
注:代码中的服务ID、属性名称、命令名称等与华为IoT平台一一对应。
(3)上传数据的配置
static void deal_report_msg(report_t *report)
{
oc_mqtt_profile_service_t service;//定义Service级别数据,该处对应云平台配置的Balcony服务下的数据
oc_mqtt_profile_kv_t voltage;//定义属性级别数据,该处对应云平台配置的属性voltage信息
oc_mqtt_profile_kv_t Window_flag;//定义属性级别数据,该处对应云平台配置的属性Window_flag信息
oc_mqtt_profile_kv_t Rain_flag;//定义属性级别数据,该处对应云平台配置的属性Rain_flag信息
oc_mqtt_profile_kv_t motor;//定义属性级别数据,该处对应云平台配置的属性motor信息
service.event_time = NULL;
service.service_id = "Balcony";//对应云平台配置的服务ID
service.service_property = &voltage;//在Balcony服务下添加属性信息
service.nxt = NULL;//该产品上报数据中仅存在Balcony一种服务,所以next指针为空
voltage.key = "voltage";//对应云平台配置的属性名称
voltage.value = &report->voltage;//voltage的取值由设备实际状态voltage决定。
voltage.type = EN_OC_MQTT_PROFILE_VALUE_FLOAT;//对应云平台配置的数据类型
voltage.nxt = &Window_flag;//继续添加Balcony服务下的另一属性。
Window_flag.key = "Window_flag";
Window_flag.value = g_app_cb.Window_flag ? "ON" : "OFF";
Window_flag.type = EN_OC_MQTT_PROFILE_VALUE_STRING;
Window_flag.nxt = &Rain_flag;
Rain_flag.key = "Rain_flag";
Rain_flag.value = g_app_cb.Rain_flag ? "ON" : "OFF";
Rain_flag.type = EN_OC_MQTT_PROFILE_VALUE_STRING;
Rain_flag.nxt = &motor;
motor.key = "Motor_Status";
motor.value = g_app_cb.motor ? "ON" : "OFF";//Motor_Status的ON,OFF取值由设备实际
motor.type = EN_OC_MQTT_PROFILE_VALUE_STRING;
motor.nxt = NULL;//Balcony服务下没有其它属性了,next置为null。
oc_mqtt_profile_propertyreport(USERNAME, &service);//打包数据
return;
}
(4)下发命令控制电机的配置
if (0 == strcmp(cJSON_GetStringValue(obj_cmdname), "Balcony_Control_Motor"))
{
obj_paras = cJSON_GetObjectItem(obj_root, "Paras");
if (NULL == obj_paras)
{
goto EXIT_OBJPARAS;
}
obj_para = cJSON_GetObjectItem(obj_paras, "Motor");
if (NULL == obj_para)
{
goto EXIT_OBJPARA;
}
//操作电动马达
if (0 == strcmp(cJSON_GetStringValue(obj_para), "ON"))
{
g_app_cb.motor = 1;
MotorStatusSet(ON);//开窗--电机正转
g_app_cb.Window_flag = 1;
Window_flag = 1;
}
else
{
g_app_cb.motor = 0;
MotorStatusSet(OFF);//关窗--电机反转
g_app_cb.Window_flag = 0;
Window_flag = 0;
}
三、设备接入华为云IoT平台的体验
华为IoT平台在线调试—可看到数据接收和命令发送的情况:
华为IoT平台查看到最新的上报数据:
【我的IoT端边云体验】有奖征文火热进行中:https://bbs.huaweicloud.com/blogs/378687
此外,在(https://bbs.huaweicloud.com/activity/suggestion.html)提出您的宝贵建议,标题以【云驻计划-定向征文】开头,还有机会赢取额外奖励。
- 点赞
- 收藏
- 关注作者
评论(0)