IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android手机作为BLE主机(客户端) -> 正文阅读

[移动开发]Android手机作为BLE主机(客户端)

????????本文章主要介绍物联网短距离无线通信的技术之一低功耗蓝牙技术BLE,主要应用领域为智能穿戴设备,一般情况下需要手机端实现BLE上位机(主机、客户端)。以下介绍基于HC05/BT05蓝牙串口透传模块+MCU(STM32F103VET6),当然对于TI的CC2541、乐鑫的ESP32,本工程同样适用!

? ? ? ? 首先介绍两个重要概念,ServiceUUID(服务UUID)与CharacteristicUUID(特征UUID),ServiceUUID我们可以理解为一个班级,这个班级主要负责数据传输的工作,当然班级内部有许多学生,有的学生负责接收数据(特征值的通知功能),有的学生负责发送数据(写特征值),所以BLE进行一次数据传输时,我们需要指定一个班级(ServiceUUID)和若干学生(CharacteristicUUID),对于HC05/BT05蓝牙串口透传模块,由于其已经输入固件,所以CharacteristicUUID通常是一个人(也就是说接收数据与发送数据的是同一个同学);而对于CC2541、ESP32等我们可以直接编程的芯片通过需要指定两个CharacteristicUUID(特征值通知、写特征值)

?1、设置HC05/BT05

通过串口调试助手或者MCU的串口配置HC05/BT05处于从机模式,设备名称任意设置,ServiceUUID为FFF0,CharacteristicUUID为FFF6????????

2、 Android代码中作相应的替换

3、接收数据

?此处我通过STM32采集的温湿度数据,通过串口发送给HC05/BT05,所以接收数据时,要严格按照STM32中的数据进行。Android中程序如下:

public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
            byte[] desData = characteristic.getValue();
            String temp_str, humi_str;
            temp_str =  getStringSensorData(desData[0])+"."+getStringSensorData(desData[1])+" ℃";
            humi_str =  getStringSensorData(desData[2])+"."+getStringSensorData(desData[3])+" %";
            Log.i(TAG, " >>>>>温度为:" + temp_str);
            Log.i(TAG, " >>>>>湿度为:" + humi_str);
            temp.setText(temp_str);
            humi.setText(humi_str);
        }

?STM32中透传程序如下:

void BLE_Printf()
{
	u8 sendbuf[4];
	sendbuf[0] = (int)temp_int;
	sendbuf[1] = (int)temp_deci;
	sendbuf[2] = (int)humi_int;
	sendbuf[3] = (int)humi_deci;
	if(BLE_State()==1)
	{
		SendSensorData(sendbuf ,4);
	}
	else
	{
		
	}
}

4、 发送数据(控制指令)

此处我通过手机端发送控制指令控制STM32连接的LED灯,Android中代码如下:

public void KeyEvent() {
        swh_led.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                if (swh_led.isChecked()) {
                  String  data = "LEDON";
                  sendLeData(data.getBytes());
                } else {
                    String  data = "LEDOFF";
                    sendLeData(data.getBytes());
                }
            }
        });
        btn_ble.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (mConnectionState) {
                    cancelDialog.show();
                    cancelDialog.setMessage(getString(list_disconnecting_ble));
                    mHandler.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            cancelDialog.dismiss();
                        }
                    }, 1000);
                    mConnectionState = false;
                    //btn_ble.setText(getString(R.string.list_connect_ble));
                    if (mBluetoothGatt != null) {
                        mBluetoothGatt.disconnect();
                    }
                } else {
                    scanLeDevice(true);
                }


            }
        });
    }

STM32中的程序如下:

void LED_Control(void)
{
		if(ReceiveState == 1)
		{
			RxCounter=0;
			ReceiveState=0;
			if(FindStr((char*)aRxBuffer,"LEDON")==1)
			{
				//printf("Receive Data:%s\n",aRxBuffer);
				LED2(1);
				LED3(1);
				LED4(1);
			}
			else	if(FindStr((char*)aRxBuffer,"LEDOFF")==1)
			{
				//printf("Receive Data:%s\n",aRxBuffer);
				LED2(0);
				LED3(0);
				LED4(0);
			}
			else
			{
			
			}
			memset(aRxBuffer,'\0', sizeof(aRxBuffer));
			
		
	}
	
		
}

以上就是BLE模块与手机蓝牙进行双向通信的简单过程,有兴趣的可以下载Android工程的完整代码如下https://download.csdn.net/download/baidu_40311265/35088959

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-10-29 13:09:42  更:2021-10-29 13:11:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:58:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码