找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5651|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

基于NRF52832的低功耗藍(lán)牙手環(huán)門鎖的設(shè)計(jì)方案

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:490627 發(fā)表于 2019-9-7 11:40 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
八月的時(shí)候做的一個(gè)單子,是用NRF52832芯片做一個(gè)門鎖以識(shí)別到手環(huán)等廣播藍(lán)牙設(shè)備的MAC地址,進(jìn)行分析后判斷開鎖任務(wù),由于他們提出的要求中對于功耗的要求較高,四個(gè)南孚電池要帶電機(jī)工作半年以上,于是就加入了睡眠和睡眠喚醒系統(tǒng)。代碼以下:

  1. int main(void)
  2. {
  3.        
  4.        
  5.         NRF_POWER->DCDCEN = 1;
  6.         nrf_gpio_cfg_default(O1);                                                                  
  7.   nrf_gpio_cfg_default(K1);
  8.          
  9.         log_init();
  10.   
  11.         timers_init();

  12.         //buttons_init();
  13.          
  14.         power_management_init();
  15.   
  16.         ble_stack_init();
  17.           
  18.         gap_params_init();
  19.          
  20.         gatt_init();
  21.          
  22.         advertising_init();
  23.          
  24.         services_init();
  25.          
  26.   conn_params_init();
  27.        
  28.         control_set();  
  29.        
  30.   NRF_LOG_INFO("Template example started.");  
  31.          
  32.         //advertising_start();
  33.        
  34.         scan_start();
  35.    
  36.         while(true)
  37.         {
  38.                  
  39.                 idle_state_handle();
  40.                 nrf_delay_ms(5000);
  41.                
  42.                 <div class="blockcode"><blockquote>nrf_gpio_cfg_sense_input(BUTTON_1, NRF_GPIO_PIN_PULLUP, NRF_GPIO_PIN_SENSE_HIGH);
復(fù)制代碼


               
                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;

        }
}
上述的代碼中,較為重要的是設(shè)置BUTTON_1為喚醒口:
  1.         nrf_gpio_cfg_sense_input(BUTTON_1, NRF_GPIO_PIN_PULLUP, NRF_GPIO_PIN_SENSE_HIGH);
復(fù)制代碼
該函數(shù)可以配置低電平喚醒,高電平喚醒,高電平之后低電平喚醒
之后使用
  1. NRF_POWER->SYSTEMOFF = 1;
復(fù)制代碼

使得單片機(jī)進(jìn)入睡眠。

下面是藍(lán)牙事件的核心:
  1. case BLE_GAP_EVT_ADV_REPORT:
  2.                               if (p_adv_report->type.scan_response&&p_adv_report->rssi>-35)
  3.         {
  4.                                           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] );
  5.                                     NRF_LOG_INFO(" p_gap_evt->params.adv_report.rssi  = %d\r\n", p_adv_report->rssi );
  6.                                           send_deta_band[0]=-p_adv_report->rssi;
  7.                                           send_deta_band[1]=p_adv_report->peer_addr.addr[5];
  8.                                           send_deta_band[2]=p_adv_report->peer_addr.addr[4];
  9.                                           send_deta_band[3]=p_adv_report->peer_addr.addr[3];
  10.                                           send_deta_band[4]=p_adv_report->peer_addr.addr[2];
  11.                                           send_deta_band[5]=p_adv_report->peer_addr.addr[1];
  12.                                           send_deta_band[6]=p_adv_report->peer_addr.addr[0];
  13.                                           //uint8_t          my_adv_manuf_data[5] = {0xDE,0x02,0x03,0x04,0x05};
  14.                                                
  15.                                                
  16.                                         send_deta_band_1[5]=send_deta_band[1];
  17.                                         send_deta_band_1[4]=send_deta_band[2];
  18.                                         send_deta_band_1[3]=send_deta_band[3];
  19.                                         send_deta_band_1[2]=send_deta_band[4];
  20.                                         send_deta_band_1[1]=send_deta_band[5];
  21.                                         send_deta_band_1[0]=send_deta_band[6];
  22.                                                
  23.                                                
  24.                                           sd_ble_gap_adv_stop(m_advertising.adv_handle);
  25.                                           //advertising_init();
  26.                                           //advertising_start();
  27.                                                    
  28.             beep_start();
  29.                                                
  30.                                                 beep_stop();
  31.                                                  
  32.                                                          
  33.                                           control_right();
  34.                                           nrf_delay_ms(30);
  35.                                           control_stop();
  36.                                                 nrf_delay_ms(10);
  37.                                                
  38.                                                 led_start();
  39.                                                 //nrf_delay_ms(10);
  40.                                                 advertising_init();
  41.                                                 advertising_start();
  42.                                                 nrf_delay_ms(2000);
  43.                                           control_left();
  44.                                           nrf_delay_ms(30);
  45.                                           control_stop();
  46.                   //application_timers_start1();
  47.         //                                  application_timers_start();

  48.                                           
  49.                                           //advertising_start();

  50.             
  51.                                 }
  52.                               sd_ble_gap_scan_start(NULL, &m_scan_buffer);
  53.                               break;
復(fù)制代碼




app.rar

7.5 KB, 下載次數(shù): 66, 下載積分: 黑幣 -5

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:295855 發(fā)表于 2020-12-7 09:12 | 只看該作者
謝謝!正在學(xué)習(xí)中
回復(fù)

使用道具 舉報(bào)

板凳
ID:384489 發(fā)表于 2021-3-17 08:20 | 只看該作者
感謝分享,有沒sdk_config配置的教程呢。
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表