RVB2601 基于 W800 接入生活物联网平台(飞燕平台)

简介: 本文介绍如何基于已有的 RVB2601 工程实现飞燕平台的接入。

本文源自:RISC-V 大赛 - 那我就自己来吧

本文作者:Murphy

本文转自:芯片开放社区(OCC)


一、准备

  • RVB2601 开发板
  • 飞燕平台产品
  • CDK 软件开发环境

1.png


二、飞燕平台创建产品

打开 飞燕平台 按照提示开启该功能,并创建项目。

2.png


1.创建项目

2.创建产品
可以选择使用 led 进行测试,使用默认的功能定义。

3.png


3.添加测试设备

点击上步骤创建的产品,然后进入产品功能配置。然后点击 3-设备调试,随便选择一个 WiFi 模组,然后新增测试设备。

4.png


4.获取设备管理的四元组

  • 产品 ID
  • 产品 Secret
  • 设备名称
  • 设备 Secret

5.png


三、工程准备

打开 CDK,进入 Welcome Page。

6.png


然后点击 创建工程 ,在搜索框输入 ch2601_webplayer_demo 找到示例工程,添加到本地。

三、设备端添加驱动代码

在工程的 sdk_chip_ch2601 --> drv_wifi_at_w800 里找到 w800_api.c/h 文件。


在这 w800_api.c 文件里添加以下代码:

intw800_living_platform_attribute_upload(constchar*dev_id, 
constchar*msg, int*packet_id)
{
intret=-1;
intrsp_dev_id=-1;
intrsp_packet_id=-1;
intrsp_code=-1;
intrsp_reply_len=-1;
intid=-1;
charevent_str[64] = {0};
charunknown_str[64] = {0};
if (!dev_id||!msg||!packet_id) {
returnret;
    }
aos_mutex_lock(&g_cmd_mutex, AOS_WAIT_FOREVER);
atparser_clr_buf(g_atparser_uservice_t);
/*** AT+IDMPP= 0,"{\"powerstate\":1}"*/charat_string_msg[64] = {0};
snprintf(at_string_msg, 64, "AT+IDMPP=0,\"%s\"", msg);
LOGD(TAG, "Send msg: %s\r\n", at_string_msg);
if (atparser_send(g_atparser_uservice_t, at_string_msg) ==0) {
if (((atparser_recv(g_atparser_uservice_t, "+IDMPP:%d\n", packet_id) ==0) &&            (atparser_recv(g_atparser_uservice_t, "OK\n") ==0)) ||            (atparser_recv(g_atparser_uservice_t, "+IDMPP:%d,%d,%d,%d,%s\n", 
&rsp_dev_id, &rsp_packet_id, &rsp_code, &rsp_reply_len, event_str) ==0)) {
ret=0;
LOGD(TAG, "Send at cmd ok\r\n");
        }
    } else {
LOGD(TAG, "Send at cmd err\r\n");
    }
atparser_cmd_exit(g_atparser_uservice_t);
aos_mutex_unlock(&g_cmd_mutex);
returnret;
}
intw800_living_platform_event_upload(constchar*dev_id, 
constchar*event_id, constchar*event_payload, int*packet_id)
{
intret=-1;
intrsp_dev_id=-1;
intrsp_packet_id=-1;
intrsp_code=-1;
intrsp_reply_len=-1;
intid=-1;
charevent_str[64] = {0};
charunknown_str[64] = {0};
if (!dev_id||!event_id||!packet_id||!event_payload) {
returnret;
    }
aos_mutex_lock(&g_cmd_mutex, AOS_WAIT_FOREVER);
atparser_clr_buf(g_atparser_uservice_t);
charat_string_msg[64] = {0};
snprintf(at_string_msg, 64, "AT+IDMEP=%s,\"%s\",\"%s\"", dev_id, event_id, event_payload);
LOGD(TAG, "Send msg: %s\r\n", at_string_msg);
if (atparser_send(g_atparser_uservice_t, at_string_msg) ==0) {
if ((atparser_recv(g_atparser_uservice_t, "+IDMEP:%d\n", packet_id) ==0) &&            (atparser_recv(g_atparser_uservice_t, "OK\n") ==0)) {
ret=0;
        }
    }
atparser_cmd_exit(g_atparser_uservice_t);
aos_mutex_unlock(&g_cmd_mutex);
returnret;
}
/*** w800_living_platform_recv_handler_register* * @param cmd*        example: "+IDMPS:"*/voidw800_living_platform_recv_handler_register(constchar*cmd, void*cb, void*context)
{
atparser_oob_create(g_atparser_uservice_t, cmd, cb, context);
}


并在 w800_api.h 文件里添加以下代码:

externintw800_living_platform_config(constchar*product_key, constchar*dev_name, 
constchar*dev_secret, constchar*product_secret);
externintw800_living_platform_conn(void);
externintw800_living_platform_link_status_get(int*state);
externintw800_living_platform_attribute_upload(constchar*dev_id, 
constchar*msg, int*packet_id);
externintw800_living_platform_event_upload(constchar*dev_id, 
constchar*event_id, constchar*event_payload, int*packet_id);
externvoidw800_living_platform_recv_handler_register(constchar*cmd, void*cb, void*context);


四、设备端添加示例代码

修改 app --> src --> app_main.c 代码。

#include <aos/aos.h>#include <devices/w800.h>#include <yoc/atparser.h>#define LIVING_PLATFORM_PROD_KEY      "xx"#define LIVING_PLATFORM_PROD_SECRET   "xx"#define LIVING_PLATFORM_DEV_NAME      "xxx"#define LIVING_PLATFORM_DEV_SECRET    "xxx"externintw800_living_platform_config(constchar*product_key, constchar*dev_name, 
constchar*dev_secret, constchar*product_secret);
externintw800_living_platform_conn(void);
externintw800_living_platform_link_status_get(int*state);
intapp_living_platform_conn(void);
staticaos_sem_tg_living_start_sem= {0};
intapp_living_platform_init(void)
{
intret=-1;
ret=aos_sem_new(&g_living_start_sem, 0);
if (ret!=0)
    {
goto__exit;
    }
__exit:
returnret;
}
intapp_living_platform_wait_start(void)
{
intret=-1;
ret=aos_sem_wait(&g_living_start_sem, AOS_WAIT_FOREVER);
if (ret!=0)
    {
goto__exit;
    }
__exit:
returnret;
}
voidapp_living_platform_notify_start(void)
{
aos_sem_signal(&g_living_start_sem);
}
staticvoidnetwork_event(uint32_tevent_id, constvoid*param, void*context)
{
switch(event_id) {
caseEVENT_NETMGR_GOT_IP:
LOGD(TAG, "net got ip");
app_living_platform_notify_start();
break;
caseEVENT_NETMGR_NET_DISCON:
LOGD(TAG, "net disconnect");
break;
    }
}
intmain(void)
{
board_yoc_init();
if (0!=app_living_platform_init())
    {
LOGE(TAG, "app_living_platform_init failed");
return-1;
    }
/* Subscribe */event_subscribe(EVENT_NETMGR_GOT_IP, network_event, NULL);
event_subscribe(EVENT_NETMGR_NET_DISCON, network_event, NULL);
if (0==app_living_platform_wait_start())
    {
if (0!=app_living_platform_conn())
        {
LOGE(TAG, "app_living_platform_conn failed");
        }
    }
else    {
LOGE(TAG, "app_living_platform_wait_start failed");
    }
return0;
}
staticint_living_platform_attribute_set_handler(atparser_uservice_t*at, void*priv, oob_data_t*oob_data)
{
intstore_order= (int)priv;
char*buf= (oob_data!=NULL?oob_data->buf : NULL);
LOGD(TAG, "recv data len: %d; data: %s\n", store_order, buf);
return0;
}
intapp_living_platform_conn(void)
{
intret=0;
w800_living_platform_recv_handler_register("+IDMPS:", _living_platform_attribute_set_handler, NULL);
LOGD(TAG, "==> start config living platform");
ret=w800_living_platform_config(
LIVING_PLATFORM_PROD_KEY, LIVING_PLATFORM_DEV_NAME, 
LIVING_PLATFORM_DEV_SECRET, LIVING_PLATFORM_PROD_SECRET);
if (ret!=0)
    {
goto__exit;
    }
LOGD(TAG, "<== end config living platform");
LOGD(TAG, "==> start connect living platform");
ret=w800_living_platform_conn();
if (ret!=0)
    {
goto__exit;
    }
LOGD(TAG, "==> end connect living platform");
/* delay some time, then check link status */aos_msleep(4000);
    {
intlink_status=-1;
LOGD(TAG, "==> start get link status");
ret=w800_living_platform_link_status_get(&link_status);
if (ret!=0)
        {
goto__exit;
        }
LOGD(TAG, "<== end get link status <%d>", link_status);
    }
/* delay some time, then upload attribute */aos_msleep(1000);
    {
externintw800_living_platform_attribute_upload(constchar*dev_id, 
constchar*msg, int*packet_id);
externintw800_living_platform_event_upload(constchar*dev_id, 
constchar*event_id, constchar*event_payload, int*packet_id);
constchar*dev_id="0";
constchar*msg_on="{\\\"powerstate\\\":1}";
constchar*msg_off="{\\\"powerstate\\\":0}";
intpkt_id=0;
LOGD(TAG, "==> start attribute upload");
ret=w800_living_platform_attribute_upload(dev_id, msg_on, &pkt_id);
if (ret!=0)
        {
goto__exit;
        }
LOGD(TAG, "<== end attribute upload, packet id <%d>", pkt_id);
    }
__exit:
returnret;
}


五、源码获取

后面整理后放到 gitee 。

相关实践学习
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
数据采集 JSON 监控
应用实战精解系列(三):RVB2601对接阿里云物联网平台
想体验设备连接上云吗?想免费试用RVB2601开发板吗?本期内容带你详细了解。
568 0
应用实战精解系列(三):RVB2601对接阿里云物联网平台
|
数据采集 JSON 监控
应用实战精解系列(三):RVB2601对接阿里云物联网平台
应用实战精解系列(三):RVB2601对接阿里云物联网平台
396 0
应用实战精解系列(三):RVB2601对接阿里云物联网平台
|
物联网 Linux 开发工具
W800带你玩转生活物联网
本次体验产品是一款基于IoT Wi-Fi/蓝牙 SoC 芯片W800的调试板卡,兼容Arduino接口。支持作为Wi-Fi/蓝牙模块与其他MCU主板对接调试,也支持作为主控设备进行开发调试。
W800带你玩转生活物联网
|
6月前
|
传感器 人工智能 物联网
健康监测设备的技术革命:AI+物联网如何让你随时掌握健康数据?
健康监测设备的技术革命:AI+物联网如何让你随时掌握健康数据?
832 19
|
10月前
|
存储 安全 物联网
政府在推动物联网技术标准和规范的统一方面可以发挥哪些作用?
政府在推动物联网技术标准和规范的统一方面可以发挥哪些作用?
338 60
|
10月前
|
安全 物联网 物联网安全
制定统一的物联网技术标准和规范的难点有哪些?
制定统一的物联网技术标准和规范的难点有哪些?
380 58
|
10月前
|
存储 数据采集 物联网
物联网技术在物流领域的应用会遇到哪些挑战?
物联网技术在物流领域的应用会遇到哪些挑战?
556 60
|
10月前
|
供应链 物联网 区块链
探索未来技术潮流:区块链、物联网、虚拟现实的融合与创新
【10月更文挑战第41天】随着科技的不断进步,新技术如区块链、物联网、虚拟现实等正在逐步渗透到我们的日常生活中。本文将深入探讨这些技术的发展趋势和应用场景,以及它们如何相互融合,共同推动社会的进步。我们将通过具体的代码示例,展示这些技术在实际应用中的潜力和价值。无论你是科技爱好者,还是对未来充满好奇的探索者,这篇文章都将为你打开一扇通往未来的窗口。
208 56
|
10月前
|
安全 物联网 物联网安全
揭秘区块链技术在物联网(IoT)安全中的革新应用
揭秘区块链技术在物联网(IoT)安全中的革新应用

相关产品

  • 物联网平台