Android串口BLE蓝牙通信Java版
0. 导语
我们都知道,在物联网中,BLE蓝牙是通信设备的关键设备。在传统的物联网应用中,无线WIFI、蓝牙和Zigbee,还有一些其他的2.4GHz的无线网卡等。对于一个面向物联网的嵌入式工程师来讲,不单单是要学会底层硬件嵌入式或者是嵌入式Linux驱动的开发,还要掌握上层应用,以理解开发流程,方便未来和软件应用工程师协作开发。“也只有穿别人的鞋子,才知道别人的感觉”似乎就是这个道理吧。
16年的时候,我尝试做过Qt版本的Android,使用的是C++语言,搭建完环境之后开发出了基于Qt的蓝牙通信demo。虽然Qt在不断的完善对于Android的支持,但终究C++向Java转变的时候,效率是一方面的问题,库同样是一方面的问题。Qt的定位也只能是临时应付,或者说应用内的C++算法繁琐的时候,选择C++开发Android才是一个上上策。
对于面向物联网的嵌入式工程师,对于Android不需要掌握太深刻,重头戏不在这里,但是必须要有了解,也要会开发,我猜Android工程师的精髓在于业务逻辑处理上,而对于我们嵌入式工程师来讲,我们只在乎功能的实现,也只是Android工程师掌握的一个边角而已。后继,我们还会开发基于Java Android的Socket编程和服务器通信,还有Wifi编程。
本文的功能和Qt on Android 蓝牙通信开发一样,只是使用Java进行重写。也不得不说,Java的UI比Qt好多了,(在没有专业的UI制作下),在物联网通信中BLE蓝牙适合传输一些控制命令,或者一些家居数据包括温度湿度等等。
1. 蓝牙通信组成
我们将使用蓝牙功能按顺序分成三个部分。第一个部分,蓝牙的控制,对于蓝牙的开启和关闭;第二部分,对于蓝牙的搜索,并且可以增加到UI列表里面;第三部分,蓝牙数据传输和通信,可以发送数据,可以接收数据。如图所示,为整个蓝牙demo区域,实现了最基本的功能,同Qt on Android蓝牙通信开发一样,有蓝牙列表显示+接收和发送和蓝牙控制的基本功能。下一步就进行蓝牙通信的开发介绍。
1.1 蓝牙开发架构
如图所示,为蓝牙Activity的界面,里面包含了,TextView,ListView,LineEdit,和一些按钮,使用的是相对布局,为该蓝牙开发提供最基本的功能控制。
XML布局代码如下:
android:layout_height="match_parent"
android:layout_width="match_parent">
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
android:id="@+id/tv_bluelist"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:text="Bluetooth List:"
android:textColor="#000"
android:textSize="15dp"
/>
android:id="@+id/lv_bluelist"
android:layout_width="match_parent"
android:layout_height="160dp"
android:paddingTop="1dp"
android:layout_marginTop="5dp">
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Recv display:"
android:textColor="#000"
android:textSize="15dp"
android:layout_marginTop="5dp"
/>
android:id="@+id/tv_recv"
android:layout_width="match_parent"
android:layout_height="160dp"
android:layout_marginTop="5dp"
android:textColor="#000"
/>
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Send:"
android:textColor="#000"
android:textSize="15dp"
android:layout_marginTop="5dp"
/>
android:id="@+id/et_send"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginTop="5dp"
android:textColor="#000"
android:textSize="12dp"
/>
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
android:layout_width="match_parent"
android:layout_marginHorizontal="10dp"
>
android:id="@+id/btn_send"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:text="Send" />
android:id="@+id/btn_disconnect"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:text="Disconnect" />
android:id=