【AB32VG1開發(fā)】基于RT-Thread 中科藍(lán)訊AB32VG1 bluetrum_sdk BLE開發(fā)例程講解
中科藍(lán)訊最近出的SDK(bluetrum_sdk) V1.1.0,支持了BLE開發(fā),目前官方還沒有正式文檔,我來摸索一下吧
安裝最近SDK
操作步驟詳細(xì)請(qǐng)參閱: 基于RT-Thread的AB32VG1開發(fā)環(huán)境搭建
SDK選擇中科藍(lán)訊AB32VG1開發(fā)板最新SDK(bluetrum_sdk) 1.1.0安裝
建RT-Thread工程
操作步驟詳細(xì)請(qǐng)參閱: 基于RT-Thread的AB32VG1開發(fā)環(huán)境搭建
注意選擇最新SDK 1.1.0
配置工程
操作步驟詳細(xì)請(qǐng)參閱: 基于RT-Thread的AB32VG1開發(fā)環(huán)境搭建
配置詳情如下:
開啟:
宏: [SOC_AB32VG1]
宏: [PKG_USING_BLUETRUM_NIMBLE]
宏: [BSP_USING_TIM](這后面加的,因?yàn)槌霈F(xiàn)這個(gè)了定時(shí)報(bào)告數(shù)據(jù)時(shí)運(yùn)行錯(cuò)誤:(rt_object_get_type(&timer->parent) == RT_Object_Class_Timer) assertion failed at function:rt_timer_stop, line number:502 )我以為加上TIMER模塊,就加了,但是還是沒解決。
配置后,保存會(huì)出現(xiàn)錯(cuò)誤:local variable 'get_git_root' referenced before assignment Operation failed.這里不管它,編譯時(shí)看看具體是哪里同, 我們?cè)傩薷摹?/p>
修改代碼
首先熟悉一下BLE_SDK代碼目錄:
修改mac_addr
工程目錄下:
packages\bluetrum_sdk-latest\bluetrum_nimble\porting\npl\rtthread\src\ble_platform.c
我修改如下:
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個(gè)數(shù)據(jù)
memcpy(addr, addr_table, 6);
}
注意:mac_addr是6bytes, SDK代碼里只寫了5個(gè)數(shù)據(jù),這是疏漏還是有意為之
修改BLE_name(名字)
工程目錄下:
\packages\bluetrum_sdk-latest\bluetrum_nimble\apps\blehr\src\blehr.c
我修改如下:
static const char *device_name = "Silicon_blehr_sensor";
注意:不能是中文,中文會(huì)找不到設(shè)備
修改服務(wù)及設(shè)備信息
工程目錄下:
packages\bluetrum_sdk-latest\bluetrum_nimble\appsblehrsrc
我修改如下:
static const char *manuf_name = "谷動(dòng)谷力"; //Sunshine Silicon";可以中文,但長(zhǎng)度限制了,沒有找到哪里限制了
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 */
},
};
修改服務(wù)屬性
這里服務(wù),我們沒做修改,保存默認(rèn)。
編譯
編譯工程:Ctrl+B,會(huì)出錯(cuò), 如下:
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)
雙擊出錯(cuò)提示,定位到出錯(cuò)的地方,#define后面是空的,刪除這個(gè)#define即可
標(biāo)題重新編譯
保存修改內(nèi)容: ctrl+s, 編譯:ctrl+b
編譯成功
調(diào)試
將編譯好的,目標(biāo)文件:rtthread.elf,燒錄到中科藍(lán)訊AB32VG1 BLE開發(fā)板,操作步驟詳細(xì)請(qǐng)參閱: 基于RT-Thread的AB32VG1開發(fā)環(huán)境搭建
手機(jī)打開藍(lán)牙
手機(jī)打開藍(lán)牙BLE調(diào)試助手
連接BLE設(shè)備
掃描到與我們代碼設(shè)置一樣BLE設(shè)備名字,說明代碼修改正確.連接與我們代碼設(shè)置一樣BLE設(shè)備名字.
設(shè)備相關(guān)數(shù)據(jù)服務(wù)列表
獲取BLE設(shè)備數(shù)據(jù)--制造商信息
點(diǎn)"讀取"即可,這與我們代碼設(shè)置一樣,說明代碼修改正確
獲取BLE設(shè)備數(shù)據(jù)--設(shè)備型號(hào)信息
點(diǎn)"讀取"即可,這與我們代碼設(shè)置一樣,說明代碼修改正確
讀取心率相關(guān)數(shù)據(jù)
心率數(shù)據(jù)自動(dòng)數(shù)據(jù)通知上報(bào)
心律數(shù)據(jù)是模擬的,開發(fā)板硬件上沒有
這個(gè)數(shù)據(jù)點(diǎn)代碼有BUG,不定什么時(shí)候,報(bào)錯(cuò),每次錯(cuò)誤還不一樣, 這個(gè)還得官方分析一下.
遺留問題
1) 定時(shí)上報(bào)數(shù)據(jù)點(diǎn)代碼有BUG,不定什么時(shí)候,報(bào)錯(cuò),每次錯(cuò)誤還不一樣, 這個(gè)還得官方分析一下.
2)現(xiàn)在只有Read(BLE上報(bào)數(shù)據(jù))功能,沒有write(APP->BLE下達(dá)數(shù)據(jù))功能,這個(gè)后面移植一下
3)連接現(xiàn)有通用平臺(tái)功能, 如微信涂鴉天貓精靈.....等等
4)mac_addr是6bytes, 代碼里只寫了5個(gè)數(shù)據(jù),這是疏漏還是有意為之
5)制造名長(zhǎng)度限制了,沒有找到哪里限制了,是不是上報(bào)告數(shù)據(jù)長(zhǎng)度限制了,在代碼哪里呢
上面遺留問題,還請(qǐng)專家?guī)兔鉀Q一下,我能力有限.
總結(jié)
用RT-Thread基于中科藍(lán)訊AB32VG1 BLE開發(fā)快捷方便.做一個(gè)只要官方有的驅(qū)動(dòng)及軟件,相關(guān)方便快捷,沒有話自己移植的話,還是比較復(fù)雜.
轉(zhuǎn)載注明出處:https://mp.weixin.qq.com/s/72jVJvEGVFwApsv_hdhxfA
更多精彩,歡迎關(guān)注微信公眾號(hào):
谷動(dòng)谷力
-
BLE
+關(guān)注
關(guān)注
12文章
634瀏覽量
59179 -
開發(fā)環(huán)境
+關(guān)注
關(guān)注
1文章
215瀏覽量
16519 -
SDK
+關(guān)注
關(guān)注
3文章
1006瀏覽量
45422 -
RT-Thread
+關(guān)注
關(guān)注
31文章
1239瀏覽量
39442 -
中科藍(lán)訊
+關(guān)注
關(guān)注
9文章
52瀏覽量
9799
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論