使用万耦启物基于OneOS连接OneNET云平台

参考资料:

万耦启物开发板资料开放链接:

链接:https://pan.baidu.com/s/1V2BfALH-WsQ8JFAIzfIJkQ?pwd=xfyl

提取码:xfyl

简介:本链接资料包含原理图、说明书等,并包含一个基于OneOS V3.1.0裁切添加组件实现的OneNET示例组合。

准备阶段:

OneOS-Lite源码:OneOS-Lite-V3.1.0、OneOS-Lite-V3.2.0

Cube:OneOS-Cube-V2.0.3、Cube2.1.0

注意:如果使用OneOS-Lite-V3.2.0需配套使用Cube2.1.0

进入OneOS-Lite-V3.2.0\projects文件夹打开OneOS_Cube_2.1输入命令oos pack(OneOS-Lite-V3.2.0新特性)

勾选onenet-studio

勾选cjson

输入Q,选择退出并下载

输入oos project配置开发板型号

S保存Q退出

进入生成的目标文件目录

输入oos config

配置WIFI相关信息

使能onenet-studio mqtt-kit。保存退出

打开template工程文件,修改相关配置

 点击OK后关闭模板工程窗口,然后回到OneOS_Cube_2.1页面

输入oos init -I keil,生成工程代码。

打开project工程文件,编译,下载。

串口显示这样,即初始化正常,SD Card Error!是因为没有插SD卡,插上就一切正常了。

但是我们发现项目工程目录没有我们勾选的onenet相关文件

(此处应该是一个bug)

将OneOS-Lite-V3.1.0\components中的cloud目录复制到OneOS-Lite-V3.2.0\components中

输入oos config重新配置

注意这里的路径,不是之前的OneNET-Studio

并且回到之前勾选的地方,取消勾选。

保存,退出,重新生成代码。

可以看到这里是有onenet的。

修改这里的OneNET登录信息。

修改这里的IP地址,使用域名解析会出错。(我遇到的BUG)

/*********************************************************************************************************************

* 文件名称          user_task

* 公司名称          成都逐飞科技有限公司

* 版本信息          查看 libraries/doc 文件夹内 version 文件 版本说明

* 开发环境          MDK 5.37

* 适用平台          mm32f3277g8p-cmcc-oneos

* 店铺链接          https://seekfree.taobao.com/

*

* 修改记录

* 日期              作者                备注

* 2024-05-06        Teternal            first version

********************************************************************************************************************/

#include <stdio.h>

#include <stdlib.h>

#include <os_task.h>

#include <os_errno.h>

#include <os_assert.h>

#include <shell.h>

#include <dlog.h>

#include <sensor.h>

#include <onenet_mqtts.h>

#include <onenet_device_sample.h>

// OneNET 推送消息示范格式

char *publish_data1 = "onenet_mqtts_publish";                                   // 前两个是固定数据格式

char *publish_data2 = "0";                                                      // 前两个是固定数据格式

char publish_data[128];

uint8_t publish_flag = 0;                                                       // OneNET 命令下发后置位数据更新标志

char    *argv[3];                                                               // 数据发送用的缓冲区指针

//-------------------------------------------------------------------------------------------------------------------

// 函数简介     OneNET 命令接收用户处理函数

// 参数说明     *payload        命令缓冲区指针

// 参数说明     payloadlen      命令字节数

// 返回参数     void            无返回值

// 使用示例

// 备注信息     需要注意的是 本函数重载了修改过的 OneOS/components/cloud/onenet/mqtt-kit/mqtts_device/onenet_mqtts.c 文件中

//              的 __weak void submessage_cmd_request_arrived_customer_handler (char *payload, int payloadlen) 函数

//              该函数在修改过的 static void submessage_cmd_request_arrived_handler(MessageData *data) 函数中调用

//              如果自行拉取最新的 OneOS 源码 需要参照修改 onenet_mqtts.c 文件 否则不能使用本示例用法

//-------------------------------------------------------------------------------------------------------------------

void submessage_cmd_request_arrived_customer_handler (char *payload, int payloadlen)

{

    uint8_t cmd_type = *payload;

    publish_flag = cmd_type > 2 ? 2 : cmd_type;                                 // 仅接收第一个字节作为命令控制

    os_kprintf("Recv submessage cmd: 0x%02x\r\n", publish_flag);                // 输出接收的数据转换为命令的类型

}

//-------------------------------------------------------------------------------------------------------------------

// 函数简介     OneNET 测试任务

// 参数说明     *parameter      线程传参 固定参数

// 返回参数     void            无返回值

// 使用示例

// 备注信息

//-------------------------------------------------------------------------------------------------------------------

static void onenet_test_task (void *parameter)

{

    os_device_t             *humi_aht20_dev = OS_NULL;                          // AHT20 被注册成两个部分 湿度是一个设备

    os_device_t             *temp_aht20_dev = OS_NULL;                          // 温度是另一个设备

    struct  os_sensor_data  humi_aht20_data, temp_aht20_data;                   // sensor 传感器架构通用的数据缓冲类型

   

    while(  OS_NULL == humi_aht20_dev                                           // 湿度设备是否获取到

        ||  OS_NULL == temp_aht20_dev)                                          // 温度设备是否获取到

    {

        os_kprintf("Try to find device.\r\n");

        humi_aht20_dev  = (OS_NULL == humi_aht20_dev)   ? os_device_find("humi_aht20")      : humi_aht20_dev;

        temp_aht20_dev  = (OS_NULL == temp_aht20_dev)   ? os_device_find("temp_aht20")      : temp_aht20_dev;

        os_task_msleep(1000);

    }

    os_device_open(humi_aht20_dev);                                             // 启动湿度设备

    os_device_open(temp_aht20_dev);                                             // 启动温度设备

   

    argv[0] = publish_data1;                                                    // 缓冲区指针指向默认数据

    argv[1] = publish_data2;                                                    // 缓冲区指针指向默认数据

    argv[2] = publish_data;                                                     // 缓冲区指针指向默认数据

   

    os_kprintf("Wait for device connect.\r\n");

    onenet_mqtts_device_start();                                                // 由于 OneOS-Cube 配置了相关参数 所以这里直接启动连接

    while (1)

    {                                                                           // 请按照说明书新建好自己的 OneNET 设备

        os_task_msleep(1000);                                                   // 并修改 onenet_device_sample.h 中的信息

        if(onenet_mqtts_device_is_connected())                                  // 如果参数没有配置错误 连接成功后就会从这里退出

        {

            break;

        }

        os_kprintf("Wait for device connect retry.\r\n");

    }

    os_kprintf("Device connected, try to send message.\r\n");

   

    while (1)

    {

        os_task_msleep(10000);                                                  // 每 10s 上传一次数据

        os_device_read_nonblock(humi_aht20_dev, 0, &humi_aht20_data, 4);        // 读取湿度设备

        os_device_read_nonblock(temp_aht20_dev, 0, &temp_aht20_data, 4);        // 读取温度设备

       

        // JSON 消息格式

        // {

        //      "id":101,

        //      "dp":

        //      {

        //          "humidity":[{"v":49.723}],

        //          "temperature":[{"v":29.316}]

        //      }

        // }

        sprintf

        (

            publish_data,

            "{\"id\":101,\"dp\":{\"humidity\":[{\"v\":%f,}],\"temperature\":[{\"v\":%f,}]}}",

            humi_aht20_data.data.humi / 1000.0,

            temp_aht20_data.data.temp / 1000.0

        );

       

        if(OS_SUCCESS != onenet_mqtts_publish(3, argv))                         // 调用推送消息命令 这里第一个参数固定为 3

        {

            while (1)

            {

                os_task_msleep(1000);

            }

        }

    }

}

//-------------------------------------------------------------------------------------------------------------------

// 函数简介     OneNET 测试任务注册函数

// 参数说明     void            无参数

// 返回参数     int             执行结果

// 使用示例

// 备注信息

//-------------------------------------------------------------------------------------------------------------------

int onenet_test_task_register (void)

{

    os_task_id task;

    task = os_task_create(OS_NULL, OS_NULL, 1024, "user", onenet_test_task, OS_NULL, 3);

    OS_ASSERT(task);

    os_task_startup(task);

    return 0;

}

OS_INIT_CALL(onenet_test_task_register, OS_INIT_LEVEL_APPLICATION, OS_INIT_SUBLEVEL_LOW);

通过修改weave.yaml内容,来实现配置添加源文件/头文件。

编译,下载。

平台连接成功,数据发送成功。

注意:OneNET创建产品时数据协议需选择数据流,不然数据上报会出错。

  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值