【英飞凌CYW20829测评】高级2 Web Ble滑条灯实现

上一篇文章,已经通过蓝牙完成了数据收发。本文是在收发数据的基础上添加功能,打算做一个用蓝牙控制的调光灯,将接收过来的PWM值设置到灯上,完成调光功能。解决了床上不想动,却要调光、开光灯的问题,科技的第一推动力就是懒!!
既然要和开发板的蓝牙通讯,最先想到的就是写个APP 或者 小程序,这两者一个是要安装应用,一个是必须打开微信,很是麻烦。所以选择用WEB BLE!!!
因为web天生跨平台的特性,一套代码可以在手机电脑上使用,并且不需要安装APP,包装为PWA应用就可以固定在桌面(安卓手机,IOS未知),十分的方便啊!! 虽然目前WEB BLE是虽然 Web Bluetooth API 规范尚未最终确定,只是测试、实验版本。但是就目前已有的API足够我们使用了,可以实现我们想要的调光功能。


一、WEB BLE 入门学习
1、入门资料
谷歌的WEB BLE相关文档:
链接:https://developer.chrome.google.cn/docs/capabilities/bluetooth?hl=zh-cn
 


文档内有代码解析,解释很详细,跟着改文档一步步操作就可以实现WEB BLE 接收设备Notify数据 和 写数据给设备了。如下:
 


由于本人就是学习了几天的初学者,想学习WEB BLE的建议大家直接看谷歌的文档。JavaScript有太多太多的API 方法了,同一种功能有一堆API 方法。


2、我的WEB BLE
 


上图是PC端的截图,与最后的演示的手机端不一样。




二、调光灯实现
蓝牙的工程并没有看见While(1),在main的最下方可以看见,使用了RTOS来调度任务 与 蓝牙协议栈。
 


本人之前没有使用过RTOS,都是时间片+状态机来实现任务的,因为做的产品都是实时性要求不高的设备,所以对RTOS只有基本的认知,没有实际的上手过。
所以下面我就没有去创建新的任务,直接魔改了RGB的任务。以下就是我的一些思路:


1、RGB任务回调修改
RGB任务申请空间 与 创建任务(确定回调函数、优先级等)
 


所以跳转到回调函数“task_rgb_led”里,看到了RGB灯的逻辑,看懂后修改为以下

复制
void task_rgb_led(void* param)

{

    cyhal_pwm_t pwm_led_control;



    BaseType_t rtos_api_result = pdFAIL;

    rgb_led_command_data_t rgb_led_cmd_data;

    cy_rslt_t cy_result = CY_RSLT_SUCCESS;



    /* Suppress warning for unused parameter */

    (void)param;



    cyhal_pwm_init(&pwm_led_control, CYBSP_USER_LED, NULL);



            for(;;)

            {

                /* Block until a command has been received over queue */

                rtos_api_result = xQueueReceive(rgb_led_command_data_q, &rgb_led_cmd_data,portMAX_DELAY);



                /* Command has been received from queue */

                if(pdPASS == rtos_api_result)

                {

                        cyhal_pwm_set_duty_cycle(&pwm_led_control, 100-rgb_led_cmd_data.green ,100000);

                        cyhal_pwm_start(&pwm_led_control);

                }


蓝牙接收的数据会通过,以下代码赋值给rgb_led_cmd_data,这个结构体,这样就可以取出蓝牙发送的数据了

复制
rtos_api_result = xQueueReceive(rgb_led_command_data_q, &rgb_led_cmd_data,portMAX_DELAY);

其他的就是基本的设置PWM的API了。



2、蓝牙数据转发
上篇文章已经详细的描述了数据收发的实现了,此处是主要描写的是:在RTOS的框架下,如何将蓝牙接到的数据转发到任务回调中(不乱改,不直接使用全局变量)

复制
<div class="blockcode"><blockquote>case HDLC_MY_TEST_CUSTOM_CHARACTERISTIC_VALUE:{

wiced_bt_gatt_server_send_notification(0,HDLC_MY_TEST_CUSTOM_CHARACTERISTIC_VALUE,len,&p_val[0],NULL);



led_cmd_data.green= p_val[0];

led_cmd_data.brightness = p_val[0];

led_cmd_data.red= p_val[0];

led_cmd_data.blue = p_val[0];



xQueueSendToBack(rgb_led_command_data_q, &led_cmd_data, 0u);

}

break;


实验后我发现,必须要把led_cmd_data这个结构体的4字节数据都赋值后,调用“xQueueSendToBack”才能触发回调,所以我就赋值了4个数据。
查询互联网后,了解到与初始化时的

复制
rgb_led_command_data_q = xQueueCreate(SINGLE_ELEMENT_QUEUE,sizeof(rgb_led_command_data_t));


有关,于是我把“sizeof(rgb_led_command_data_t)”改为1,发现1字节数据还是不能触发,我就展示放弃了,回头再尝试,或者各位大佬教一下!


三、实验效果
GIF如下: 

WEB BLE连接后通过滑条控制灯的亮度。
---------------------
作者:dvacos
链接:https://bbs.21ic.com/icview-3390390-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值