赞
踩
(填下坑,把我之前答应大家的完整软件代码翻出来,供大家一起学习)
可以看看实现效果先:
智能家居APP展示视频(含源码)_哔哩哔哩_bilibili
目录
源码及相关Android电子书链接:源码及其Android相关书籍
这个是我毕业设计的完整软件项目,其实较为简陋,读者可以在此基础上二次开发,其包含三个功能,点击地图定位(设置家庭地址)、蓝牙控制(用于控制CC2530硬件,实质只是完成了SPP协议的数据上传及发送)、远端控制(WI-FI)。而我的毕业设计总体而言,包含软件、硬件两大板块,软件就是这个基于Android实现的智能家居APP,其中点击地图定位功能,及其附加功能我已经在往期文章中详细阐述,链接如下:
Android如何实现地图定位?Android studio+百度地图API+Android6.0系统实现地图显示、地址设置、点击地图定位功能(详细)
硬件板块分为三个内容:即基于C8T6实现WI-FI远端控制、基于CC2530实现简易智能家居组网、基于LD3320实现语音识别控制。具体操作实现步骤,可以详见我往期文章,链接如下:
STM32F103C8T6+ESP8266+MQTT使用最新版的oneNet可视化View实现远程控制(详细)
实现语音识别系统:手把手教你使用STM32C8T6和LD3320(SPI通信版)实现语音识别
功能需求,其一产品的Android手机端可实现点击定位功能,当定位在设定的家附近时,可选择跳转至远端控制,提前打开路灯,并可根据家中实时温湿度数据,开关空调设备且提供远端的洗衣机开关;其二则是在回到家中后,门口的声控灯、厨房的烟雾报警器、窗口的窗帘、客厅的风扇全部自动控制,以上包括需要手动控制的灯关皆由Zigbee技术进行组网,其中蓝牙模块HC-05作为手动控制设备的中间媒介;其三是在卧室设置一个语音控制系统,既可以控制灯光,同时也能控制风扇等设备。
一套基于Android 4.0及以上版本设备的应用程序接口,所实现的功能由普通地图、卫星地图的切换,可以查看路况图和热力图,同时可以显示当前所在地区,缩放当前地图视野,且可以点击地图查看当前地图的经纬度。由于要配合智能家居的远程控制系统,所以另外添加了家庭地址的设置功能。
蓝牙按钮功能程序的本质就是蓝牙串口通讯,该通讯的实现是基于SPP协议(Serial Port Profile),它能够建立蓝牙设备之间串口传输数据的功能程序而蓝牙串口旨在解决如何确保两种不同装置(通信的两端)应用程序间有完整通信路径的问题,其具体实现功能是完成Android手机对蓝牙模块HC-05的控制,进而实现手动控制Zigbee组网的智能家居系统,在尚未连接时,弹窗出现提示并给出返回和刷新功能,连接成功后出现按钮界面可以通过蓝牙指令控制家居设备,同时,当断开蓝牙设备后将重新出现蓝牙选择界面并给出提示。
远程控制功能程序是用One Net开发平台的可视化View,设计的一款应用,利用MQTT协议进行数据的上传和命令下发,以网页的形式下发和数据上传,即该功能界面不是Android studio设计的,是通过Android端进行程序的开启。
关于地图定位方面和远端控制两大功能,不做过多的解释说明,因为远端控制也只是通过Android端打开一个网络端的应用程序,它之所以会出现闪退的现象,是因为它的实现需要在开启权限的同时,打开证书信用确保打开的HTTPS是安全可靠的,否则当打开云台网页应用时会出现闪退现象,且因为在Android 5.0之后,默认情况下,不得载入http和https的混合体,有必要设置webview,让它可以装载混合网络协议的内容。代码链接如下:
解决Android端打开OneNet平台的可视化view闪退问题
那么我们的难点来到了蓝牙控制功能,首先需要明白,它就是一个蓝牙通讯app,和大家在应用商店下载的那些SPP软件的内核没有任何区别,总而言之本质是一样的。而我所做的,只是创建了一个丑不拉几的,只适用于我系统的界面而已。这其中,我所解决的难点有,关于蓝牙数据的上传与手机数据发送的实现、蓝牙断联后如何出现弹窗进行重新搜索连接、日志的上下滑动的实现等等。
还有一点需要申明的,我所调用的,是一位大佬写的蓝牙工具类,这个对我的帮助很大,我忘记是谁了,但是不管怎么样,感恩!!!
BLESPPUtils.java文件,代码如下,其中包含了,蓝牙源的搜索、蓝牙开启、保留日志、接受和发送字节数据等等。代码我就不贴了,具体可以看源码
- /**
- * 判断蓝牙是否断开连接
- */
- //The BroadcastReceiver that listens for bluetooth broadcasts
- private final BroadcastReceiver BTReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action) && menu_flag==0) {
- Intent intent_context = getIntent();
- finish();
- startActivity(intent_context);
- //Do something if disconnected
- Toast.makeText(getApplicationContext(), "不好意思,检测到设备已经断开连接,正在重启", Toast.LENGTH_SHORT).show();
- }
- }
- };
3、日志的上下滑动实现(TextView)
这个是因为我菜,所以纠结了好久,其实只需要在layout中设置以下即可,具体位置如图:
总结一下:关于我智能家居软件而言,其实也是我通过网络资源的整合与修改实现的,所以我认为取之于此,回馈于此,想着把我所做的这个小小项目发出来,也能够帮助到一些人。虽然这个软件界面做的很丑,很多功能或许还不完善,但也确实倾尽不少心血,而Android我也只是学了一些皮毛,这里我也会放一些我看过的Android电子书,放在源码的链接里,希望可以与大家一起学习进步。如果大家觉得有帮助,可以关注一波,共勉!
哦,对了,我打算后面聊聊cc2530及其相关的协议栈,关于无线传感网络的,我本科大部分时间就学这玩意了,打算好好总结一下所学知识,以免出现遗忘。以上
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。