nrf51822 廣播的型別

2021-07-11 03:54:48 字數 3795 閱讀 2970

1.目的

設定廣播的型別

2.分析

在專案中經常使用到各種不同的廣播型別,比如只做廣播而不能被連線,且不定性廣播的時候可以設定為ble_gap_adv_type_adv_nonconn_ind,

假如只指定mac位址的裝置才能連上裝置,這個時候就可以用定向廣播

3.平台:

協議棧版本:sdk8.0.0

編譯軟體:keil 5.14

硬體平台:nrf51822最小系統

4.步驟

廣播型別有如下選擇。

ble_gap_adv_type_adv_ind  :可以被任何主機連線,不定向廣播

ble_gap_adv_type_adv_direct_ind:可以連線,定向廣播,(只能被指定的裝置連線)

ble_gap_adv_type_adv_scan_ind:可以被掃面,不定向

ble_gap_adv_type_adv_nonconn_ind:不可以連線,不定向

/**@defgroup ble_gap_adv_types gap advertising types

* @ */

uint32_t ble_advertising_start(ble_adv_mode_t advertising_mode)

else if (err_code != nrf_success)

if (count != 0)

// fetch the peer address.

ble_advertising_peer_address_clear();

if ( ((m_adv_modes_config.ble_adv_directed_enabled)

&& m_adv_mode_current == ble_adv_mode_directed)

||((m_adv_modes_config.ble_adv_directed_slow_enabled)

&& m_adv_mode_current == ble_adv_mode_directed_slow))

else

}// if a mode is disabled, continue to the next mode. i.e fast instead of direct, slow instead of fast, idle instead of slow.

if ( (m_adv_mode_current == ble_adv_mode_directed)

&&(!m_adv_modes_config.ble_adv_directed_enabled || !peer_address_exists(m_peer_address.addr)))

if ( (m_adv_mode_current == ble_adv_mode_directed_slow)

&&(!m_adv_modes_config.ble_adv_directed_slow_enabled || !peer_address_exists(m_peer_address.addr)))

if (!m_adv_modes_config.ble_adv_fast_enabled && m_adv_mode_current == ble_adv_mode_fast)

if (!m_adv_modes_config.ble_adv_slow_enabled && m_adv_mode_current == ble_adv_mode_slow)

// fetch the whitelist.

if ( (m_evt_handler != null)

&& (m_adv_mode_current == ble_adv_mode_fast || m_adv_mode_current == ble_adv_mode_slow)

&& (m_adv_modes_config.ble_adv_whitelist_enabled)

&& (!m_whitelist_temporarily_disabled))

else

// initialize advertising parameters with default values.

memset(&adv_params, 0, sizeof(adv_params));

adv_params.type = ble_gap_adv_type_adv_ind;

adv_params.p_peer_addr = null;

adv_params.fp = ble_gap_adv_fp_any;

adv_params.p_whitelist = null;

// set advertising parameters and events according to selected advertising mode.

switch (m_adv_mode_current)

m_adv_evt = ble_adv_evt_fast_whitelist;

log("[adv]: starting fast advertisement with whitelist.\r\n");

}else

break;

case ble_adv_mode_slow:

adv_params.interval = m_adv_modes_config.ble_adv_slow_interval;

adv_params.timeout = m_adv_modes_config.ble_adv_slow_timeout;

if ( whitelist_has_entries(&m_whitelist)

&& m_adv_modes_config.ble_adv_whitelist_enabled

&& !m_whitelist_temporarily_disabled)

m_adv_evt = ble_adv_evt_slow_whitelist;

log("[adv]: starting slow advertisement with whitelist.\r\n");

}else

break;

default:

break;

}if (m_adv_mode_current != ble_adv_mode_idle)

}if (m_evt_handler != null)

return nrf_success;

}

上面代帶可以看到ble_advertising_start();可以設定廣播的模式。

ble_adv_mode_directed和ble_adv_mode_directed_slow的時候,需要設定

adv_params.p_peer_addr = &m_peer_address; // directed advertising.這個引數

引數的定義如下:

/**@brief bluetooth low energy address. */

typedef struct

ble_gap_addr_t;

static ble_gap_addr_t                  m_peer_address;     /**< address of the most recently connected peer, used for direct advertising. */

可以看到這個是設定位址的型別和6位的位址碼。

這裡設定能連上自己的裝置的藍芽位址,就可以定向廣播了。藍芽值選擇設定mac位址的裝置才能連上自己。

nrf51822 廣播間隔

1.目的 設定廣播間隔,已達到乙個功耗最佳的狀態 2.分析 廣播間隔,指每次藍芽廣播之間的間隔,間隔越大功耗越低,間隔越小功耗越大 3.平台 協議棧版本 sdk10.0.0 編譯軟體 keil 5.14 硬體平台 nrf51822最小系統 4.步驟 在main.c static void adver...

nrf51822 修改藍芽名字

1.目的 修改藍芽的名字 2.分析 藍芽名字最長設定為20個位元組,超過20個位元組為無效 3.平台 協議棧版本 sdk10.0.0 編譯軟體 keil 5.14 硬體平台 nrf51822最小系統 4.步驟 首先,要知道設定名字的api 在ble gap.h brief set gap devic...

nrf51822 設定傳送功率

1.目的 設定藍芽傳送功率,達到省電的目的 2.分析 實際應用當中,時常需要需改藍芽的發射功率,以達到省電的目的。在nrf51822中可以設定為9個發射等級,分別是 40,30,20,16,12,8,4,0,和4 dbm 3.平台 協議棧版本 sdk10.0.0 編譯軟體 keil 5.14 硬體平...