如何在hello_world添加蓝牙功能(一)
环境准备
硬件:nRF54L15DK
软件版本:NCS3.0.2
例程:hello_world
宏的配置
# Config logger
CONFIG_LOG=y
CONFIG_USE_SEGGER_RTT=y
CONFIG_LOG_BACKEND_RTT=y
CONFIG_LOG_BACKEND_UART=n
ONFIG_CONSOLE=y
#添加蓝牙从机
CONFIG_BT=y
CONFIG_BT_PERIPHERAL=y
CONFIG_BT_DEVICE_NAME="Hello_World"
CONFIG_DK_LIBRARY=y
#关闭Zephyr系统打印
CONFIG_BOOT_BANNER=n
CONFIG_NCS_BOOT_BANNER=n
#关闭SPI,目前不需要
CONFIG_SPI_NOR=n
main添加蓝牙功能
添加广播包
#广播包
static const struct bt_data ad[] =
{
BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)),
BT_DATA(BT_DATA_NAME_COMPLETE, DEVICE_NAME, DEVICE_NAME_LEN),
};
#扫描回应包
static const struct bt_data sd[] =
{
BT_DATA_BYTES(BT_DATA_UUID128_ALL, 0x84, 0xaa, 0x60, 0x74, 0x52, 0x8a, 0x8b, \
0x86, 0xd3, 0x4c, 0xb7, 0x1d, 0x1d, 0xdc, 0x53, 0x8d),
};
BT_CONN_CB_DEFINE(conn_callbacks) =
{
.connected = connected,
.disconnected = disconnected,
};
/* Private Functions ---------------------------------------------------------*/
static void connected(struct bt_conn *conn, uint8_t err)
{
if (err)
{
printk("Connection failed (err %u)\n", err);
return;
}
printk("Connected\n");
dk_set_led_on(CON_STATUS_LED);
}
static void disconnected(struct bt_conn *conn, uint8_t reason)
{
printk("Disconnected (reason %u)\n", reason);
dk_set_led_off(CON_STATUS_LED);
}
main
int main(void)
{
int err = 0;
int blink_status = 0;
err = dk_leds_init();
if (err)
{
//printk("LEDs init failed (err %d)\n", err);
return err;
}
err = bt_enable(NULL);
if (err)
{
//printk("Bluetooth init failed (err %d)\n", err);
return 0;
}
//printk("Bluetooth initialized\n");
err = bt_le_adv_start(BT_LE_ADV_CONN_1, ad, ARRAY_SIZE(ad),
sd, ARRAY_SIZE(sd));
if (err)
{
//printk("Advertising failed to start (err %d)\n", err);
return err;
}
// printk("Advertising successfully started\n");
LOG_INF("BLE start");
for (;;)
{
dk_set_led(RUN_STATUS_LED, (++blink_status) % 2);
k_msleep(500);
}
return 0;
}