用户工具

站点工具


技术:通讯:蓝牙

Android 蓝牙开发

https://www.jianshu.com/p/72f7f6452f45 一.Android蓝牙BLE关键类 1.1. BluetoothAdapter 1.2. BluetoothLeScanner 1.3. BluetoothDevice 1.4. BluetoothGatt 1.5. BluetoothGattCallback 1.6. BluetoothGattService 1.7. BluetoothGattCharacteristic 1.8. BluetoothGattDescriptor

二. 蓝牙连接 2.1. 蓝牙连接——手机app开始蓝牙前的准备工作 2.2. 蓝牙连接——第一步:获取设备BluetoothDevice 2.3. 蓝牙连接——第二步:把BluetoothGattCallback对象作为connectGatt方法的参数获取BluetoothGatt 2.4 蓝牙连接——第三步:BluetoothGattCallback主要回调方法处理分析

三. 注意事项

作者:何小送 链接:https://www.jianshu.com/p/72f7f6452f45 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

蓝牙客户端Socket通讯流程

蓝牙客户端Socket的与Sokcet流程是一样的,只不过参数不同而已。如下: 1、创建客户端蓝牙Sokcet 2、创建连接 3、读写数据 4、关闭

服务端socket: 1、创建服务端蓝牙Socket 2、绑定端口号(蓝牙忽略) 3、创建监听listen(蓝牙忽略, 蓝牙没有此监听,而是通过whlie(true)死循环来一直监听的) 4、通过accept(),如果有客户端连接,会创建一个新的Socket,体现出并发性,可以同时与多个socket通讯) 5、读写数据 6、关闭 ———————————————— 版权声明:本文为CSDN博主「Android_大佬」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_39079048/article/details/78923669

蓝牙配对流程

蓝牙基本功能:

第一个:蓝牙状态的改变是通过广播接收到的。 蓝牙搜索到设备、绑定设备(配对)也是通过广播接收的。(搜索到设备系统会自动发一个广播)

a.日志打印初始化:说白了就是为了方便我这种开发狗看上电启动的Log信息以及后续输出调试信息。不是必须的,但很重要。

b.APP定时器初始化:初始化APP定时器,用于实现各种定时任务。很重要。

c.硬件初始化:如指示灯初始化、OLED屏幕初始化、电源管理初始化等。

d.BLE相关初始化:包含蓝牙协议栈初始化、广播、首选连接参数、GAP层、服务等初始化配置。这部分初始化完成后,整个BLE部分的程序就会按照我们自己设置的参数运行。

(2)启动

对于外围设备来说,如手环,启动的是广播,启动之后系统开始按照配置的广播间隔开始发送广播,等待中心设备连接,也就是等待手机连接。

对于中心设备(手机)而言,启动的是扫描,扫描周围的蓝牙设备。

(3)空闲管理

  空闲管理说白了就是为了省电,实现低功耗。你戴个手环,总不希望天天充电吧。空闲管理就是在你不看手环时候让手环进入到低功耗模式。若有事件唤醒,如抬手腕亮屏等,就会恢复工作模式。
  若程序中启用了日志打印功能,空闲管理还处理挂起的日志信息。

(4)事件处理

应用程序通过注册“事件监听”来监视BLE协议栈事件。开发过Android就比较容易理解,如Button就需要监听,看看Button是否按下等。

蓝牙中如外围设备和中心设备连接后,SoftDevice会提交 “连接事件”,应用程序会在事件处理函数中接收该事件并执行操作。

对于一开始接触蓝牙开发的人而言,看完这些感到一丝丝懵逼也是很正常的。开发过蓝牙的话,这些就很容易理解了。

没关系,下面开始实战。
本次开发选用 Nordic nRF52832蓝牙芯片,相关开发板某宝也有很多卖。关于Nordic芯片之前的文章有过介绍,翻阅历史文章。

2.先看Main函数

  Main函数中主要调用各个模块的初始化函数,如硬件初始化、IIC屏幕初始化等,这些模块初始化本文暂不深入,主要是讲蓝牙架构。其中最重要的是蓝牙初始化。
  弄懂了蓝牙初始化,蓝牙就能跑起来。

int main(void)

{

Log 初始化 APP_ERROR_CHECK(NRF_LOG_INIT(NULL)); NRF_LOG_DEFAULT_BACKENDS_INIT(); NRF_LOG_INFO(“log init ok.”); NRF_LOG_FLUSH(); 硬件初始化,APP timer,led,power Manager等

my_ble_init_harder();

twi初始化,iic设备扫描,iic_sacn.c iic_scan_address(); nrf_delay_ms(2000); 蓝牙初始化

my_ble_init();

}

蓝牙初始化函数 void my_ble_init(void) { NRF_LOG_INFO(“Hello world BLE developer\n”); NRF_LOG_INFO(“BLE Template example:Log use uart as output terminal”); 初始化协议栈

ble_stack_init();

NRF_LOG_INFO(“ble_stack_init()…OK”);

配置GAP参数 gap_params_init(); NRF_LOG_INFO(“gap_params_init()…OK”); 初始化GATT

gatt_init();

NRF_LOG_INFO(“gatt_init()…OK”);

初始化广播 advertising_init(); NRF_LOG_INFO(“advertising_init()…OK”); 初始化服务

services_init();

NRF_LOG_INFO(“services_init()…OK”);

连接参数协商初始化 conn_params_init(); NRF_LOG_INFO(“conn_params_init()…OK”); ble_address_change_test();

启动app time定时器 NRF_LOG_INFO(“BLE HRS example started.”); application_timers_start(); 启动广播

NRF_LOG_INFO(“advertising_starting…”);

advertising_start();

主循环 while(true) { OLED 显示

my_oled_iic();

处理挂起的LOG和运行电源管理 idle_state_handle(); } } 3.蓝牙初始化 如上面代码,蓝牙初始化,包括初始化蓝牙协议栈,配置GAP参数,初始化GATT,初始化广播,初始化服务,连接参数初始化,启动广播,主循环。完成这些,手环蓝牙芯片就能够发广播了,打开手机蓝牙就能够搜索到。 当然,这些初始化函数也是有很多内容的, ———————————————— 版权声明:本文为CSDN博主「白浪博客」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/sunskyday/article/details/104784879/

技术/通讯/蓝牙.txt · 最后更改: 2022/05/10 18:09 (外部编辑)