当前位置: 首页 > news >正文

AIO-1126-JD4蓝牙通讯(BLE)

0 前言

AIO-1126-JD4采用了正基科技推出的一款集成WiFi、蓝牙功能的模组AP6236,支持高速(HS)功能的蓝牙 4.0,集成了 1.5 类功率放大器(PA),并支持低功耗蓝牙(BLE)。提到正基就不得不提下博通。博通和正基是芯片技术与模块制造方面的合作关系,正基科技是中国台湾的公司,在无线通信模块领域有一定的市场份额,博通则是全球领先的有线和无线通信半导体公司。正基把包含博通关键IP的核心芯片和自家的射频部分等封装在一起,即SIP(System In Package)。AP6236正是这种采用了博通BCM43430B0方案的SIP模组。

一般SDK里面都会带上博通或正基提供的后台应用。前端的话,可以是自己封装的应用或服务,直接调用博通的接口和后台交互,跑自己的协议栈,当然也可以跑开源的bluez协议栈,bluez的IPC机制是D-BUS,一样是后台前端的模式。

1 Deviceio库

在AIO-1126-JD4上, 瑞芯微专门开发了一个中间层Deviceio库,可以支持正基博通,海华博通,还有bluez。Deviceio库屏蔽了底层复杂的WiFiBT操作比如wpa_supplicant/bluez/bsa等,向上提供友好的应用开发接口,比直接拿着bluez开发起来方便得多,见仁见智。

1.1 Deviceio库编译

SDK里面Deviceio库源码路径在external/deviceio_release,严格按照下面顺序编译。

make rkwifibt-dirclean && make rkwifibt-rebuild
make broadcom_bsa-dirclean && make broadcom_bsa-rebuild
make deviceio_release-dirclean && make deviceio_release

如果直接编译deviceio_release编不过,需要对Deviceio库源码的CMakeLists.txt进行修改,修改如下:

external/deviceio/CMakeLists.txt

cmake_minimum_required(VERSION 2.8.0 FATAL_ERROR)#PROJECT (deviceio_test)message(${PROJECT_SOURCE_DIR})
message(${PROJECT_BINARY_DIR})set(deviceio_SOURCE_DIR ${PROJECT_SOURCE_DIR})add_definitions("-Wall -g")add_subdirectory("DeviceIO")
add_subdirectory("test")

external/deviceio/test/CMakeLists.txt

cmake_minimum_required(VERSION 2.8.0 FATAL_ERROR)set(SRC_FILESDeviceIOTest.cppbt_test.cppbt_test_1s2.cpprk_ble_app.crk_wifi_test.c
)if(BLUEZ)
add_definitions(-DBLUEZ_USE)
elseif(BSA)
add_definitions(-DBSA_USE)
endif()add_definitions("-fpermissive")link_directories(${deviceio_SOURCE_DIR}/DeviceIO/rv1126_rv1109/lib32/broadcom)add_executable(deviceio_test ${SRC_FILES})
target_include_directories(deviceio_test PUBLIC"${deviceio_SOURCE_DIR}/DeviceIO/include" )
target_link_libraries(deviceio_test pthread DeviceIo asound)install(TARGETS deviceio_test DESTINATION bin)

external/deviceio/DeviceIO/CMakeLists.txt

cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
project(DeviceIo)# file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/include/DeviceIo DESTINATION ${CMAKE_INSTALL_STAGING}/usr/include/)
# file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/rv1126_rv1109/lib32/broadcom/libDeviceIo.so DESTINATION ${CMAKE_INSTALL_STAGING}/usr/lib/)
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/DeviceIo DESTINATION ${CMAKE_INSTALL_PREFIX}/include)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/rv1126_rv1109/lib32/broadcom/libDeviceIo.so DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)

在SDK根目录下再次执行

make deviceio_release-dirclean && make deviceio_release

编译成功后会自动安装到host编译链路径和打包target路径

执行./build.sh生成新固件,就可将带有Deviceio库的新固件烧写到设备中。

2 蓝牙服务程序开发

 2.1 Deviceio库链接到应用

cmake工程配置

set(TARGET_SYSROOT "you_sdk_path/rv1126_rv1109_linux_release_20211022/buildroot/output/firefly_rv1126_rv1109/host/arm-buildroot-linux-gnueabihf/sysroot")
set(CMAKE_SYSROOT "${TARGET_SYSROOT}")
target_link_libraries(${PROJECT_NAME}DeviceIo
)

2.2 创建蓝牙服务程序

蓝牙名:ROCKCHIP_BLUE_DOG

创建一个包含三个特征的蓝牙服务,可用如下方法。

#define BLE_UUID_SERVICE	"9FA480E0-4967-4542-9390-D343DC5D04AE"
#define BLE_UUID_REMOTE_CHAR	"AF0BADB1-5B99-43CD-917A-A77BC549E3CC"
#define BLE_UUID_SEND		"dfd4416e-1810-47f7-8248-eb8be3dc47f9"
#define BLE_UUID_RECV		"9884d812-1810-4a24-94d3-b2c11a851fac"
/** The Bluetooth basic service is turned on and the function* must be called before using the Bluetooth function.*/
#if 1
void *bt_test_bluetooth_init_thread(void *)
{printf("%s: BT BLUETOOTH INIT\n", __func__);memset(&bt_content, 0, sizeof(RkBtContent));bt_content.bt_name = "ROCKCHIP_BLUE_DOG";//bt_content.bt_addr = "11:22:33:44:55:66";bt_content.ble_content.ble_name = "ROCKCHIP_ROBOT BLE";#if 0//user-defined ble address test, if not set, the default random addressbt_content.ble_content.ble_addr[0] = 0x11;bt_content.ble_content.ble_addr[1] = 0x22;bt_content.ble_content.ble_addr[2] = 0x33;bt_content.ble_content.ble_addr[3] = 0x44;bt_content.ble_content.ble_addr[4] = 0x55;bt_content.ble_content.ble_addr[5] = 0x66;//Clear two most significant bitsbt_content.ble_content.ble_addr[5] &= 0x3f;//Set second most significant bit, Private resolvablebt_content.ble_content.ble_addr[5] |= 0x40;printf("ble_addr: %02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx\n",bt_content.ble_content.ble_addr[5], bt_content.ble_content.ble_addr[4],bt_content.ble_content.ble_addr[3], bt_content.ble_content.ble_addr[2],bt_content.ble_content.ble_addr[1], bt_content.ble_content.ble_addr[0]);
#endifbt_content.ble_content.server_uuid.uuid = BLE_UUID_SERVICE;bt_content.ble_content.server_uuid.len = UUID_128;bt_content.ble_content.chr_uuid[0].uuid = BLE_UUID_REMOTE_CHAR;bt_content.ble_content.chr_uuid[0].len = UUID_128;bt_content.ble_content.chr_uuid[1].uuid = BLE_UUID_SEND;bt_content.ble_content.chr_uuid[1].len = UUID_128;bt_content.ble_content.chr_uuid[2].uuid = BLE_UUID_RECV;bt_content.ble_content.chr_uuid[2].len = UUID_128;bt_content.ble_content.chr_cnt = 3;bt_content.ble_content.advDataType = BLE_ADVDATA_TYPE_SYSTEM;bt_content.ble_content.cb_ble_recv_fun = bt_test_ble_recv_data_callback;bt_content.ble_content.cb_ble_request_data = bt_test_ble_request_data_callback;rk_bt_register_state_callback(bt_test_state_cb);rk_bt_register_bond_callback(bt_test_bond_state_cb);rk_bt_register_name_change_callback(bt_test_name_change_cb);rk_bt_init(&bt_content);return NULL;
}
#else

cb_ble_recv_fun:BLE数据接收回调。

cb_ble_request_data:BLE请求数据回调。

rk_bt_register_state_callback:注册蓝牙状态回调,蓝牙的打开、关闭等状态。

rk_bt_register_bond_callback:注册蓝牙绑定回调,蓝牙绑定状态通过这个回调上送。

rk_bt_register_name_change_callback:注册蓝牙名称改变回调。

3 数据收发测试

2.1 启动服务程序

启动程序后蓝牙服务被创建。

在手机上可以搜索到蓝牙名ROCKCHIP_BLUE_DOG

2.2 连接蓝牙服务测试

这里借助一个APP“蓝牙调试助手”,搜索到蓝牙ROCKCHIP_BLUE_DOG点进去后就会自动连接上,连接上可以看到我们上面所创建的服务UUID、特征UUID。

2.3 蓝牙数据收发测试

随便选择一个可写的特征UUID,比如BLE_UUID_REMOTE_CHAR对应的UUID,将数据类型调为ASCII,在输入框中填入“Hello body!”,然后点击“Write”。

这时,我们的服务程序就可以在接收回调里收到来自手机的消息内容。

相关文章:

  • Lucene并不是只有倒排索引一种数据结构,支持多种数据结构
  • Angular教程前言:历史、安装与用途
  • Webug4.0靶场通关笔记08- 第11关万能密码登录(SQL注入漏洞)
  • 数字智慧方案5968丨智慧农业产销一体化云平台建设方案(72页PPT)(文末有下载方式)
  • 【Docker】Dockerfile 使用
  • python如何把pdf转word
  • 高等数学-第七版-下册 选做记录 习题9-7
  • C++11新特性_自动类型推导_auto
  • 【RocketMQ】- 源码系列目录
  • 神经网络—损失函数
  • Windows服务器提权实战:常见方法、场景与防御指南
  • 2025五一杯C题五一杯数学建模思路代码文章教学:社交媒体平台用户分析问题
  • 【精选】基于数据挖掘的广州招聘可视化分析系统(大数据组件+Spark+Hive+MySQL+AI智能云+DeepSeek人工智能+深度学习之LSTM算法)
  • 【playwright】内网离线部署playwright
  • UE实用地编插件Physical Layout Tool
  • 深度学习-神经网络参数优化的约束与迭代策略
  • PCIe 中的 ARI 介绍
  • 2025五一数学建模ABC题选题建议,思路模型分析
  • 彩带飘落效果
  • stm32基础001(串口)
  • 视频丨英伟达总裁黄仁勋:美勿幻想AI领域速胜中国
  • 武汉楼市新政:二孩、三孩家庭购买新房可分别享受6万元、12万元购房补贴
  • 俄伏尔加格勒机场正式更名为斯大林格勒机场
  • 广东省副省长刘红兵任湖南省委常委、宣传部部长
  • 金砖国家外长会晤发表主席声明,强调南方国家合作
  • 民生银行一季度净利127.42亿降逾5%,营收增7.41%