【AB32VG1開發】基于RT-Thread 中科藍訊AB32VG1 bluetrum_sdk BLE開發例程講解
中科藍訊最近出的SDK(bluetrum_sdk) V1.1.0,支持了BLE開發,目前官方還沒有正式文檔,我來摸索一下吧
安裝最近SDK
操作步驟詳細請參閱: 基于RT-Thread的AB32VG1開發環境搭建
![poYBAGGuFZ6ALDtCAAK3VpadgEM069.png](http://file.elecfans.com/web2/M00/23/D8/poYBAGGuFZ6ALDtCAAK3VpadgEM069.png)
選擇中科藍訊AB32VG1開發板最新SDK(bluetrum_sdk) 1.1.0安裝
建RT-Thread工程
操作步驟詳細請參閱: 基于RT-Thread的AB32VG1開發環境搭建
注意選擇最新SDK 1.1.0
![poYBAGGuFc6AeL5oAANZyV66ddU436.png](http://file.elecfans.com/web2/M00/23/D8/poYBAGGuFc6AeL5oAANZyV66ddU436.png)
配置工程
操作步驟詳細請參閱: 基于RT-Thread的AB32VG1開發環境搭建
配置詳情如下:
![poYBAGGuFeuAQoGdAAF43GqPo6Q408.png](http://file.elecfans.com/web2/M00/23/D8/poYBAGGuFeuAQoGdAAF43GqPo6Q408.png)
開啟:
宏: [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](http://file.elecfans.com/web2/M00/23/D8/poYBAGGuFjmAJisiAAEOci3nUzI499.png)
修改代碼
首先熟悉一下BLE_SDK代碼目錄:
![pYYBAGGuFkyAVHt4AADSzV2P1zk270.png](http://file.elecfans.com/web2/M00/23/DE/pYYBAGGuFkyAVHt4AADSzV2P1zk270.png)
修改mac_addr
工程目錄下:
packages\bluetrum_sdk-latest\bluetrum_nimble\porting\npl\rtthread\src\ble_platform.c
![pYYBAGGuFqCAdcXqAAI-ImxrZGE127.png](http://file.elecfans.com/web2/M00/23/DF/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](http://file.elecfans.com/web2/M00/23/DF/pYYBAGGuFs6AetRpAAEfpKAgvm8475.png)
我修改如下:
static const char *device_name = "Silicon_blehr_sensor";
注意:不能是中文,中文會找不到設備
修改服務及設備信息
工程目錄下:
packages\bluetrum_sdk-latest\bluetrum_nimble\appsblehrsrc
![pYYBAGGuFv-Ab9HBAANKkyju3eg538.png](http://file.elecfans.com/web2/M00/23/DF/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](https://file.elecfans.com//web2/M00/23/50/pYYBAGGrgyqADNGQAAByeEy9s5Y879.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](http://file.elecfans.com/web2/M00/23/DF/pYYBAGGuF3OAaQS9AALBp2Wi9RE432.png)
雙擊出錯提示,定位到出錯的地方,#define后面是空的,刪除這個#define即可
標題重新編譯
保存修改內容: ctrl+s, 編譯:ctrl+b
![poYBAGGuF0iAXIJQAAPtmZoE0KE579.png](http://file.elecfans.com/web2/M00/23/D8/poYBAGGuF0iAXIJQAAPtmZoE0KE579.png)
編譯成功
調試
將編譯好的,目標文件:rtthread.elf,燒錄到中科藍訊AB32VG1 BLE開發板,操作步驟詳細請參閱: 基于RT-Thread的AB32VG1開發環境搭建
![pYYBAGGuG_WAN1A_AAIYWxLBi1I930.png](http://file.elecfans.com/web2/M00/23/E0/pYYBAGGuG_WAN1A_AAIYWxLBi1I930.png)
手機打開藍牙
![poYBAGGuHA-AG-9yAAI7v2ez_2A292.png](http://file.elecfans.com/web2/M00/23/D9/poYBAGGuHA-AG-9yAAI7v2ez_2A292.png)
手機打開藍牙BLE調試助手
![AB32_BLE_debug_phone_openBLEdbg.JPG](https://file.elecfans.com//web2/M00/23/49/poYBAGGrgzKAcGTuAAQri2esjoM516.jpg)
連接BLE設備
掃描到與我們代碼設置一樣BLE設備名字,說明代碼修改正確.連接與我們代碼設置一樣BLE設備名字.
![AB32_BLE_debug_phone_conect_bleg.JPG](https://file.elecfans.com//web2/M00/23/50/pYYBAGGrgzSAVjm-AAJcgoaje1c736.jpg.webp)
設備相關數據服務列表
![AB32_BLE_debug_blereportsrv.JPG](https://file.elecfans.com//web2/M00/23/4A/poYBAGGrgzaAHsk2AAGESrkq_DU164.jpg.webp)
獲取BLE設備數據--制造商信息
![AB32_BLE_debug_blerd.JPG](https://file.elecfans.com//web2/M00/23/50/pYYBAGGrgzmATMdqAAGqIm9BUY8560.jpg.webp)
點"讀取"即可,這與我們代碼設置一樣,說明代碼修改正確
![AB32_BLE_debug_blereport.JPG](https://file.elecfans.com//web2/M00/23/4A/poYBAGGrgzuAIdx5AAFkdRFoZaY944.jpg.webp)
獲取BLE設備數據--設備型號信息
點"讀取"即可,這與我們代碼設置一樣,說明代碼修改正確
![AB32_BLE_debug_blerdnum.JPG](https://file.elecfans.com//web2/M00/23/50/pYYBAGGrgz2AAtzxAAHAjDdISGA477.jpg.webp)
讀取心率相關數據
![AB32_BLE_debug_blerdhr01.JPG](https://file.elecfans.com//web2/M00/23/4A/poYBAGGrgz-AcLeDAAKLyczvcRE158.jpg.webp)
心率數據自動數據通知上報
心律數據是模擬的,開發板硬件上沒有
![AB32_BLE_debug_blerdhr01.JPG](https://file.elecfans.com//web2/M00/23/4A/poYBAGGrgz-AcLeDAAKLyczvcRE158.jpg.webp)
![AB32_BLE_debug_blerdhr02.JPG](https://file.elecfans.com//web2/M00/23/4A/poYBAGGrg0GAWsc1AAJLbJAd_28159.jpg.webp)
![AB32VG1_debug_ble_err.png](https://file.elecfans.com//web2/M00/23/50/pYYBAGGrg0KAbFtbAAD_AeBWiMc886.png)
![AB32VG1_debug_ble_err02.png](https://file.elecfans.com//web2/M00/23/4A/poYBAGGrg0KAYAM2AAB6NB6lIho960.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](http://file.elecfans.com/web2/M00/23/4F/pYYBAGGrfV-AdBMjAA_nxj6W7zU440.png)
谷動谷力
-
BLE
+關注
關注
12文章
670瀏覽量
59598 -
開發環境
+關注
關注
1文章
230瀏覽量
16699 -
SDK
+關注
關注
3文章
1045瀏覽量
46275 -
RT-Thread
+關注
關注
31文章
1305瀏覽量
40388 -
中科藍訊
+關注
關注
9文章
57瀏覽量
9933
發布評論請先 登錄
相關推薦
mXT1296M1T-AT/mXT1296M1T-AB 1.1數據手冊
![mXT1296M<b class='flag-5'>1</b>T-AT/mXT1296M<b class='flag-5'>1T-AB</b> 1.1數據手冊](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
【AI技術支持】ESP32-S3模組EspBleOTA搜索不到ble_ota例程的藍牙問題處理
![【AI技術支持】ESP32-S3模組EspBleOTA搜索不到<b class='flag-5'>ble</b>_ota<b class='flag-5'>例程</b>的藍牙問題處理](https://file.elecfans.com/web2/M00/45/DA/poYBAGKPGziABtawAAAYlXODTds073.jpg)
TINA-TI仿真,為什么VF1和VG1的波形不一樣?
基于RTOS的SDK包中example下的例程如何設置編譯條件才能完成編譯?
sdk中的wps例程,測試失敗的原因?
ble_mesh節點間如何實現以字符串的形式通信?
使用esp-idf-v5.0.1 example中的esp_ble_mesh例程遇到的疑問求解
藍牙nimble例程ble_l2cap_coc運行不成功,燒錄后搜索不到設備名稱,為什么?
AG32 下使用 Segger RTT
stm32wb55cgu6用BLE_HeartRate例程,連接一會就自動斷開的原因?
研華榮獲信通院工業數字孿生大賽優秀作品獎
![研華榮獲信通院工業數字孿生<b class='flag-5'>大賽</b>優秀<b class='flag-5'>作品</b>獎](https://file1.elecfans.com/web2/M00/CA/90/wKgZomYfKxCAapEXAABEj3S9x8w741.png)
評論