暑假在家,某宝上买了几个模块来玩一玩,其中第一个用上的就是蓝牙串口模块。
对,你没有看错,就是这个玩意儿:
话说虽然这个东西仅仅只是把平时单片机的有线串口变成了无线的,但我感觉还是很有魔力的,突然感觉提升了一大个档次,毕竟它能和我的手机有了沟通渠道,MM再也不用担心我的单片机孤独了!哈哈。。。
这蓝牙串口模块刚到手,第一件事----点灯!这是所有单片机初学者最爱干的事。
前段时间借了一堆关于Android APP开发的书,照着写了个猜字游戏的程序就再也没有翻动过,要写个蓝牙数据传输的程序我还不敢想,于是我到WDJ上下了个现成的程序,为人民服务!我也为大家上传上来吧:
有了她,你就可以用你的Android设备与蓝牙串口模块愉快地玩耍了。
*****************************************************************************************************
貌似冷落了干活最多、最默默无闻的MCU了。
现在隆重介绍我们最核心的成员----STM32F401RE最小系统板(带ST-LINK)
这块板子是为了参加ST公司的ARM校园创新比赛申请的,尽管各个论坛,众多推手不断地夸它如何如何地Perfect(最近在恶补英语,这里当默写了,也帮大家复习复习),但我却很讨厌她的拖泥带水,考虑得过于周到反而让我用着很是不方便。
51直接硬性过渡到ARM让我到现在还难受着,更何况是直接就到F4,网上资料匮乏,只能就着F1的资料来弄,学习很慢。。。
********************** 跑题了*********************
蓝牙串口模块接到了开发板的USART1端口,EN端子由于占时不用用到AT指令,先悬空;STATE端子可以接个LED到地指示连接状态,我没连,就只是用到2个电源脚,2个串口数据端子。
连上USB,电源指示灯亮起,硬件电路就算OK了。
************************************************************************************************
硬件讲完来软的:
蓝牙串口助手工具打开界面是这样(昨天刚升级,多了几个按键和功能)
这是未连接状态:
搜索设备:
这是连接到蓝牙串口的状态:
现在说下,如何利用这个APP来实现开关一个LED的简单功能的。
我在这个APP里设置了两个按键,在设置里我可以设置任意一个按键的键码,当我按下某个按键时,手机自带的蓝牙模块便会以蓝牙的数据通信协议发送这个按键定义的键码到已连接的蓝牙设备上,当然这个键码就由开发者自己定义了。
但是还记得红外遥控实验里的“引导码”吗?我自己给它起了个名字:同步头,它是标志一帧数据的起始点,如果没有这个东西,我们没法从一连串接收到的数据中提取出控制信号;NEC标准的红外遥控编码方式里用了9ms+4.5ms的同步头来作为一帧数据的开始,它与数据0和1信号的区别特别大,所以抗干扰能力十分的强,一般不会出现误码的问题;而本次使用的蓝牙串口模块是单纯的UART数据传输,不能够自己定义一个类似于红外遥控的同步头,所以我就直接利用一个或者几个字节的数据来作为同步头。简单举个例子,比如我以0xaa作为同步头,那么我设置每按下一次“ON”按键手机蓝牙就发送0xaa 0xa0,按下“OFF”就发送0xaa 0x0a,那我的数据是不是就被0xaa分开,已经不是那么乱了,我可以在接收到这些数据后通过程序判断0xaa后的数据就是我的操作码,当然如果是这种情况下,0xaa本身就不能作为操作码来用了,针对这个问题,解决很简单,我多加几个字节作为同步头不就OK啦?按下“ON”,我发送0xa5 0x5a 0xa0,按下“OFF”,我发送0xa5 0x5a 0x0a不就完美解决了,当然也可以多加几个,以提高抗干扰能力,至于加多少合适,就靠自己测试了,我觉得加3个就基本万无一失了。
当然,有的人还喜欢加“同步尾”,就是在操作码后加几个字节的数据,本质上和同步头一样,看大家的喜好了。
下面这就是F4的点亮、熄灭一个LED的整个工程文件(由于本人是一边学习F4一边弄这个东西的,所以程序里有些东西是没用的,学习F4的朋友可以以该工程作为模板来用):
USART1(串口发送、中断接收、蓝牙串口控制点亮熄灭LED、TIM2定时中断).zip