0
点赞
收藏
分享

微信扫一扫

OpenHarmony南向开发培训第四次作业(D9案例数据上云)

首先,要实现Bearpi(Hi3861)的数据上云,我们要先了解bearpi的上云案例是怎么运行的

这里我选取的是D9_iot_cloud_oc_manhole_cover这个案例

那么既然是上云,我们肯定要先链接平台,而在案例里链接平台的函数是 static int CloudMainTaskEntry(void)

你就记住你什都不用改,要改什么会在文章最后说的,这里是介绍怎么运作的

static int CloudMainTaskEntry(void)
{
    app_msg_t *app_msg;
    uint32_t ret;

    WifiConnect(CONFIG_WIFI_SSID, CONFIG_WIFI_PWD); //WiFi连接(WiFi名称,WiFi密码)
    dtls_al_init();
    mqtt_al_init();
    oc_mqtt_init();

    g_app_cb.app_msg = osMessageQueueNew(MSGQUEUE_COUNT, MSGQUEUE_SIZE, NULL);
    if (g_app_cb.app_msg == NULL) {
        printf("Create receive msg queue failed");
    }
    oc_mqtt_profile_connect_t connect_para;
    (void)memset_s(&connect_para, sizeof(connect_para), 0, sizeof(connect_para));

    connect_para.boostrap = 0;
    connect_para.device_id = CONFIG_APP_DEVICEID;
    connect_para.device_passwd = CONFIG_APP_DEVICEPWD;
    connect_para.server_addr = CONFIG_APP_SERVERIP;
    connect_para.server_port = CONFIG_APP_SERVERPORT;
    connect_para.life_time = CONFIG_APP_LIFETIME;
    connect_para.rcvfunc = msg_rcv_callback;
    connect_para.security.type = EN_DTLS_AL_SECURITY_TYPE_NONE;
    //连接平台
    ret = oc_mqtt_profile_connect(&connect_para);
    if ((ret == (int)en_oc_mqtt_err_ok)) {
        g_app_cb.connected = 1;
        printf("oc_mqtt_profile_connect succed!\r\n");
    } else {
        printf("oc_mqtt_profile_connect faild!\r\n");
    }
    
    //这下面是
    while (1) {
        app_msg = NULL;
        (void)osMessageQueueGet(g_app_cb.app_msg, (void **)&app_msg, NULL, 0xFFFFFFFF);
        if (app_msg != NULL) {
            switch (app_msg->msg_type) {
                case en_msg_cmd:
                    deal_cmd_msg(&app_msg->msg.cmd);
                    break;
                case en_msg_report:
                    deal_report_msg(&app_msg->msg.report);
                    break;
                default:
                    break;
            }
            free(app_msg);
        }
    }
    return 0;
}

下一步就是推送数据的操作,这里使用的是内核操作的消息队列,需要先拼装数据,然后通过oc_mqtt_profile_propertyreport上报数据

对应的代码部分是下面的一堆:

static void deal_report_msg(report_t *report)
{
    //创建消息队列的参数
    oc_mqtt_profile_service_t service;
    oc_mqtt_profile_kv_t temperature;
    oc_mqtt_profile_kv_t Accel_x;
    oc_mqtt_profile_kv_t Accel_y;
    oc_mqtt_profile_kv_t Accel_z;
    oc_mqtt_profile_kv_t status;

    if (g_app_cb.connected != 1) {
        return;
    }
    //这个是服务的名字
    service.event_time = NULL;
    service.service_id = "Manhole_Cover";
    service.service_property = &temperature;
    service.nxt = NULL;
    //下面的是服务包含的参数
    temperature.key = "Temperature";
    temperature.value = &report->temp;
    temperature.type = EN_OC_MQTT_PROFILE_VALUE_INT;
    temperature.nxt = &Accel_x; //这里一定是下一个数据的名字取地址,如果

    Accel_x.key = "Accel_x";
    Accel_x.value = &report->acce_x;
    Accel_x.type = EN_OC_MQTT_PROFILE_VALUE_INT;
    Accel_x.nxt = &Accel_y;

    Accel_y.key = "Accel_y";
    Accel_y.value = &report->acce_y;
    Accel_y.type = EN_OC_MQTT_PROFILE_VALUE_INT;
    Accel_y.nxt = &Accel_z;

    Accel_z.key = "Accel_z";
    Accel_z.value = &report->acce_z;
    Accel_z.type = EN_OC_MQTT_PROFILE_VALUE_INT;
    Accel_z.nxt = &status;

    status.key = "Cover_Status";
    status.value = g_coverStatus ? "Tilt" : "Level";
    status.type = EN_OC_MQTT_PROFILE_VALUE_STRING;
    status.nxt = NULL;
    //发送数据
    oc_mqtt_profile_propertyreport(NULL,&service);
    return;

这两部分最重要,重要的介绍完了,接下来该将他运行起来了,要实现这我们需要先从主源文件看起

首先是头文件

OpenHarmony南向开发培训第四次作业(D9案例数据上云)_数据

这里不需要我们改动,我们可以简单了解以下这些头文件的含义(博主自己的理解,如有错误,欢迎各位佬指正QAQ)

#include <stdio.h>   //C语言的库
#include <stdlib.h>  //C语言的库
#include <string.h>  //C语言的库
#include <unistd.h>  //C语言的库
#include "cmsis_os2.h"  //OpenHarmony的内核库
#include "ohos_init.h"  //OpenHarmony的内核库

#include <dtls_al.h>    //网络的依赖库
#include <mqtt_al.h>    //mqtt的相关库
#include <oc_mqtt_al.h> //mqtt的相关库
#include <oc_mqtt_profile.h>  //mqtt的相关库
#include "E53_SC2.h"          //E53的头文件
#include "wifi_connect.h"     //WiFi连接的库

然后我在看接下的宏定义

#define CONFIG_WIFI_SSID "xxx" // 修改为自己的WiFi 热点账号

#define CONFIG_WIFI_PWD "xxxxxx" // 修改为自己的WiFi 热点密码

#define CONFIG_APP_SERVERIP "117.78.5.125"  //标准版的IP地址

#define CONFIG_APP_SERVERPORT "1883"

#define CONFIG_APP_DEVICEID "xxxxxxx" // 替换为注册设备后生成的deviceid

#define CONFIG_APP_DEVICEPWD "xxxxxx" // 替换为注册设备后生成的密钥

#define CONFIG_APP_LIFETIME 60 // < seconds

#define CONFIG_QUEUE_TIMEOUT (5 * 1000)

#define MSGQUEUE_COUNT 16
#define MSGQUEUE_SIZE 10
#define CLOUD_TASK_STACK_SIZE (1024 * 10)
#define CLOUD_TASK_PRIO 24
#define SENSOR_TASK_STACK_SIZE (1024 * 4)
#define SENSOR_TASK_PRIO 25
#define TASK_DELAY 3
#define FLIP_THRESHOLD 100

这里的Wifi建议使用手机热点,毕竟手机我们天天带在身边,然后我们开始改平台的IP,我的华为云平台是标准版,如果你的也是,IP就为117.78.5.125,如果你的是基础版,IP就为121.36.42.100,然后就是CONFIG_APP_DEVICEID,CONFIG_APP_DEVICEPWD,这里我们先打开华为云平台,首先你要先注册一个华为账号

华为云地址:https://www.huaweicloud.com/

在华为云首页单击产品,找到IoT物联网,单击设备接入IoTDA 并单击立即使用。

OpenHarmony南向开发培训第四次作业(D9案例数据上云)_#include_02

OpenHarmony南向开发培训第四次作业(D9案例数据上云)_#define_03

接下来我们要创建产品

OpenHarmony南向开发培训第四次作业(D9案例数据上云)_#include_04

OpenHarmony南向开发培训第四次作业(D9案例数据上云)_#include_05

然后他就会多出来一个

OpenHarmony南向开发培训第四次作业(D9案例数据上云)_#define_06

点击那个蓝色的查看,我们接下来要自定义模型

OpenHarmony南向开发培训第四次作业(D9案例数据上云)_#define_07

这里会多出来三个要我们填写的框,第一个服务ID是我们在推送数据那,就是我下面标注出来的红框,服务类型我们填Senser,下面有一张我填写完整的图

OpenHarmony南向开发培训第四次作业(D9案例数据上云)_#include_08

OpenHarmony南向开发培训第四次作业(D9案例数据上云)_#include_09

创建完是这样的

OpenHarmony南向开发培训第四次作业(D9案例数据上云)_#include_10

接下来我们添加属性(只用像我这样填就行)

OpenHarmony南向开发培训第四次作业(D9案例数据上云)_数据_11

注意:最后一个是这样填的,因为是字符串类型

OpenHarmony南向开发培训第四次作业(D9案例数据上云)_#define_12

最后我们创建完属性应该是这样的

OpenHarmony南向开发培训第四次作业(D9案例数据上云)_#include_13

接下来我们开始注册设备,点击上面红色的注册设备

OpenHarmony南向开发培训第四次作业(D9案例数据上云)_数据_14

然后按照我图上的填,设备标识码20230906是因为我在注册这个设备的时候是2023的9月6号,你可以按照你喜欢的数字来,这里的设备ID就是代码的CONFIG_APP_DEVICEID,密钥就是CONFIG_APP_DEVICEPWD

OpenHarmony南向开发培训第四次作业(D9案例数据上云)_数据_15

OpenHarmony南向开发培训第四次作业(D9案例数据上云)_#define_16

点击更多的调试,进入下面的界面

OpenHarmony南向开发培训第四次作业(D9案例数据上云)_#define_17

好了,你现在把宏定义改成如下:

#define CONFIG_WIFI_SSID "xxx" // 修改为自己的WiFi 热点账号

#define CONFIG_WIFI_PWD "xxxxxx" // 修改为自己的WiFi 热点密码

#define CONFIG_APP_SERVERIP "117.78.5.125"  //标准版的IP地址,
                                            //如果你是基础版,则是121.36.42.100
#define CONFIG_APP_SERVERPORT "1883"

#define CONFIG_APP_DEVICEID "64f7fcd5a559fd7cd411a77b_20230906" // 替换为注册设备后生成的deviceid

#define CONFIG_APP_DEVICEPWD "12345678" // 替换为注册设备后生成的密钥

#define CONFIG_APP_LIFETIME 60 // < seconds

#define CONFIG_QUEUE_TIMEOUT (5 * 1000)

这里我不说明怎么修改文件去编译,你编译完以后,烧录,打开串口终端,等待一会就会在下面的界面看到数据上云了,点击设备右侧的“查看”,进入设备详情页面,可看到上报的数据(我用一下官方的图QwQ)

OpenHarmony南向开发培训第四次作业(D9案例数据上云)_数据_18

举报

相关推荐

第四次作业

Linux第四次作业

第四次作业(java)

python第四次作业

第四次作业20220327

java第四次作业

第四次Java作业

MySQL第四次作业

0 条评论