0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【RTT大赛作品连载】基于AB32VG1 sdk BLE例程

RT-thread 来源:RT-thread 作者:RT-thread 2021-12-06 09:07 次阅读

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


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


安装最近SDK

操作步骤详细请参阅: 基于RT-Thread的AB32VG1开发环境搭建

poYBAGGuFZ6ALDtCAAK3VpadgEM069.pngSDK

选择中科蓝讯AB32VG1开发板最新SDK(bluetrum_sdk) 1.1.0安装

建RT-Thread工程

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

poYBAGGuFc6AeL5oAANZyV66ddU436.pngAB32

配置工程

操作步骤详细请参阅: 基于RT-Thread的AB32VG1开发环境搭建
配置详情如下:

poYBAGGuFeuAQoGdAAF43GqPo6Q408.pngAB32 config

开启:

宏: [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.这里不管它,编译时看看具体是哪里同, 我们再修改。

poYBAGGuFjmAJisiAAEOci3nUzI499.png

修改代码

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

pYYBAGGuFkyAVHt4AADSzV2P1zk270.png

修改mac_addr

工程目录下:

packages\bluetrum_sdk-latest\bluetrum_nimble\porting\npl\rtthread\src\ble_platform.c
pYYBAGGuFqCAdcXqAAI-ImxrZGE127.png

我修改如下:

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
pYYBAGGuFs6AetRpAAEfpKAgvm8475.png


我修改如下:

static const char *device_name = "Silicon_blehr_sensor";

注意:不能是中文,中文会找不到设备    

修改服务及设备信息

工程目录下:
packages\bluetrum_sdk-latest\bluetrum_nimble\appsblehrsrc

pYYBAGGuFv-Ab9HBAANKkyju3eg538.png


我修改如下:

static const char *manuf_name = "谷动谷力";  //Sunshine Silicon";可以中文,但长度限制了,没有找到哪里限制了
static const char *model_num = "SunSilicon HR Sensor";

static const struct ble_gatt_svc_def gatt_svr_svcs[] = {
    {
        /* Service: Heart-rate */
        .type = BLE_GATT_SVC_TYPE_PRIMARY,
        .uuid = BLE_UUID16_DECLARE(GATT_HRS_UUID),
        .characteristics = (struct ble_gatt_chr_def[]) { {
            /* Characteristic: Heart-rate measurement */
            .uuid = BLE_UUID16_DECLARE(GATT_HRS_MEASUREMENT_UUID),
            .access_cb = gatt_svr_chr_access_heart_rate,
            .val_handle = &hrs_hrm_handle,
            .flags = BLE_GATT_CHR_F_NOTIFY,
        }, {
            /* Characteristic: Body sensor location */
            .uuid = BLE_UUID16_DECLARE(GATT_HRS_BODY_SENSOR_LOC_UUID),
            .access_cb = gatt_svr_chr_access_heart_rate,
            .flags = BLE_GATT_CHR_F_READ,
        }, {
            0, /* No more characteristics in this service */
        }, }
    },

    {
        /* Service: Device Information */
        .type = BLE_GATT_SVC_TYPE_PRIMARY,
        .uuid = BLE_UUID16_DECLARE(GATT_DEVICE_INFO_UUID),
        .characteristics = (struct ble_gatt_chr_def[]) { {
            /* Characteristic: * Manufacturer name */
            .uuid = BLE_UUID16_DECLARE(GATT_MANUFACTURER_NAME_UUID),
            .access_cb = gatt_svr_chr_access_device_info,
            .flags = BLE_GATT_CHR_F_READ,
        }, {
            /* Characteristic: Model number string */
            .uuid = BLE_UUID16_DECLARE(GATT_MODEL_NUMBER_UUID),
            .access_cb = gatt_svr_chr_access_device_info,
            .flags = BLE_GATT_CHR_F_READ,
        }, {
            0, /* No more characteristics in this service */
        }, }
    },

        {
            0, /* No more services */
        },
};

修改服务属性

AB32VG1_ble_Svr.png

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

编译

编译工程:Ctrl+B,会出错, 如下:

In file included from :
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 :
E:\RT-ThreadWorkspace\AB32_BLE_Demo\rtconfig_preinc.h:8:9: error: no macro name given in #define directive
    8 | #define
      |         ^
make: *** [rt-thread/src/subdir.mk:57: rt-thread/src/device.o] Error 1
make: *** Waiting for unfinished jobs....
In file included from :
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 :
E:\RT-ThreadWorkspace\AB32_BLE_Demo\rtconfig_preinc.h:8:9: error: no macro name given in #define directive
    8 | #define
      |         ^
make: *** [rt-thread/src/subdir.mk:57: rt-thread/src/clock.o] Error 1
make: *** [rt-thread/src/subdir.mk:57: rt-thread/src/components.o] Error 1
make: *** [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)
pYYBAGGuF3OAaQS9AALBp2Wi9RE432.png

双击出错提示,定位到出错的地方,#define后面是空的,删除这个#define即可

标题重新编译

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

poYBAGGuF0iAXIJQAAPtmZoE0KE579.png


编译成功

调试

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

pYYBAGGuG_WAN1A_AAIYWxLBi1I930.png

手机打开蓝牙

poYBAGGuHA-AG-9yAAI7v2ez_2A292.png

手机打开蓝牙BLE调试助手

AB32_BLE_debug_phone_openBLEdbg.JPG

连接BLE设备

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

AB32_BLE_debug_phone_conect_bleg.JPG

设备相关数据服务列表

AB32_BLE_debug_blereportsrv.JPG

获取BLE设备数据--制造商信息

AB32_BLE_debug_blerd.JPG


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

AB32_BLE_debug_blereport.JPG

获取BLE设备数据--设备型号信息

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

AB32_BLE_debug_blerdnum.JPG

读取心率相关数据

AB32_BLE_debug_blerdhr01.JPG

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

心律数据是模拟的,开发板硬件上没有

AB32_BLE_debug_blerdhr01.JPG


AB32_BLE_debug_blerdhr02.JPG


AB32VG1_debug_ble_err.png


AB32VG1_debug_ble_err02.png

这个数据点代码有BUG,不定什么时候,报错,每次错误还不一样, 这个还得官方分析一下.

遗留问题

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

上面遗留问题,还请专家帮忙解决一下,我能力有限.

总结

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

转载注明出处:https://mp.weixin.qq.com/s/72jVJvEGVFwApsv_hdhxfA

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

pYYBAGGrfV-AdBMjAA_nxj6W7zU440.png

谷动谷力

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • BLE
    BLE
    +关注

    关注

    12

    文章

    650

    浏览量

    59318
  • 开发环境
    +关注

    关注

    1

    文章

    220

    浏览量

    16576
  • SDK
    SDK
    +关注

    关注

    3

    文章

    1024

    浏览量

    45744
  • RT-Thread
    +关注

    关注

    31

    文章

    1268

    浏览量

    39885
  • 中科蓝讯
    +关注

    关注

    9

    文章

    53

    浏览量

    9847
收藏 人收藏

    评论

    相关推荐

    TINA-TI仿真,为什么VF1VG1的波形不一样?

    为什么VF1VG1的波形不一样? 还有就是如果我把波形的下降沿改为100N,VF1的波形就会被削顶,这个有是什么原因?
    发表于 08-19 07:15

    例程BLE_GATTS_SPP“中,手机第一次连接蓝牙服务时,怎么添加配对密码?

    例程BLE_GATTS_SPP“中,手机第一次连接蓝牙服务时,怎么添加配对密码?
    发表于 07-19 08:28

    基于RTOS的SDK包中example下的例程如何设置编译条件才能完成编译?

    1. 基于RTOS 的 SDK 包中没有 app 对应的文件夹,example 中的例程需要拷贝到哪里编译才可以 2. 在example/smartconfig 中 make 不行, 在 RTOS_
    发表于 07-12 06:53

    ESP32S3烧录BLE Mesh1.1的定向转发Client例程烧录后无限重启是怎么回事?

    ESP32S3烧录BLE Mesh1.1的定向转发Client例程烧录后无限重启
    发表于 06-28 15:50

    sdk中的wps例程,测试失败的原因?

    sdk中的wps例程,测试失败 是少什么配置吗? 测试路由器型号是WRC-300FEBK-S ,使用庆科和MTK的WiFi模组都没问题. 有使用过的请帮忙解答下. v3.22,v3.15和最新sdk都测试过了,都一样的问题
    发表于 06-26 08:06

    ble_mesh节点间如何实现以字符串的形式通信?

    1,关于 ESP_BLE_MESH 的部分功能在V6.0版本的SDK中有更新 那么请问如何更新v6.0的SDK 呢? 2,在使用ESP_BLE
    发表于 06-25 07:50

    使用esp-idf-v5.0.1 example中的esp_ble_mesh例程遇到的疑问求解

    本人使用esp-idf-v5.0.1 example中的esp_ble_mesh例程,共使用6个ESP-WROVER-KIT开发板。在4个开发板上烧写onoff_client例程,在1
    发表于 06-12 07:25

    蓝牙nimble例程ble_l2cap_coc运行不成功,烧录后搜索不到设备名称,为什么?

    蓝牙nimble例程ble_l2cap_coc运行不成功,烧录后搜索不到设备名称
    发表于 06-12 06:27

    AG32 下使用 Segger RTT

    基于 SDK1.3.3 的。低版本的 SDK 可能展示不同。 步骤详情: 在 platformio.ini 中更改输出方式; 将原先的 setup_monitor 改为 setup_monitor_rtt
    发表于 05-29 09:44

    stm32wb55cgu6用BLE_HeartRate例程,连接一会就自动断开的原因?

    如题,用官方的BLE_HeartRate例程,协议栈以刷同SDK内的full版本蓝牙栈,只是修改型号到wb55cgu6,请问用手机调试助手链接一会儿就自动断开了可能是什么原因?使用手机应用市场WCH
    发表于 05-24 08:29

    研华荣获信通院工业数字孪生大赛优秀作品

    在信通院和芜湖市人民政府联合主办的2023第三届工业数字孪生大赛中,研华表现卓越,其研华数字孪生InsightAPM和研华智慧能源iEMS团队作品均获优秀作品奖,展现其在技术创新与应用实践上的卓越能力,推动“工业互联网+数字孪生
    的头像 发表于 04-17 09:48 436次阅读
    研华荣获信通院工业数字孪生<b class='flag-5'>大赛</b>优秀<b class='flag-5'>作品</b>奖

    有奖征文!第二届电力电子科普作品创作大赛(中国电源学会和英飞凌联合主办)

    ,这位幕后英雄——电力电子技术,往往并不为大众所熟知。 你,作为电力电子行业的辛勤耕耘者,是否曾想过,将你的知识以通俗的语言分享给更多的人?中国电源学会举办的电力电子科普作品创作大赛,为你搭建了一个展
    发表于 04-11 11:38

    MC_SDK_5.4.4的B-G431B-ESC1开发板例程里面过流保护,运放和比较器共用引脚,为什么运行不起来?

    MC_SDK_5.4.4的B-G431B-ESC1开发板例程里面过流保护,运放和比较器用共用引脚,过流保护用比较器,可是运放有偏置电压,这个例程运行不起来,实在是想不通了
    发表于 04-10 07:14

    RTT_Draco的外置uart接口(TXD,RXD)怎么配置和使用呢?

    通信。下面详细介绍了RTT_Draco外置UART接口的配置和使用方法。 1. 配置引脚复用: 首先,在使用RTT_Draco的外置UART接口之前,需要确保引脚复用已经正确配置。RTT
    的头像 发表于 01-16 17:11 943次阅读

    一文解析BLE观察者模式回调机制

    nRF5 SDK从版本14开始,对事件回调机制做了更新,引入了观察者模式,以解耦不同BLE Layer对BLE事件的回调函数。
    的头像 发表于 11-27 10:07 919次阅读
    一文解析<b class='flag-5'>BLE</b>观察者模式回调机制