谷动谷力

 找回密码
 立即注册
谷动谷力 首页 嵌入式 查看内容

【AB32VG1开发】基于RT-Thread 中科蓝讯AB32VG1 BLE开发例程讲解

2022-11-22 22:54| 发布者: 鸣涧| 查看: 38| 评论: 0|原作者: 鸣涧_GC96O

摘要: 【AB32VG1开发】基于RT-Thread 中科蓝讯AB32VG1 BLE开发例程讲解 中科蓝讯最近出的SDK(bluetrum_sdk) V1.1.0,支持了BLE开发,目前官方还没有正式文档,我来摸索一下基于RT-Thread AB32VG1 BLE开发 ...
【AB32VG1开发】基于RT-Thread 中科蓝讯AB32VG1 BLE开发例程讲解


中科蓝讯最近出的SDK(bluetrum_sdk) V1.1.0,支持了BLE开发,目前官方还没有正式文档,我来摸索一下吧


安装最近SDK

操作步骤详细请参阅: 基于RT-Thread的AB32VG1开发环境搭建
b1663e8feac9addc46e256b3334aa12a.jpg.jpg
选择中科蓝讯AB32VG1开发板最新SDK(bluetrum_sdk) 1.1.0安装


建RT-Thread工程

操作步骤详细请参阅: 基于RT-Thread的AB32VG1开发环境搭建
注意选择最新SDK 1.1.0


d2c5acde7423d65fe271cb1ec07ccaf4.jpg.jpg
配置工程

作步骤详细请参阅: 基于RT-Thread的AB32VG1开发环境搭建
配置详情如下:
b4a2b77c84a105bbf6d8e86eb0391280.jpg.jpg
开启:
宏: [SOC_AB32VG1]
宏: [PKG_USING_BLUETRUM_NIMBLE]
宏: [BSP_USING_TIM](这后面加的,因为出现这个了定时报告数据时运行错误:(rt_object_get_type(&timer->parent) == RT_Object_Class_Timer) assertion failed at function:rt_timer_stop, line number:502 )我以为加上TIMER模块,就加了,但是还是没解决。
配置后,保存会出现错误:local variable 'get_git_root' referenced before assignment Operation failed.这里不管它,编译时看看具体是哪里同, 我们再修改。
4f1bb9748bcaddff25d51ed8c89496f1.jpg.jpg


修改代码


首先熟悉一下BLE_SDK代码目录:

d3c93794a2f6994c4328958a16b902ec.png.jpg
修改mac_addr
工程目录下:

packages\bluetrum_sdk-latest\bluetrum_nimble\porting\npl\rtthread\src\ble_platform.c
fc466fa5934f49568bdb54278d072451.jpg.jpg
我修改如下:
  1. void bt_get_local_bd_addr(uint8_t *addr){    uint8_t addr_table[6] = {0x41, 0x42, 0x18, 0x58, 0x68, 0x88};  //mac_addr是6bytes, SDK代码里只写了
复制代码

5个数据    memcpy(addr, addr_table, 6);}
注意:mac_addr是6bytes, SDK代码里只写了5个数据,这是疏漏还是有意为之


修改BLE_name(名字)


工程目录下:
\packages\bluetrum_sdk-latest\bluetrum_nimble\apps\blehr\src\blehr.c
4354976834db3e72d033a6451ec161de.jpg.jpg


我修改如下:
static const char *device_name = "Silicon_blehr_sensor";
注意:不能是中文,中文会找不到设备   


修改服务及设备信息

工程目录下:
packagesbluetrum_sdk-latestbluetrum_nimbleappsblehrsrc
03a69944037e85e1a44b01ae6297cb10.jpg.jpg
我修改如下:
  1. static const char *manuf_name = "谷动谷力";  //Sunshine Silicon";  //可以中文得长度长了,上报不了数据
  2. static const char *model_num = "SunSilicon HR Sensor";
  3. uint16_t hrs_hrm_handle;

  4. static int gatt_svr_chr_access_heart_rate(uint16_t conn_handle, uint16_t attr_handle,
  5.                                struct ble_gatt_access_ctxt *ctxt, void *arg);

  6. static int gatt_svr_chr_access_device_info(uint16_t conn_handle, uint16_t attr_handle,
  7.                                 struct ble_gatt_access_ctxt *ctxt, void *arg);

  8. static const struct ble_gatt_svc_def gatt_svr_svcs[] = {
  9.     {
  10.         /* Service: Heart-rate */
  11.         .type = BLE_GATT_SVC_TYPE_PRIMARY,
  12.         .uuid = BLE_UUID16_DECLARE(GATT_HRS_UUID),
  13.         .characteristics = (struct ble_gatt_chr_def[]) { {
  14.             /* Characteristic: Heart-rate measurement */
  15.             .uuid = BLE_UUID16_DECLARE(GATT_HRS_MEASUREMENT_UUID),
  16.             .access_cb = gatt_svr_chr_access_heart_rate,
  17.             .val_handle = &hrs_hrm_handle,
  18.             .flags = BLE_GATT_CHR_F_NOTIFY,
  19.         }, {
  20.             /* Characteristic: Body sensor location */
  21.             .uuid = BLE_UUID16_DECLARE(GATT_HRS_BODY_SENSOR_LOC_UUID),
  22.             .access_cb = gatt_svr_chr_access_heart_rate,
  23.             .flags = BLE_GATT_CHR_F_READ,
  24.         }, {
  25.             0, /* No more characteristics in this service */
  26.         }, }
  27.     },

  28.     {
  29.         /* Service: Device Information */
  30.         .type = BLE_GATT_SVC_TYPE_PRIMARY,
  31.         .uuid = BLE_UUID16_DECLARE(GATT_DEVICE_INFO_UUID),
  32.         .characteristics = (struct ble_gatt_chr_def[]) { {
  33.             /* Characteristic: * Manufacturer name */
  34.             .uuid = BLE_UUID16_DECLARE(GATT_MANUFACTURER_NAME_UUID),
  35.             .access_cb = gatt_svr_chr_access_device_info,
  36.             .flags = BLE_GATT_CHR_F_READ,
  37.         }, {
  38.             /* Characteristic: Model number string */
  39.             .uuid = BLE_UUID16_DECLARE(GATT_MODEL_NUMBER_UUID),
  40.             .access_cb = gatt_svr_chr_access_device_info,
  41.             .flags = BLE_GATT_CHR_F_READ,
  42.         }, {
  43.             0, /* No more characteristics in this service */
  44.         }, }
  45.     },

  46.         {
  47.             0, /* No more services */
  48.         },
  49. };
复制代码

修改服务属性

26749f137f46bd1ebbcd667b9c9ba7ff.png
这里服务,我们没做修改,保存默认。


编译

编译工程:Ctrl+B,会出错, 如下:
In file included from <command-line>:E:\RT-ThreadWorkspace\AB32_BLE_Demo\rtconfig_preinc.h:8:9: error: no macro name given in #define directive     | #define
      |         ^In file included from <command-line>:E:\RT-ThreadWorkspace\AB32_BLE_Demo\rtconfig_preinc.h:8:9: error: no macro name given in #define directive
     | #define
      |         ^make: *** [rt-thread/src/subdir.mk:57: rt-thread/src/device.o] Error 1make: *** Waiting for unfinished jobs....In file included from <command-line>:E:\RT-ThreadWorkspace\AB32_BLE_Demo\rtconfig_preinc.h:8:9: error: no macro name given in #define directive    8 | #define      |         ^In file included from <command-line>:E:\RT-ThreadWorkspace\AB32_BLE_Demo\rtconfig_preinc.h:8:9: error: no macro name given in #define directive   
   | #define
      |         ^make: *** [rt-thread/src/subdir.mk:57: rt-thread/src/clock.o] Error 1make: *** [rt-thread/src/subdir.mk:57: rt-thread/src/components.o] Error 1make: *** [rt-thread/src/subdir.mk:57: rt-thread/src/idle.o] Error 1"make -j4 all2" terminated with exit code 2. Build might be incomplete.14:29:13 Build Failed. 9 errors, 0 warnings. (took 1s.464ms)
AB32_BLE_build_err.JPG
4f1bb9748bcaddff25d51ed8c89496f1.jpg.jpg
双击出错提示,定位到出错的地方,#define后面是空的,删除这个#define即可


标题重新编译

保存修改内容: ctrl+s, 编译:ctrl+b


2c0499e23716187c9bc2013915cb9d9c.jpg
编译成功

调试

将编译好的,目标文件:rtthread.elf,烧录到中科蓝讯AB32VG1 BLE开发板,操作步骤详细请参阅: 基于RT-Thread的AB32VG1开发环境搭建
1e3d20c76bc3a2cb64c89d7d88bffa1f.jpg


手机打开蓝牙

89147a28bb09873446b2c6ac9f03034f.jpg


手机打开蓝牙BLE调试助手
424977048d0e3080948b2b2e6d3c19c5.jpg


连接BLE设备


扫描到与我们代码设置一样BLE设备名字,说明代码修改正确.连接与我们代码设置一样BLE设备名字.
b044f5ce50ec1d88b1351ab04ee7303b.jpg.jpg


设备相关数据服务列表5ee1f7aaa388faa11021c84544813b6a.jpg.jpg

获取BLE设备数据--制造商信息70d9d58c457af0383cf4e4a020d64e10.jpg.jpg


点"读取"即可,这与我们代码设置一样,说明代码修改正确
3e3a4a98d28dfbeb2963c92bd7c54c2c.jpg.jpg


获取BLE设备数据--设备型号信息点"读取"即可,这与我们代码设置一样,说明代码修改正确
83cd7f0b2c9a45e6b16fb1d804a69593.jpg.jpg

读取心率相关数据68b958b70acd9c1c63c48b7d3e6deb20.jpg.jpg


心率数据自动数据通知上报


心律数据是模拟的,开发板硬件上没有
68b958b70acd9c1c63c48b7d3e6deb20.jpg.jpg
b1f4f06b6e46e3daa36df91bd98998c4.jpg.jpg
731a63a042ab3918486c986e9f2fdcd2.png
fe816d2f453a72135a833bad1e6fcc46.png
这个数据点代码有BUG,不定什么时候,报错,每次错误还不一样, 这个还得官方分析一下.  
  

遗留问题

1) 定时上报数据点代码有BUG,不定什么时候,报错,每次错误还不一样, 这个还得官方分析一下.
2)现在只有Read(BLE上报数据)功能,没有write(APP->BLE下达数据)功能,这个后面移植一下
3)连接现有通用平台功能, 如微信\涂鸦\天猫精灵.....等等
4)mac_addr是6bytes, 代码里只写了5个数据,这是疏漏还是有意为之
5)制造名长度限制了,没有找到哪里限制了,是不是上报告数据长度限制了,在代码哪里呢上面遗留问题,还请专家帮忙解决一下,我能力有限.

总结

用RT-Thread基本中科蓝讯AB32VG1 BLE开发快捷方便.做一个只要官方有的驱动及软件,相关方便快捷,没有话自己移植的话,还是比较复杂.


更多精彩,欢迎关注微信公众号:

pYYBAGGrfV-AdBMjAA_nxj6W7zU440.png



鲜花

握手

雷人

路过

鸡蛋

相关阅读

发表评论

最新评论

最新热点

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2023-12-7 22:24 , Processed in 0.103891 second(s), 36 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

返回顶部