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 。

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
网络协议 物联网 数据处理
【平头哥RVB2601开发板试用体验】AT 解析器和通过w800 AT命令接入阿里云生活物联网平台
RISC-V RVB2601 Yoc 实现和测试验证阿里云平台接入的等相关功能,同时去了解YoC中网络设备和AT解析器框架。
674 0
【平头哥RVB2601开发板试用体验】AT 解析器和通过w800 AT命令接入阿里云生活物联网平台
|
数据采集 JSON 监控
应用实战精解系列(三):RVB2601对接阿里云物联网平台
想体验设备连接上云吗?想免费试用RVB2601开发板吗?本期内容带你详细了解。
468 0
应用实战精解系列(三):RVB2601对接阿里云物联网平台
|
数据采集 JSON 监控
应用实战精解系列(三):RVB2601对接阿里云物联网平台
应用实战精解系列(三):RVB2601对接阿里云物联网平台
278 0
应用实战精解系列(三):RVB2601对接阿里云物联网平台
|
物联网 Linux 开发工具
W800带你玩转生活物联网
本次体验产品是一款基于IoT Wi-Fi/蓝牙 SoC 芯片W800的调试板卡,兼容Arduino接口。支持作为Wi-Fi/蓝牙模块与其他MCU主板对接调试,也支持作为主控设备进行开发调试。
W800带你玩转生活物联网
|
存储 安全 前端开发
阿里云智能生活物联网平台开启Link Visual全球服务 捷高成为首个接入商
阿里云宣布智能生活物联网平台开放Link Visual全球视频服务后,立即吸引到大批企业接入。近日,国内知名摄像头方案商深圳市捷高电子科技有限公司(以下简称捷高)成为首个接入商家,通过阿里云智能生活物联网平台Link Visual全球服务,捷高完成了全系列插卡类摄像机模组产品的云服务平台转换。自此,捷高无线热点模组、4G模组全面支持阿里云智能生活物联网平台Link Visual服务,即将面向海外发售。
586 12
阿里云智能生活物联网平台开启Link Visual全球服务 捷高成为首个接入商
|
网络协议 物联网 数据处理
【平头哥RVB2601开发板试用体验】AT解析器和通过w800 AT命令接入阿里云生活物联网平台
RISC-V RVB2601 Yoc 实现和测试验证阿里云平台接入的等相关功能,同时去了解YoC中网络设备和AT解析器框架。
557 0
【平头哥RVB2601开发板试用体验】AT解析器和通过w800 AT命令接入阿里云生活物联网平台
|
物联网
基于ESP32连接阿里云生活物联网平台的一些经验总结
基于ESP32连接阿里云生活物联网平台的一些经验总结
1004 1
|
人工智能 算法 物联网
三个重要发布,阿里云生活物联网平台升级了
近日,阿里巴巴集团副总裁、阿里云智能IoT事业部总经理库伟携手阿里云智能IoT多位专家齐聚深圳阿里中心,与阿里云生活物联网平台的核心生态合作伙伴召开了一场沙龙会议,并带来了3个重要发布。
347 0
三个重要发布,阿里云生活物联网平台升级了
|
自然语言处理 运维 安全
阿里云生活物联网平台3.0发布,助力智能家电“中国造、全球卖”
在物联网行业蓬勃发展的大潮中,阿里云IoT致力于将物理世界数字化,构建了云端一体化的平台,为智能生活、智能工业、智慧城市等各行业提供助力。阿里云发布生活物联网平台(飞燕平台)3.0,为行业合作伙伴提供安全、稳定、高扩展、低成本的智能生活解决方案,同时还将通过阿里云的全球化部署助力中国企业出海,共同打造物联网的生态。
630 0
阿里云生活物联网平台3.0发布,助力智能家电“中国造、全球卖”

相关产品

  • 物联网平台