开发环境:
硬件:EFR32MG12P332F1024GL125@10dBm
SDK:EmberZNet 6.5.0.0
基于例程:DynamicMultiprotocolDemoLightSedSoc和DynamicMultiprotocolDemoSwitchWithNvm3Soc
1.需要设置好Board名称
2.设置Bootloader类型
3.去掉Plugin,降低功耗
取消勾选ADC、Graphics Library、WSTK Display Driver、Dynamic Multiprotocol UI Demo Code
勾选Dynamic Multiprotocol UI Demo Code Stub 和 EEPROM POWERDOWN
修改BLE里的Max number of BLE connections :1
修改End Device Support里的Long Poll Interval:4
修改Micrium RTOS里的勾选Enable EM1/EM2,取消勾选Poll CLI
修改Network Steering里的Radio output power:10dBm
4.打开.hwconf文件,取消勾选SPI Display和LED
5. 生成IAR工程
修改 DynamicMultiprotocolDemoLightSedWithNvm3Soc.h 文件
//最大蓝牙连接个数改为1,连接一台手机后不再广播
#define EMBER_AF_PLUGIN_BLE_MAX_CONNECTIONS 5 1
//修改Long Poll间隔为4秒
#define EMBER_AF_PLUGIN_END_DEVICE_SUPPORT_LONG_POLL_INTERVAL_SECONDS 5 4
//End Device Support plugin增加
#define EMBER_AF_PLUGIN_END_DEVICE_SUPPORT_ENHANCED_SLEEP_SUPPORT
//plugin Idle/Sleep plugin去掉
#define EMBER_AF_PLUGIN_IDLE_SLEEP_STAY_AWAKE_WHEN_NOT_JOINED
//plugin Micrium RTOS增加
#define EMBER_AF_PLUGIN_MICRIUM_RTOS_SLEEP_ENABLE
//修改发射功率为最大
#define EMBER_AF_PLUGIN_NETWORK_STEERING_RADIO_TX_POWER 10
//去掉CLI定时器,250ms唤醒一次会影响功耗测试
#define EMBER_AF_PLUGIN_MICRIUM_RTOS_POLL_CLI
屏蔽函数
//dmpUiClrLcdDisplayMainScreen();
//writeIdentifyTime(180);
修改程序:
1.在emberAfPluginBleEventCallback()函数中
在gecko_evt_le_connection_opened_id 的case中的else条件的最后一行加上
gecko_cmd_le_connection_set_parameters(conn_evt->connection, 80, 160, 0, 400);//设置蓝牙心跳间隔为200ms
2.在enableBleAdvertisements()函数中修改BLE广播发射功率
gecko_cmd_system_set_tx_power(-160);//修改为ADV TX Power -16dBm
并且修改广播间隔为318ms
gecko_cmd_le_gap_bt5_set_adv_parameters(HANDLE_DEMO, 510, 510, 7, 1);//修改为ADV Interval 318ms
3.在最后一行屏蔽,禁止发送广播Beacon数据
//BeaconAdvertisements(devId);