[经验分享] 【平头哥RVB2601创意应用开发】+ 连接阿里云初探

symic   2022-4-14 22:44 楼主

通过学习官网上的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.JPG 捕获2.JPG 捕获3.JPG

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

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

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

捕获1.JPG 三、web应用

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

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

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

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

附上测试视频

43563b5c1afc37420007b98bbe0e0514.mp4 (4.78 MB)
(下载次数: 5, 2022-5-11 23:37 上传)

 

 

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

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复