因为BLE中新增扫描能力会消耗较多的内存,且很多时候并用不到扫描,所以这个功能在SDK中默认是关闭的。
一、如何打开扫描能力?
在WindIDE上将SDK拉下来后, 暂时不编译,先做如下操作
在路径:app/tuyaos_demo_ble_peripheral 下找到文件:IoTSconfig
在最下面新增如下配置项:
Code: Select all
config ENABLE_SCAN
bool "ENABLE_SCAN"
default y
新增完配置项后,编译工程,此修改项会同步生效。
如果要关闭SCAN能力或者修改其他的能力,需要重新配置工程,操作如下:
注意:版本号自行定义, 不过要遵循 X.X.X 的格式(如 3.8.3)
二、扫描能力初体验
代码中已经有对扫描的处理,并可以通过SDK测试上位机:Logic.exe 来初步体验一下扫描
软件使用说明见链接: viewtopic.php?p=3892&hilit=Logic#p3892
使用方法按如下图所示:
三、打印扫描到的广播信息
在文件 software\TuyaOS\apps\tuyaos_demo_ble_peripheral\src\tuya_sdk_callback.c 中的函数
STATIC VOID_T tuya_ble_evt_callback(TAL_BLE_EVT_PARAMS_T p_event) 的事件case TAL_BLE_EVT_ADV_REPORT中添加如下代码:
Code: Select all
case TAL_BLE_EVT_ADV_REPORT: {
#if defined(TUYA_BLE_FEATURE_PRODUCT_TEST_ENABLE) && (TUYA_BLE_FEATURE_PRODUCT_TEST_ENABLE==1)
extern VOID_T tuya_ble_prod_beacon_handler(VOID_T* buf);
tuya_ble_prod_beacon_handler(&p_event->ble_event.adv_report);
#endif
if((p_event->ble_event.adv_report.peer_addr.addr[5] == 0xDC) && (p_event->ble_event.adv_report.peer_addr.addr[4] == 0x23) && (p_event->ble_event.adv_report.peer_addr.addr[3] == 0x4F)){
TAL_PR_INFO("TYPE: %d", p_event->ble_event.adv_report.adv_type);
TAL_PR_INFO("RSSI: %d", -p_event->ble_event.adv_report.rssi);
TAL_PR_INFO("MAC: %x %x %x %x %x %x", \
p_event->ble_event.adv_report.peer_addr.addr[5], p_event->ble_event.adv_report.peer_addr.addr[4], \
p_event->ble_event.adv_report.peer_addr.addr[3], p_event->ble_event.adv_report.peer_addr.addr[2], \
p_event->ble_event.adv_report.peer_addr.addr[1], p_event->ble_event.adv_report.peer_addr.addr[0]);
TAL_PR_HEXDUMP_INFO("DATA: ", p_event->ble_event.adv_report.p_data, p_event->ble_event.adv_report.data_len);
}
} break;
相应LOG如下图所示:
编译、烧录后,通过上位机启动扫描,观察LOG打印的内容。
注意:因为广播较多 ,所以这里只打印指定mac地址的广播信息。
注意: 该SDK的LOG TX口为PA0,波特率 1000000