总目录

《单片机—HLK-W801开发环境搭建》
《单片机—HLK-W801蓝牙BLE功能测试》

昨天吧demo运行明白了,今天那就来看一下手机通过蓝牙远程遥控点亮开发板的LED吧,虽然这并不是低功耗蓝牙的典型用法,但是通过这种手段,能够快速学习一下W801这套恶心的SDK代码,也算是一种福报。嚯,正好这个芯片是阿里生产的,这不是正应了马老的一句话么。

调试工具

这里用的手机蓝牙调试工具叫nRF connect。应用商店也可以搜索BLE,就能搜索到很多蓝牙开发的工具,不过都会各种申请手机权限,定位啊,相册啊,不允许就没法用,简直就是流氓行为,这国家早就说过了这种问题,无奈就是没办法啊。

不过这款软件倒是挺好的,没有申请什么权限
直接就可以使用。让人感动。

自动启动server

原有的demo中,我们知道了需要让开发板自动运行成为BLE的server,需要两部分

  • 开启蓝牙
  • 以server运行

核心的代码就这两个函数

 demo_bt_enable();demo_ble_server_on();

不过你想要干净的将这两个函数的实现复制到你的主函数文件中,那还是想多了,里面用了一些的全局变量,例如打印等级,或者adapter状态。

所以,你干脆,人家给你造了一套代码,你干嘛还想自己写,就直接用它的demo代码,直接在包含好所有的头文件,然后调用这两个函数,就完事了。
所以主要代码就这样写

 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();

就能够让开发板以server身份运行起来了。简单吧

接收命令

这里就需要找到BLE server接收命令的地方,就在这个函数当中

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); }om = SLIST_NEXT(om, om_next);}return 0;default:assert(0);return BLE_ATT_ERR_UNLIKELY;}
}

其中它指明了一个逻辑,就是如果没有输出函数指针g_ble_uart_output_fptr,那么就自动打印出来,找到了接收消息的地方就办了。我们就已经可以将数据或者命令通过蓝牙,从手机发送到开发板了。

消息传输

这里为了将我们的代码稍微独立出来一点,用了一个消息队列queue,将蓝牙收到的命令,通过queue发送到我的主任务当中,这部分放在主函数文件中,那么以后就直接在这里修改需求,不必再关心消息传递过程了。

主函数中创建队列,并启动监控接收任务

 if(tls_os_queue_create(&MyBLE_QUEUE, 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);

消息接收任务

void my_ble_msg_task(void *sdata)
{void *msg;for(;;){tls_os_queue_receive(MyBLE_QUEUE, (void **)&msg, 0, 0);printf("myble revice %ld \n",(u32)msg);}
}

将前面的输出打印,替换为发送消息,我们目前只取第一个字节,足够传递信息了。

//print_bytes(om->om_data, om->om_len);
if(om->om_len>0)
{tls_os_queue_send(MyBLE_QUEUE, (void *)(om->om_data[0]), 0);
}

这样,启动之后,消息自动就会发送到我这个任务中来,我们就只专心处理这个消息即可。

消息处理

这里将消息转化为控制LED的亮灭,达到了测试效果

这里只要控制GPIO输出低电平,就可以点亮LED,输出高电平就熄灭。
点亮过程。

tls_gpio_cfg(MyLED1_IO, WM_GPIO_DIR_OUTPUT, WM_GPIO_ATTR_FLOATING);
tls_gpio_write(MyLED1_IO,0);

整体测试

首先运行开发板,等待server状态启动。

然后手机打开测试工具,扫描到开发板,连接上

然后点击上箭头,进行数据发送


发送0,可以控制led点亮

开发板被点亮了

发送1过去,开发板熄灭。

完事。

补充说明

这套SDK,把FreeRTOS原有的内容,加以了封装,例如

//消息队列tls_os_status_t tls_os_queue_create(tls_os_queue_t **queue, u32 queue_size)//任务创建tls_os_status_t tls_os_task_create(tls_os_task_t *task,const char* name,void (*entry)(void* param),void* param,u8 *stk_start,u32 stk_size,u32 prio,u32 flag)
//延迟void tls_os_time_delay(u32 ticks)

这套明明,也是没看出来有啥好的,搞得总和tls加密联系起来,其实没有半毛钱关系

可以用它封装好的代码,例如我上面用到的消息队列。这样可以使代码显得干净,也可以用freeRTOS原有的功能,没有本质的区别,就看你喜好了。关于FreeRTOS的用法,可以参考我的几篇文章
FreeRTOS学习—“任务”篇
FreeRTOS学习—“消息队列”篇
FreeRTOS学习—“信号量”篇
FreeRTOS学习—“事件组”篇
FreeRTOS学习—“定时器”篇

结束语

花费了三个小时做了个demo,写了一篇文章,只是提供一种解决问题的思路,有时候,不太需要你理解功能多透彻,只要是会切入,找到实现的关键点,很快就能做出点东西。
不过当然不是说深入理解不好,一旦出现一些稳定性的bug,可能就需要深入理解代码了。
时间就是金钱,效率就是生命,不过有时候,拼命去赶时间,也不是好事,今早高峰,看见一辆车

气囊也出来了,玻璃也碎了。哎,希望救护车帮你再抢点时间出来吧。但愿人没事。

单片机---HLK-W801蓝牙遥控点灯相关推荐

  1. 51单片机-蓝牙遥控红外循迹小车-代码+硬件连接

    2021/04/28-更新工具的连接 ----------------------------------------- 前几天弄了个基于51芯片的蓝牙红外小车,因为是新手也没有人教,网上的资料也不够 ...

  2. 51单片机蓝牙遥控麦轮小车

    一直以来就有想法自己做一个小车玩玩,但是一直没提上日程,这次寒假是个很好的机会,在这里把过程中的一些心得和资源分享给大家,源程序将在文末贴出来供大家参考 目录 硬件部分 底盘 麦克纳母轮 减速电机 主 ...

  3. 项目小实战:51单片机控制的手机蓝牙遥控小车设计(程序 元件清单 实物图)

    这几天有时间做了一个手机控制的蓝牙遥控小车车,终于今天实现了,把过程和心得跟大家分享一下. 废话不多说,先上实物图 一.项目元件清单 1.某宝购买一个智能小车底盘(本人车是四驱的,因此有四个电机,两块 ...

  4. stm32项目_stm32f103c8t6项目_循迹避障小车完整制作过程_智能小车设计_STM32智能小车教程-循迹-避障-蓝牙遥控-跟随

    [硬件] 元件选型 照片上传出问题了,改天补上,着急的可以看视频 视频链接在这里 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sKjJGMXv-16463139639 ...

  5. LabVIEW Arduino无线蓝牙遥控智能车(项目篇—2)

    目录 1.项目概述 2.项目架构 3.传感器和控制器 3.1.传感器 3.2.控制器 4.硬件环境 5.Arduino功能设计 6.LabVIEW功能设计 6.1.前面板设计 6.2.程序框图设计 1 ...

  6. 简单的STM32蓝牙遥控小车完整项目及资料分享,超全

    自学新手的第一个项目,做的时也在论坛查了许多大佬的文章,但还是有许多疑问,我就从一个小白的角度出发来和大家分享,应该对许多自学不久的萌新来说比较友好易懂.欢迎大家交流,大佬轻喷~~ 简单的蓝牙小车,目 ...

  7. MSP432蓝牙遥控小车

    目录 前言 搭建 硬件 软件 原理 源码 前言 这个小车是去年电赛的时候准备的,很遗憾我们赛区因为疫情被取消了比赛,我们也都已经大二大三了,因此我们没有机会再参加两年一次的电赛了.但是这些成果总不能放 ...

  8. 电赛小车常用硬件解析(蓝牙遥控,循迹)

    智能小车硬件解析 (蓝牙遥控.循迹)智能小车硬件解析 智能小车硬件解析 前言 一.单片机 1.什么是单片机 2.STM32F103C8T6 3.小车项目总览 4.器材清单 二.电机 1.直流减速电机 ...

  9. 5.39 综合案例2.0 - STM32蓝牙遥控小车2(语音控制)

    综合案例2.0 - 蓝牙遥控小车1- 语音控制 成品展示 案例说明 器件说明 小车连线 小车源码 语音模块遥控 语音遥控连线 模块使用说明 1.MLT-BT05 4.0 蓝牙模块 2.ASRPRO-2 ...

最新文章

  1. OpenAI 开放 GPT-3 微调功能,让开发者笑开了花
  2. Spring Cloud Stream消费失败后的处理策略(四):重新入队(RabbitMQ)
  3. HeartBeat?你到底要干什么!
  4. 升级总代分享思路_桃生企业至尊七郎瓷砖新展厅全新升级惊艳亮相
  5. html 怎么把表格不给输入,如何让用户在HTML5网页表单中输入持续时间而不会让他们烦恼?...
  6. 机器学习实战(七)线性回归(Linear Regression)
  7. 程序小白天天打卡(函数模板)
  8. 就业指导期末试题(含正确答案)
  9. Windows环境下32位汇编语言程序设计(典藏版) 高清完整
  10. Mapreduce Wordcount白名单 Python实现
  11. 现代控制理论(机器人或人工智能方向)补充资料:Python Control Systems Library + Modern Robotics
  12. tsLint环境配置及用法示例
  13. set接口-存储及遍历、HashSet、LinkedHashSet、TreeSet
  14. 人一生必看的100部电影(全球最佳电影排名榜TOP250)
  15. PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation 中文翻译
  16. 倭黑猩猩机器人_科学美国人60秒:倭黑猩猩妈妈监管儿子的私生活
  17. 总结各种神经网络的用处
  18. 支付宝小程序开发系列二: 获取支付宝用户user_id(.net)
  19. lodop打印控件的使用
  20. 数据分析方法--回归分析方法((SPSS建模:多元线性回归案例)

热门文章

  1. Android关于网络访问app应用开发相关的异常总结
  2. 2063:【例1.4】牛吃牧草
  3. 关于论文组会的一些思考(其一)
  4. 凸优化之共轭函数(二)
  5. 【千锋Python2205班8.29笔记-day06-冒泡排序和字符串基础】
  6. Le le's picture when aged 5 monthes old_拔剑-浆糊的传说_新浪博客
  7. 蓝底证件照rgb值是多少?一个方法帮你搞定
  8. vue3:加载本地图片等静态资源
  9. uniapp中,H5端使用html2canvas生成海报
  10. 不允许对系统目录进行即席更新_不被允许再更新安卓系统,华为手机用户怎么办?华为回应!...