【平头哥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";
- char *my_password = "cxmin3894392";
-
- char *my_key = "a1rq51ZSebK";
- char *my_name = "A6wrYCtZG0MHAC4EVDSA";
- char *my_secret = "44ca2be4c74942ecf78a61decbad8e0b";
- char *my_p_secret = "FVsxoviBOVNybIUx";
- 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();
-
-
-
- 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)
|