通过学习官网上的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、调试完成后可以发布产品 ,只有发布后产品才用在后边的应用中找到。
接下来需要进入到iot studio(https://studio.iot.aliyun.com/)进行web网页控制。
新建web任务后,可以通过点击编辑进入到web控件布局界面,可以自由地通过拖动来摆放。这里放的是开关。在右侧可设置样式,当然最重要的是交互。
打开交互页面,按照下图设置,需要注意的是在选择产品时,一定要选择前面建好的设备,否则无法控制。
之后,可预览、可发布,至此基本完成了设置,可通过网页上的web控件控制开发板上三色LED。
附上测试视频
本帖最后由 symic 于 2022-5-11 23:37 编辑