标题:
基于NRF52832的低功耗蓝牙手环门锁的设计方案
[打印本页]
作者:
桦的木
时间:
2019-9-7 11:40
标题:
基于NRF52832的低功耗蓝牙手环门锁的设计方案
八月的时候做的一个单子,是用NRF52832芯片做一个门锁以识别到手环等广播蓝牙设备的MAC地址,进行分析后判断开锁任务,由于他们提出的要求中对于功耗的要求较高,四个南孚电池要带电机工作半年以上,于是就加入了睡眠和睡眠唤醒系统。代码以下:
int main(void)
{
NRF_POWER->DCDCEN = 1;
nrf_gpio_cfg_default(O1);
nrf_gpio_cfg_default(K1);
log_init();
timers_init();
//buttons_init();
power_management_init();
ble_stack_init();
gap_params_init();
gatt_init();
advertising_init();
services_init();
conn_params_init();
control_set();
NRF_LOG_INFO("Template example started.");
//advertising_start();
scan_start();
while(true)
{
idle_state_handle();
nrf_delay_ms(5000);
<div class="blockcode"><blockquote>nrf_gpio_cfg_sense_input(BUTTON_1, NRF_GPIO_PIN_PULLUP, NRF_GPIO_PIN_SENSE_HIGH);
复制代码
nrf_gpio_cfg_default(INTA);
nrf_gpio_cfg_default(INTB);
//nrf_gpio_cfg_default(LED1);
nrf_gpio_cfg_default(LED2);
nrf_gpio_cfg_default(beep);
app_timer_stop_all();
//nrf_gpio_cfg_default(BUTTON_1);
NRF_POWER->SYSTEMOFF = 1;
}
}
上述的代码中,较为重要的是设置
BUTTON_1为唤醒口:
nrf_gpio_cfg_sense_input(BUTTON_1, NRF_GPIO_PIN_PULLUP, NRF_GPIO_PIN_SENSE_HIGH);
复制代码
该函数可以配置低电平唤醒,高电平唤醒,高电平之后低电平唤醒
之后使用
NRF_POWER->SYSTEMOFF = 1;
复制代码
使得单片机进入睡眠。
下面是蓝牙事件的核心:
case BLE_GAP_EVT_ADV_REPORT:
if (p_adv_report->type.scan_response&&p_adv_report->rssi>-35)
{
NRF_LOG_INFO(" peer_addr = %02x %02x %02x %02x %02x %02x\r\n", p_adv_report->peer_addr.addr[5],p_adv_report->peer_addr.addr[4],p_adv_report->peer_addr.addr[3],p_adv_report->peer_addr.addr[2],p_adv_report->peer_addr.addr[1],p_adv_report->peer_addr.addr[0] );
NRF_LOG_INFO(" p_gap_evt->params.adv_report.rssi = %d\r\n", p_adv_report->rssi );
send_deta_band[0]=-p_adv_report->rssi;
send_deta_band[1]=p_adv_report->peer_addr.addr[5];
send_deta_band[2]=p_adv_report->peer_addr.addr[4];
send_deta_band[3]=p_adv_report->peer_addr.addr[3];
send_deta_band[4]=p_adv_report->peer_addr.addr[2];
send_deta_band[5]=p_adv_report->peer_addr.addr[1];
send_deta_band[6]=p_adv_report->peer_addr.addr[0];
//uint8_t my_adv_manuf_data[5] = {0xDE,0x02,0x03,0x04,0x05};
send_deta_band_1[5]=send_deta_band[1];
send_deta_band_1[4]=send_deta_band[2];
send_deta_band_1[3]=send_deta_band[3];
send_deta_band_1[2]=send_deta_band[4];
send_deta_band_1[1]=send_deta_band[5];
send_deta_band_1[0]=send_deta_band[6];
sd_ble_gap_adv_stop(m_advertising.adv_handle);
//advertising_init();
//advertising_start();
beep_start();
beep_stop();
control_right();
nrf_delay_ms(30);
control_stop();
nrf_delay_ms(10);
led_start();
//nrf_delay_ms(10);
advertising_init();
advertising_start();
nrf_delay_ms(2000);
control_left();
nrf_delay_ms(30);
control_stop();
//application_timers_start1();
// application_timers_start();
//advertising_start();
}
sd_ble_gap_scan_start(NULL, &m_scan_buffer);
break;
复制代码
app.rar
2019-9-7 11:37 上传
点击文件名下载附件
下载积分: 黑币 -5
7.5 KB, 下载次数: 65, 下载积分: 黑币 -5
作者:
blueskyl
时间:
2020-12-7 09:12
谢谢!正在学习中
作者:
onono
时间:
2021-3-17 08:20
感谢分享,有没sdk_config配置的教程呢。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1