1368|0

73

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【平头哥RVB2601创意应用开发】+ 连接阿里云初探 [复制链接]

  本帖最后由 symic 于 2022-5-11 23:37 编辑

通过学习官网上的demo例程,熟悉了平头哥RVB2601的开发流程,及主要的管脚的应用。由于RVB2601的一大特色是拥有W800的wifi芯片。这就可以实现通过wifi连接上网,同时接入物联网平台,这样就可以与阿里云联动,实现传感数据上云功能。

这部分工作分两部分,一是平头哥RVB2601开发板相关的,一是阿里云平台相关的。在这里以webplayer_demo作为蓝本修改。主要实现通过web开关控件控制三色LED灯的亮灭。下面简要介绍一下主要步骤。

一、平头哥RVB2601部分。

这部分除了与之前类似的初始化外,最主要的是实现W800的串口初始化及AT 指令的实现。首先在w800_api.c/.h中添加相应的函数,分别完成三个AT命令:AT+WJAP手动配网;AT+IDMAU设置设备五元组、AT+IDMCON建立连接。

  • int w800_living_wjap(const char *myssid, const char *mypassword)
  • {
  • int ret = -1;
  • aos_mutex_lock(&g_cmd_mutex, AOS_WAIT_FOREVER);
  • atparser_clr_buf(g_atparser_uservice_t);
  • if(!atparser_send(g_atparser_uservice_t, "AT+WJAP=%s,%s", myssid, mypassword))
  • {
  • if(atparser_recv(g_atparser_uservice_t, "OK\n") == 0)
  • {
  • ret = 0;
  • }
  • else
  • {
  • printf("Destination Host Unreachable!\r\n");
  • }
  • }
  • atparser_cmd_exit(g_atparser_uservice_t);
  • if(!ret)
  • {
  • printf("WIFI set OK!\r\n");
  • }
  • aos_mutex_unlock(&g_cmd_mutex);
  • return ret;
  • }
  • int w800_living_idmau(const char *mykey, const char *myname, const char *mysecret, const char *mypsecret)
  • {
  • int ret = -1;
  • aos_mutex_lock(&g_cmd_mutex, AOS_WAIT_FOREVER);
  • atparser_clr_buf(g_atparser_uservice_t);
  • if(!atparser_send(g_atparser_uservice_t, "AT+IDMAU=\"%s\",\"%s\",\"%s\",\"%s\"", mykey , myname , mysecret ,mypsecret))
  • {
  • if(!(atparser_recv(g_atparser_uservice_t, "OK\n")))
  • {
  • ret = 0;
  • }
  • else
  • {
  • printf("Destination Host Unreachable!\r\n");
  • }
  • }
  • atparser_cmd_exit(g_atparser_uservice_t);
  • if(!ret)
  • {
  • printf("IoT set OK!\r\n");
  • }
  • aos_mutex_unlock(&g_cmd_mutex);
  • return ret;
  • }
  • int w800_living_idmcon(void)
  • {
  • int ret = -1;
  • aos_mutex_lock(&g_cmd_mutex,AOS_WAIT_FOREVER);
  • atparser_clr_buf(g_atparser_uservice_t);
  • if (atparser_send(g_atparser_uservice_t, "AT+IDMCON") == 0)
  • {
  • if (atparser_recv(g_atparser_uservice_t, "OK\n") == 0)
  • {
  • ret = 0;
  • }
  • else
  • {
  • printf("Destination Host Unreachable!\r\n");
  • }
  • }
  • atparser_cmd_exit(g_atparser_uservice_t);
  • if (ret == 0)
  • {
  • printf("AT+IDMCON \r\n");
  • }
  • aos_mutex_unlock(&g_cmd_mutex);
  • return ret;
  • }

由于要控制三色LED灯,还需要添加相关的GPIO控制程序。这里将代码添加到app_main.c下,包括2个函数,led_pin_init负责GPIO初始化,led_refreshed用于灯亮灭控制。

  • static csi_gpio_pin_t r;
  • static csi_gpio_pin_t g;
  • static csi_gpio_pin_t b;
  • void led_pin_init()
  • {
  • csi_pin_set_mux(PA7, PIN_FUNC_GPIO);
  • csi_gpio_pin_init(&r, PA7);
  • csi_gpio_pin_dir(&r, GPIO_DIRECTION_OUTPUT);
  • csi_gpio_pin_write(&r, GPIO_PIN_HIGH);
  • csi_pin_set_mux(PA25, PIN_FUNC_GPIO);
  • csi_gpio_pin_init(&g, PA25);
  • csi_gpio_pin_dir(&g, GPIO_DIRECTION_OUTPUT);
  • csi_gpio_pin_write(&g, GPIO_PIN_HIGH);
  • csi_pin_set_mux(PA4, PIN_FUNC_GPIO);
  • csi_gpio_pin_init(&b, PA4);
  • csi_gpio_pin_dir(&b, GPIO_DIRECTION_OUTPUT);
  • csi_gpio_pin_write(&b, GPIO_PIN_HIGH);
  • }
  • void led_refreshed(int sw_led)
  • {
  • if (sw_led == 1)
  • {
  • csi_gpio_pin_write(&r, GPIO_PIN_LOW);
  • csi_gpio_pin_write(&g, GPIO_PIN_LOW);
  • csi_gpio_pin_write(&b, GPIO_PIN_LOW);
  • }
  • else
  • {
  • csi_gpio_pin_write(&r, GPIO_PIN_HIGH);
  • csi_gpio_pin_write(&g, GPIO_PIN_HIGH);
  • csi_gpio_pin_write(&b, GPIO_PIN_HIGH);
  • }
  • }

此外,为了测试方便,将配网数据及通过AT进行配网的过程,以函数iot_connect_demo()进行操作。

 

  • int iot_connect_demo(void)
  • {
  • char *my_ssid = "symic"; //2.4GHZ WiFi ssid
  • char *my_password = "cxmin3894392"; //2.4GHZ WiFi password
  • char *my_key = "a1rq51ZSebK"; //ProductKey
  • char *my_name = "A6wrYCtZG0MHAC4EVDSA"; //DeviceName
  • char *my_secret = "44ca2be4c74942ecf78a61decbad8e0b"; //DeviceSecret
  • char *my_p_secret = "FVsxoviBOVNybIUx"; //Product Secret
  • int ret = -1;
  • ret = w800_living_wjap(my_ssid, my_password);
  • if (ret == 0)
  • {
  • printf("AT+WJAP:OK!\n");
  • }
  • else
  • {
  • printf("AT+WJAP:ERROR!\n");
  • }
  • ret = w800_living_idmau(my_key,my_name,my_secret,my_p_secret);
  • if (ret == 0)
  • {
  • printf("AT+IDMAU:OK!\n");
  • }
  • else
  • {
  • printf("AT+IDMAU:ERROR!\n");
  • }
  • ret = w800_living_idmcon();
  • if (ret == 0)
  • {
  • printf("AT+IDMCON:OK!\n");
  • }
  • else
  • {
  • printf("AT+IDMCON:ERROR!\n");
  • }
  • return ret;
  • }

最后在main函数中添加iot_connect_demo()函数,删除与主题没关的代码。

  • int main(void)
  • {
  • int ret = -1;
  • board_yoc_init();
  • // player_init();
  • // cli_reg_cmd_player();
  • /* Subscribe */
  • event_subscribe(EVENT_NETMGR_GOT_IP, network_event, NULL);
  • event_subscribe(EVENT_NETMGR_NET_DISCON, network_event, NULL);
  • ret = iot_connect_dome();
  • if (ret == 0){
  • printf("connect iot success\n");
  • }else{
  • printf("connect iot error\n");
  • }
  • }

二、阿里云平台

首先需要在生活物联网平台按照流程,依次构建新的项目、产品、设备,详细的步骤可参考https://occ.t-head.cn/community/post/detail?id=4031864498838708224。这里主要总结一些需要注意的地方。

1、一个产品可以有多个设备,在设置设备的向导中,前两项功能定义与人机交互可使用默认,直接下一步,设备调试页面下方,对在线设备进行调试。

2、iot_connect_demo()所需的设备五元组,可通过上图测试设备的查看按钮查找,并填入函数的相应位置

3、调试完成后可以发布产品 ,只有发布后产品才用在后边的应用中找到。

三、web应用

接下来需要进入到iot studio(https://studio.iot.aliyun.com/)进行web网页控制。

新建web任务后,可以通过点击编辑进入到web控件布局界面,可以自由地通过拖动来摆放。这里放的是开关。在右侧可设置样式,当然最重要的是交互。

打开交互页面,按照下图设置,需要注意的是在选择产品时,一定要选择前面建好的设备,否则无法控制。

之后,可预览、可发布,至此基本完成了设置,可通过网页上的web控件控制开发板上三色LED。

附上测试视频

43563b5c1afc37420007b98bbe0e0514.mp4 (4.78 MB, 下载次数: 5)

 

 

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
【干货上新】电源解决方案和技术第二趴 | DigiKey 应用探索站
当月好物、电源技术资源、特色活动、DigiKey在线实用工具,干货多多~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 1

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表