手把手教你做蓝牙聊天应用(一)-功能规划

前言

通过“计算器”和“视频播放器”我们已经能够开始开发一些比较像样的应用了。

今天,我们将开始制作一个“蓝牙聊天”应用。这个应用其实很简单,没有炫酷的界面,就是一对一、通过蓝牙连接两台设备,让两个人互相发送信息。

可别觉得它太无聊、没有什么实用性,其实我们正是想通过它让你开始接触网络编程(蓝牙和wifi都是无线连接技术,它们的程序设计方法和思路非常的相似)。

另外,学会了使用蓝牙,就为大家打开了技术开发的另一扇大门-物联网,现在很多物联网硬件都需要使用蓝牙技术进行连接,真是一箭双雕。将这个技术掌握以后,就可以结合我们的另外一篇介绍蓝牙小车的文档,开发蓝牙小车的遥控器了。

这个应用是根据Google在Android SDK中提供的Bluetooth Chat应用改编的。Google的示例只有代码,没有解释说明,所以对很多初学者来说会有很多的疑问。这里将Google的示例程序进行了大范围的改造,并美化了界面,让它便于初学者学习,从原理知识到设计方案都会详细的讨论。希望大家通过这一章节的学习,对不同设备间的通信开发具有整体的认识,并将这里面使用到的技术,作为我们下一步开发的垫脚石。

本文针对的读者是:

  1. 对安卓开发有初步认识同学;
  2. 准备做物联网开发,但是对安卓(控制端)开发感到迷茫的小白;

在开始以前,假设各位已经做好了如下准备:

  • 一台开发用笔记本电脑,并搭建好了开发环境;
  • 两部安卓系统设备(手机或平板电脑);
  • 一根连接电脑和安卓设备的数据线(通常是micro usb数据线);
  • 一到两天时间;
  • 耐心与求知欲;

本文的代码,可以从安豆网示例代码中下载。


/*******************************************************************/
* 版权声明
* 本教程只在CSDN安豆网发布,其他网站出现本教程均属侵权。
/*******************************************************************/

第1节 功能规划

规划产品的时候,我们先要做加法,尽可能的把它可以拥有的功能挖掘出来;然后再做减法,把不实用、或者投入性价比不高的功能放一放,作出第一版产品;最后,再根据用户的反馈、加上上一版产品留下的遗憾,进行产品的升级。

这是一个循环发展、螺旋上升的过程。这样做能把有限的开发资源放到最重要的地方去,得到用户的反馈,尽可能设计出用户真正需要的产品。

1.1 可能的功能点

作为一个即时通讯的小应用,我们完全可以把它设计成“微信”或者“QQ”的样子,唯一的不同是,这个聊天应用是通过蓝牙技术进行的数据传输,而不是wifi。因此,我们可以暂时列出它可能具备的功能:

  1. 两台设备能互相连接;
  2. 连接后的设备可以传输数据,比如文字、图片、语音、音乐、甚至是实时视频;
  3. 双方发送的内容,能够展示出来;
  4. 可以编辑任何一方的个人信息,例如头像、昵称、个性描述等等,建立通信等双方可以查看相互的资料;
  5. 可以查看双方聊天的历史纪录;
  6. 可以搜索聊天的历史记录;
  7. 可以单独保存对方发送的图片、语音或者视频
    ……

可以添加的功能实在是太多了。

1.2 功能的筛选

从上面列出的明细可以看出,能够赋予这个聊天应用的功能实在是太多了,因此我们必须根据我们的能力和精力来进行筛选,做功能的减法。

  1. 设备的互联是必须的,实现聊天的基础就是建立在这个基础上的。
  2. 数据在设备之间的传输都是以二进制的形式进行的,能够传送文字、图片、语音、音乐、视频等等信息。
  3. 需要展示出双方聊天的内容,这样方便用户判断上下文。

以上3条是就是蓝牙聊天应用的核心功能,其它功能都是这2条基础功能的扩展,

  1. 个人资料,有的话当然很好,但是并不会影响两人通信功能的使用;
  2. 查看历史聊天记录,查看双方上一次建立连接的聊天记录当然是有一个有必要的功能,不过为了简化问题,我们还是暂时把这个功能放一放,留到下一版再加入吧;

至于其它功能,那就离的更远了。我们就暂时不去实现了。

1.3 蓝牙技术的性能考虑

用蓝牙(或者wifi)传输数据,都是传输的二进制数据。文字、图片、语音、音乐、实时视频等内容本质上都是二进制数据,只是它们的格式不太一样而已。所以理论上讲,传输这几类信息都是可以的。

不过任何无线传输技术,在单位时间内传输的数据量和传输的距离都是有限制的。对传输要求比较高的应该算实时视频内容了,每一秒要达到24帧,所以对传输速度的要求可想而知了。那么蓝牙的传输速度能达到吗?

不同的数据类型,对传输的要求是不同的,传输什么样的数据比较合适呢?现阶段,我们把问题简化一下,就让它传送简单的字符串吧。

二进制数据流作为任何数据的载体,是最为基础的,而字符串可以看成是一种具有特殊结构的二进制数据。所以,为了开发简单,第一步先假设只传输文字内容。

到目前为止,实现整个功能都不会有技术上的障碍了。

1.4 现阶段的功能

根据上面的讨论,我们确定蓝牙聊天应用的具体功能:

  1. 能够所搜周围打开了蓝牙功能的设备,把搜索的结果展示出来;
  2. 发现可连接设备后,点击某个搜索的结果,能够主动连接对方;
  3. 能够被周围的其它蓝牙设备搜索到;
  4. 当收到其它设备发出的连接请求以后,能够接受对方的请求,建立连接;
  5. 连接的过程中,可以取消连接,连接成功后,能够断开连接;
  6. 当两个设备建立连接以后,就可以以二进制数据的形式传输数据,数据的内容就是简单的文字;
  7. 双方发送的内容,能够分别展示出来,但是不保存以前曾有过的聊天记录;
  8. 聊天的记录列表中,不能删除展示的信息;
  9. 当设备之间已经相连,就不能和别的设备建立连接了,彼此之间,一次只能连接一个设备;

1.5 功能条件的假设

我们确定了蓝牙聊天应用的功能,还需要给出一些功能设计的基本假设。

  1. 当两台蓝牙设备已经相连的时候,如果其中一台设备的蓝牙功能被用户手动关闭了,我们的应用需要做怎样的处理?对于此,为了简化第一版应用的开发,就简单的假设蓝牙功能一旦打开后,应用运行的过程中,蓝牙功能就不会被关闭了。

  2. 程序的主界面退出后,是否可以继续在后台接收对方发送过来的数据?就像微信那样,只要应用没有退出而且有网络,就能一直接收朋友发来的信息?现阶段还是从简化问题的角度出发,我们就假设一旦程序的主界面退出,就不需要在后台继续接收数据了。

1.6 关于遗憾

对于那些没有在这个阶段加入的功能,期待以后加入吧。

对于那些为了简化开发难度、减少开发时间而采用的简单设计,期待在下一版程序中优化和完善吧。


/*******************************************************************/
* 版权声明
* 本教程只在CSDN安豆网发布,其他网站出现本教程均属侵权。

*另外,我们还推出了Arduino智能硬件相关的教程,您可以在我们的网店跟我学Arduino编程中购买相关硬件。同时也感谢大家对我们这些码农的支持。

*最后再次感谢各位读者对安豆的支持,谢谢:)
/*******************************************************************/

  • 11
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
我要实现的功能就是能用我手机控制电源的通、对家里的电器的开关进行控制。(目前只是内网操作) 1.首先是蓝牙APP 易安卓编写的,说编写其实我只是修改了其中的一些内容,主要的部分都是通过视频学习的,不过我已经懂得了那些命令,(后面有工程文件,如果不懂,可以去找易锦老师的视频来看,如果找不到,我这存的有),两张界面和代码截图,非常简单,功能也很简单,程序前后修改了两个主要地方,主要原因是测试的时候发现第一种程序会出现错误,在单片机哪里会仔细说明! 操作界面,很简单,打开之后打开蓝牙,然后点击搜索设备,找到你的模块名字,点击之后就可以连接了,连接之后下面会显示蓝牙的名称和地址信息。这个是编程软件中显示的界面,可能和在手机上面运行的不一样,因为有些东西是非可视的,不过不影响,这反而能让我们知道更多的细节。 2.单片机程序 这个程序也很简单,只要学过一些单片机程序的人应该都知道吧,串口通信,设置好通信的波特率,初始化工作做好,然后在串口中断程序里写上你要做的事情就可 以了,这里虽然说11.0592的晶振定时器初值为fd,但是如果用12m的晶振也是可以的,差距不多,没有问题。(说的不怎么专业,我也不是很专业的 人,所以请大神误喷,见笑了!)这里是修改前后的程序不一样的地方,前面的程序是单片机没接收到数据之后读取前一次的IO状态,然后改变其状态,但是测试 的时候发现读取状态有错误,估计是我的电路有问题,第一个继电器可以正常工作,第二个和第三个都有问题,当第一个关闭的时候可以打开,但是当打开的了却不 能关闭,只能用关闭所有的命令来关闭,(找了一下午也没发现问题,元件换了几个都没找到,后来放弃了),后来就换了后面程序,直接发送状态命令,不用判断 当前的状态了,我觉得后面这种可能更好!而且实际测试的时候也可以,没有问题。(补充一下,我发现12M的晶振不能用11.0592M的数据,原因是定时 器计数产生的波特率与9600差距有点大,误差到达了8.5%左右,理论上误差要小于4%才能正常通信,所以通信有错误,虽然能通信,但是数据不对,后来 我把晶振换回来就可以了,看来要实践才知道真理。) 第 一、二张是修改之前的程序,有问题,最后一张是修改之后的,没有问题,后来仔细想了一下,后面一种才是正确的,前面一种的改变状态可能会出现错误,就是手 机上显示的开关是关的,然而实际电路中的电路是开着的(这也是没有数据回传的原因吧,现在只是单向的手机发,模块接的形式,以后再研究)!,但是后面一种 不会出现这个问题! 3.实物电路连接 我也是在测试,所以先用LED 等来代替继电器输出,然后才用到继电器上面。单片机直接放在我做的最小系统版上面,然后用导线来连接到蓝牙开关的小板子上,等测试无误之后再安装在上面,不然不好写程序上去。输出接的是一个小电机,用的一个12v蓄电池代替220V电源,如果要用220V的电源,要注意安全了!提醒一下,绝缘一定要做好,毕竟不是开玩笑的。简单说一下电路连接,首先你得需要焊接一个51单片机最小系统板,(如果这个都不会,那你需要先学习一下,不然肯定是没办法做的)然后是由三极管驱动继电器的电路,记得加二极管,不然三极管很有几率被击穿,最后是蓝牙模块与单片机的连接,电源接好,一般蓝牙模块都是宽电压的,所以直接接到5V电源上,与单片机共用电源,不用什么电压转换,很方便的,把蓝牙模块的TX与单片机的RX连接,就是P3.0那个引脚,RX接单片机的TX,就是P3.1那个引脚,至于继电器哪里你需要接成常开还是常闭的模式就你自己决定了,当然还要加一点录滤波的,因为继电器启动的一瞬间电流很大,担心是单片机死机!这些就是主要的东西了!) 前一张是之前测试用的,后面一张是后来直接把单片机装上去的,看着没有那么乱了,可以看到,当手机上的开关23打开时,电路板上的灯23也是两的,表明继电器已经被打开了。 4.打完收工,作品完成 好了至此最简单的蓝牙开关就做好了,可以躺在床上遥控在远处的风扇了(好吧你们都用的是空调,当我没说!),定时关机(这个功能没做,不过原理都一样,自由发挥了),其他神马的!感兴趣的同学可以试一下,比如说高级一点的外网控制的,把电脑作为服务器,把蓝牙模块接好,和控制器连接起来,然后让手机与电脑通过互联网通信,用手机给电脑发送指令,再通过电脑给蓝牙模块发送指令,比如提前开个空调什么的(提前开风扇没用,还是开你们的空调吧),然后其他什么的东西就自己发挥了!我想这个应该是属于传说中的最简单的物联网吧,虽然没有那么高大上,但是原理是一样的。虽然是手动控制的,不过可以发挥你聪明大脑,让他自动控制啊!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值