W801蓝牙点亮小灯(2)

路径
在这里插入图片描述
双击后缀名为.cdkws的文件
在这里插入图片描述
打开后差不多是这样子的
在这里插入图片描述
右键工程文件,然后build

烧写文件在bin\w800路径下面,后缀为.fls
在这里插入图片描述
打开烧写工具后,选择串口波特率并打开,选择固件,后点击下载即可完成烧录

四、程序设计

  1. 打开wm_demo.h文件,做出如下修改 在这里插入图片描述

在这里插入图片描述

  1. 打开main.c文件,做出如下修改
void UserMain(void)
{
	My\_task();
}

  1. My_task() 函数放在 wm_demo_console_task.c 文件里面
  • 打开后,现在开头申明宏定义如下
#define MYBLE\_TASK\_SIZE 2048
static OS_STK MyBLETaskStk[MYBLE_TASK_SIZE];
#define MYBLE\_TASK\_PRIO 32

  • 然后在末尾添加两个新函数
void my\_ble\_msg\_task(void \*sdata)
{
	//传过来的消息队列指针,这里定义的是u8类型的
	u8 \*msg;
	//蓝牙发送数据
	u8 send_data[20] = {0x00}; 
	
	//让开发板以server的身份运行起来
	demo\_bt\_enable();
	while(bt_adapter_state == WM_BT_STATE_OFF)
	{
		tls\_os\_time\_delay(5000 /HZ);
	}
	tls\_os\_time\_delay(5000 /HZ);
	demo\_ble\_server\_on();
	printf("ble ready ok \r\n");
	
	//初始化IO口
	tls\_gpio\_cfg(WM_IO_PB_05, WM_GPIO_DIR_OUTPUT, WM_GPIO_ATTR_FLOATING);
	tls\_gpio\_cfg(WM_IO_PB_25, WM_GPIO_DIR_OUTPUT, WM_GPIO_ATTR_FLOATING);
	tls\_gpio\_cfg(WM_IO_PB_26, WM_GPIO_DIR_OUTPUT, WM_GPIO_ATTR_FLOATING);
	
	for(;;)
	{
		tls\_os\_queue\_receive(ble_q,&msg, 0, 0);
		//打印ble收到数据的长度
		printf("ble revice len:%d\n",msg[0]);
		//依次打印收到的ble数据
		for(u8 i=0;i<msg[0];i++){
			printf("%x ",msg[i+1]);
			//收到的数据存到send\_data buff
			send_data[i] = msg[i+1];
		}printf("\n");
		
		if(msg[1] != 0)
			tls\_gpio\_write(WM_IO_PB_05,1);
		else
			tls\_gpio\_write(WM_IO_PB_05,0);
		if(msg[2] != 0)
			tls\_gpio\_write(WM_IO_PB_25,1);
		else
			tls\_gpio\_write(WM_IO_PB_25,0);
		if(msg[3] != 0)
			tls\_gpio\_write(WM_IO_PB_26,1);
		else
			tls\_gpio\_write(WM_IO_PB_26,0);
			//返回收到的数据
			printf("send state:%d \r\n",tls\_ble\_server\_demo\_api\_send\_msg(send_data,3));
	}
}

void My\_task(void)
{
	if(tls\_os\_queue\_create(&ble_q, 32)!=TLS_OS_SUCCESS)
	{
		printf("create queue fail\n");
		return;
	}
	tls\_os\_task\_create(NULL, NULL,
                       my_ble_msg_task,
                       NULL,
                       (void \*)MyBLETaskStk,          /\* task's stack start address \*/
                       MYBLE_TASK_SIZE \* sizeof(u32), /\* task's stack size, unit:byte \*/
                       MYBLE_TASK_PRIO,
                       0);
}

  1. 修改蓝牙数据接受程序
    打开wm_ble_server_api_demo.c文件,对gatt_svr_chr_demo_access_func函数作如下修改
tls\_os\_queue\_t 	\*ble_q = NULL;

//重新定义一个数据uff
//ble\_data[0] 表示数据的长度,往后依次为数据
u8 ble_data[255]  = {0};

//add by zxx end
static int
gatt\_svr\_chr\_demo\_access\_func(uint16\_t conn_handle, uint16\_t attr_handle,
                               struct ble\_gatt\_access\_ctxt \*ctxt, void \*arg)
{
    int i = 0;
    struct os\_mbuf \*om = ctxt->om;
    
    switch (ctxt->op) {
        case BLE_GATT_ACCESS_OP_WRITE_CHR:
              while(om) {
                  if(g_ble_uart_output_fptr)
                  {
                    g\_ble\_uart\_output\_fptr((uint8\_t \*)om->om_data, om->om_len);
                    
                  }else
                  {
                     
					//print\_bytes(om->om\_data, om->om\_len); 
					//add by zxx start
					if(om->om_len > 200)
					{
						printf("ble om->om\_len is too long:%d return 0 please check send data length...\r\n",om->om_len);
						return 0;
					}
					
					ble_data[0] = om->om_len;
					//将数据转存到buff中,ble\_data[0]是数据的长度,长度必须小于255-1,否者下列循环会出问题。
					for (u8 i = 0; i < om->om_len; i++) {
						ble_data[i+1] = om->om_data[i];
					}
					 if(om->om_len>0)
						{
							tls\_os\_queue\_send(ble_q,ble_data, 0);
						}
					//add by zxx end
                  }
                  om = SLIST\_NEXT(om, om_next);
              }
              return 0;
        default:
            assert(0);
            return BLE_ATT_ERR_UNLIKELY;
    }
}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数嵌入式工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

img

img

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)

img

最后

资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!

嵌入式)**

img

最后

资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!

更多资料点击此处获qu!!

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值