对移动开发中蓝牙温湿度源码的部分分析

一;MainActivity介绍
1;uuid介绍
对应gatt中Service的uuid
private static final String UUID_SERVICE = “0000fff0-0000-1000-8000-00805f9b34fb”;
对应gatt中Characteristic的uuid
private static final String UUID_CHAR6 = “00 00fff6-0000-1000-8000-00805f9b34fb”;
对应设备的uuid。
private static final String UUID_DESC = “00002902-0000-1000-8000-00805f9b34fb”;
2;private void bindView()绑定控件;
利用findViewById绑定ui中各个控件,其中有两个特殊的,一个是ToggleButton按钮,存在两个状态事件的按钮,二个是ListView设备显示列表。具体的介绍ui时在解释。
3;private void initData()初始化数据
对接收的字符串初始化为“”,并且对listview适配器进行加载,
4;private void initEvent()初始化事件
4.1;因为该工程中存在从BLE中读取数据并更新ui界面,并且读取数据是个耗时过程,因此要是用子线程,注意子线程中要改变ui界面,因此要使用到Handle和TimerTask和Timer是为了进行定时进行数据更新,
并且可以达到子线程拿数据放回主线程修改ui界面。
Handler的时候只需在主线程创建一个handler对象,在子线程通过在主线程创建的handler对象发送Message,在handleMessage()方法中接受这个Message对象进行处理。通过handler很容易的从子线程切换回主线程了。
 Timer类是一种线程设施,可以用来实现某一个时间或某一段时间后安排某一个任务执行一次或定期重复执行。该功能和TimerTask配合使用。TimerTask类用于实现由Timer安排的一次或重复执行的某个任务。void schedule(TimerTask task, long delay, long period) 安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。
就是利用它们完成对 设备BLE发送读取数据命令和数据内容,以完成后续读取数据更新ui的监听事件。
4.2:两个点击事件,一个是ToggleButton按钮的扫描设备和停止扫描设备。还有一个是listView的点击事件,进行设备的连接或者断开。
4.2.1;扫描设备,当扫描到设备时回调的事件;
private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() {
public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) {
runOnUiThread(new Runnable() {
public void run() {
//在里面进行 对listView的一些简单操作。

5;获取BLE实例,然后开启监听事件,发现BLE终端的Service和收到BLE终端数据交互。
5.1;获取BLE实例;mBLE = new BluetoothLeClass(this);其中BluetoothLeClass是自己定义的类。为了给蓝牙设备GATT服务器为管理连接和数据通信做服务用的。
5.2;发现BLE终端的Service时回调mBLE.setOnServiceDiscoverListener(mOnServiceDiscover);
搜索到BLE终端服务的监听事件
private BluetoothLeClass.OnServiceDiscoverListener mOnServiceDiscover = new OnServiceDiscoverListener() {
public void onServiceDiscover(BluetoothGatt gatt) {
//在里面找到Service和Characteristic
//找到Sercice则说明进行了连接。
}
}
5.3; 收到BLE终端数据交互的事件mBLE.setOnDataAvailableListener(mOnDataAvailable);
收到BLE终端数据交互的监听事件
private BluetoothLeClass.OnDataAvailableListener mOnDataAvailable = new OnDataAvailableListener() {
public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
//BLE终端数据被读的事件
}
public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
//收到BLE终端写入数据回调
//byte[] readBuff = characteristic.getValue();获取数据。
}
}
二;LeDeviceListAdapter对listView的一些基本操作类,继承BaseAdapter
1;LayoutInflater;//LayoutInflater技术广泛应用于需要动态获取View
注意创建LayoutInflater实例时需要context因此这个类需要传入形参。
mInflator = mContext.getLayoutInflater();获取实例‘
view = mInflator.inflate(R.layout.listitem_device, null);动态获取控件
2;因为listView是由两部分组成地址和设备,因此我们封装了一个内部类。

三;BluetoothLeClass类,自己定义的一个类,
作用就是通过一个 托管在一个给定的蓝牙设备GATT服务器为管理连接和数据通信做服务 ;
1;接口内嵌。定义回调控制类
自定义接口。监听的回调接口
1.1;定义回调接口
public interface OnConnectListener {
//调用在BluetoothGattCallback的回调方法onConnectionStateChange中。
public void onConnect(BluetoothGatt gatt);
}等等;
1.2;定义回调实现类对象
private OnConnectListener mOnConnectListener;
1.3;获取回调实现类对象
public void setOnConnectListener(OnConnectListener l) {
mOnConnectListener = l;
}
1.4;实现回调方法,在private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback()的一些重写方法中实现回调方法,

2;其余都是对Gatt的一些操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Keil5,要实现蓝牙温湿度的显示,需要先具备蓝牙模块和温湿度传感器。以下是具体的操作步骤: 1. 硬件连接:将蓝牙模块与单片机连接。通常使用UART接口进行连接,并确保连接正确,包括TX和RX引脚。 2. 引入相关库文件:在Keil5的工程引入相应的蓝牙温湿度传感器库文件。这些库文件可以来源于官方或第三方开发者提供的SDK或驱动,具体引入方法请参考相关文档。 3. 初始化蓝牙模块:在代码进行蓝牙模块的初始化设置,包括波特率、数据位、停止位等设置。具体设置方法因蓝牙模块型号不同而异,需参考蓝牙模块的相关文档。 4. 初始化温湿度传感器:同样,在代码进行温湿度传感器的初始化设置,包括采样率、测量范围等设置。具体设置方法需参考温湿度传感器的相关文档。 5. 读取温湿度数据:通过调用相应的函数读取温湿度传感器返回的数据。根据具体传感器的SDK或驱动提供的接口进行调用,获取温湿度数值。 6. 将温湿度数据发送至蓝牙模块:使用蓝牙模块的发送函数将获取到的温湿度数据发送给连接的设备。方法为调用相应的发送函数并传入温湿度数值,即可将数据通过蓝牙传输。 7. 在蓝牙设备上显示温湿度数据:连接到蓝牙设备的终端或APP进行相应的配置,以使其能够接收并显示温湿度数据。具体配置方法请参考终端或APP的相关文档。 通过以上步骤,就可以在Keil5实现蓝牙温湿度的显示功能。在实际应用,还可以对数据进行处理和优化,实现更多个性化的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值