单片机---HLK-W801蓝牙遥控点灯
总目录
《单片机—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蓝牙遥控点灯相关推荐
- 51单片机-蓝牙遥控红外循迹小车-代码+硬件连接
2021/04/28-更新工具的连接 ----------------------------------------- 前几天弄了个基于51芯片的蓝牙红外小车,因为是新手也没有人教,网上的资料也不够 ...
- 51单片机蓝牙遥控麦轮小车
一直以来就有想法自己做一个小车玩玩,但是一直没提上日程,这次寒假是个很好的机会,在这里把过程中的一些心得和资源分享给大家,源程序将在文末贴出来供大家参考 目录 硬件部分 底盘 麦克纳母轮 减速电机 主 ...
- 项目小实战:51单片机控制的手机蓝牙遥控小车设计(程序 元件清单 实物图)
这几天有时间做了一个手机控制的蓝牙遥控小车车,终于今天实现了,把过程和心得跟大家分享一下. 废话不多说,先上实物图 一.项目元件清单 1.某宝购买一个智能小车底盘(本人车是四驱的,因此有四个电机,两块 ...
- stm32项目_stm32f103c8t6项目_循迹避障小车完整制作过程_智能小车设计_STM32智能小车教程-循迹-避障-蓝牙遥控-跟随
[硬件] 元件选型 照片上传出问题了,改天补上,着急的可以看视频 视频链接在这里 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sKjJGMXv-16463139639 ...
- LabVIEW Arduino无线蓝牙遥控智能车(项目篇—2)
目录 1.项目概述 2.项目架构 3.传感器和控制器 3.1.传感器 3.2.控制器 4.硬件环境 5.Arduino功能设计 6.LabVIEW功能设计 6.1.前面板设计 6.2.程序框图设计 1 ...
- 简单的STM32蓝牙遥控小车完整项目及资料分享,超全
自学新手的第一个项目,做的时也在论坛查了许多大佬的文章,但还是有许多疑问,我就从一个小白的角度出发来和大家分享,应该对许多自学不久的萌新来说比较友好易懂.欢迎大家交流,大佬轻喷~~ 简单的蓝牙小车,目 ...
- MSP432蓝牙遥控小车
目录 前言 搭建 硬件 软件 原理 源码 前言 这个小车是去年电赛的时候准备的,很遗憾我们赛区因为疫情被取消了比赛,我们也都已经大二大三了,因此我们没有机会再参加两年一次的电赛了.但是这些成果总不能放 ...
- 电赛小车常用硬件解析(蓝牙遥控,循迹)
智能小车硬件解析 (蓝牙遥控.循迹)智能小车硬件解析 智能小车硬件解析 前言 一.单片机 1.什么是单片机 2.STM32F103C8T6 3.小车项目总览 4.器材清单 二.电机 1.直流减速电机 ...
- 5.39 综合案例2.0 - STM32蓝牙遥控小车2(语音控制)
综合案例2.0 - 蓝牙遥控小车1- 语音控制 成品展示 案例说明 器件说明 小车连线 小车源码 语音模块遥控 语音遥控连线 模块使用说明 1.MLT-BT05 4.0 蓝牙模块 2.ASRPRO-2 ...
最新文章
- OpenAI 开放 GPT-3 微调功能,让开发者笑开了花
- Spring Cloud Stream消费失败后的处理策略(四):重新入队(RabbitMQ)
- HeartBeat?你到底要干什么!
- 升级总代分享思路_桃生企业至尊七郎瓷砖新展厅全新升级惊艳亮相
- html 怎么把表格不给输入,如何让用户在HTML5网页表单中输入持续时间而不会让他们烦恼?...
- 机器学习实战(七)线性回归(Linear Regression)
- 程序小白天天打卡(函数模板)
- 就业指导期末试题(含正确答案)
- Windows环境下32位汇编语言程序设计(典藏版) 高清完整
- Mapreduce Wordcount白名单 Python实现
- 现代控制理论(机器人或人工智能方向)补充资料:Python Control Systems Library + Modern Robotics
- tsLint环境配置及用法示例
- set接口-存储及遍历、HashSet、LinkedHashSet、TreeSet
- 人一生必看的100部电影(全球最佳电影排名榜TOP250)
- PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation 中文翻译
- 倭黑猩猩机器人_科学美国人60秒:倭黑猩猩妈妈监管儿子的私生活
- 总结各种神经网络的用处
- 支付宝小程序开发系列二: 获取支付宝用户user_id(.net)
- lodop打印控件的使用
- 数据分析方法--回归分析方法((SPSS建模:多元线性回归案例)
热门文章
- Android关于网络访问app应用开发相关的异常总结
- 2063:【例1.4】牛吃牧草
- 关于论文组会的一些思考(其一)
- 凸优化之共轭函数(二)
- 【千锋Python2205班8.29笔记-day06-冒泡排序和字符串基础】
- Le le's picture when aged 5 monthes old_拔剑-浆糊的传说_新浪博客
- 蓝底证件照rgb值是多少?一个方法帮你搞定
- vue3:加载本地图片等静态资源
- uniapp中,H5端使用html2canvas生成海报
- 不允许对系统目录进行即席更新_不被允许再更新安卓系统,华为手机用户怎么办?华为回应!...