打印
[AIROC™ 蓝牙]

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

[复制链接]
16403|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dvacos|  楼主 | 2024-7-18 17:56 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 dvacos 于 2024-7-18 17:56 编辑

高级任务第二步 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连接后通过滑条控制灯的亮度。




使用特权

评论回复
沙发
bitterheart| | 2024-7-19 17:03 | 只看该作者
学会了,没想到还有web ble

使用特权

评论回复
板凳
icestream| | 2024-7-19 19:56 | 只看该作者
本帖最后由 icestream 于 2024-7-20 11:59 编辑

厉害,我关注了

使用特权

评论回复
地板
大鹏2365| | 2024-7-28 16:43 | 只看该作者
把“sizeof(rgb_led_command_data_t)”改为1是没成功吗?

使用特权

评论回复
5
shenxiaolin| | 2024-7-29 22:02 | 只看该作者
感谢分享

使用特权

评论回复
6
yangjiaxu| | 2024-7-30 10:22 | 只看该作者
他这个开发的IDE是免费的吗?需不需要授权之类的啊?

使用特权

评论回复
评论
dvacos 2024-7-30 14:20 回复TA
肯定免费的啊,都是开源的改的,卡卡的。而且各大原厂自己搞得IDE都免费吧,毕竟不是通用的,都要配套各家的芯片 
7
dvacos|  楼主 | 2024-7-30 14:19 | 只看该作者
大鹏2365 发表于 2024-7-28 16:43
把“sizeof(rgb_led_command_data_t)”改为1是没成功吗?

不行,最近有点忙,还没去试一试,可能改动不止一个地方

使用特权

评论回复
8
梵蒂冈是神uy| | 2024-7-30 17:26 | 只看该作者
目前WEB BLE是虽然 Web Bluetooth API 规范尚未最终确定,只是测试、实验版本,那也能正常使用吧?》

使用特权

评论回复
9
盗铃何须掩耳| | 2024-7-31 14:18 | 只看该作者
雨WEB通信完成以后就可以继续拓展服务器了

使用特权

评论回复
10
我想看大海| | 2024-7-31 14:28 | 只看该作者
与web通信,很不错的应用

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

110

帖子

2

粉丝