• <div id="geowg"><optgroup id="geowg"></optgroup></div>
    <small id="geowg"></small>
    <tr id="geowg"></tr>
    <li id="geowg"></li>
    <dd id="geowg"></dd>
  • <nav id="geowg"></nav>
    <small id="geowg"><bdo id="geowg"></bdo></small>
  • <nav id="geowg"><input id="geowg"></input></nav>
  • <li id="geowg"></li>
  • <legend id="geowg"></legend>
  • <dd id="geowg"></dd>
    通用banner
    您當前的位置 : 首 頁 > 新聞中心 > 技術資訊

    聯系我們Contact Us

    深圳市晶大電子科技有限公司

    電 話:0755-83435615

    傳 真:0755-88325137

    郵 箱:344868188@qq.com

    網 址:www.ptudp.com

    地 址:深圳市龍華區觀瀾觀光路1301號銀星科技大廈A區1108

    ADD:A1108, Yesun Building, 1301 Guanguang Road, Xinlan Community, Guanlan Street, Longhua District, Shenzhen

    啃完這代碼對BLE就了如指掌了

    2021-07-26 10:05:27

    ZJ-RT-Thread-NIMBLE-NORDICZJ-BLE基于國產開源RT-Thread操作系統和開源BLE5.0(mynewt-nimble)協議棧在nordic(nrf52832/nrf52840)平臺上的應用徹底開源的BLE5.0協議棧源碼
    ZJ-BLE介紹ZJ-BLE源碼使用mynewt-nimble開源BLE協議棧 https://github.com/apache/mynewt-nimbleRT-Thread官方的出的nimble的見白大神的GitHub nrf52832-bspZJ-BLE源碼使用的RT-Thread V4.0內核 https://github.com/RT-Thread/rt-threadZJ-BLE源碼使用的NORDIC官方SDK15.0的nrfx驅動 http://developer.nordicsemi.com/nRF5_SDK/ZJ-BLE源碼支持nrf52832和nrf52840藍牙芯片ZJ-BLE源碼支持KEIL集成開發環境開發
    SDK支持的IDEMDK Keil https://www.keil.com/download/product/
    硬件平臺NORDIC nrf52832/nrf52840


    image.png

         這個是上篇中修改白大神的代碼得到的,就可以安安心心的分析ble協議棧了,再結合那個葵花寶典《BLE4.0低功耗藍牙協議完全解析》(公眾號回復 協議文檔 會有下載地址,或者在https://github.com/ZJ-TEK/ZJ-SDK-RT-Thread-NORDIC這里也有文檔)應該就會慢慢的對BLE了解了。

         目前工程中還只有一個工程,這個工程只保留了RT-Thread的內核代碼+nimble+nordic的RTC作為RT-Thread的時鐘源碼代碼,目的是做一個Z基礎的工程,可以方便的分析BLE,這個代碼目前還沒有做好低功耗,這個我也在查資料解決,和白大神溝通了,他也在處理中。

            下面簡單看看nimble_hrm的工程:

    image.png

    • 看看廣播源碼結構

    struct ble_hs_adv_fields {    /*** 0x01 - Flags. */    uint8_t flags;
       /*** 0x02,0x03 - 16-bit service class UUIDs. */    ble_uuid16_t *uuids16;    uint8_t num_uuids16;    unsigned uuids16_is_complete:1;
       /*** 0x04,0x05 - 32-bit service class UUIDs. */    ble_uuid32_t *uuids32;    uint8_t num_uuids32;    unsigned uuids32_is_complete:1;
       /*** 0x06,0x07 - 128-bit service class UUIDs. */    ble_uuid128_t *uuids128;    uint8_t num_uuids128;    unsigned uuids128_is_complete:1;
       /*** 0x08,0x09 - Local name. */    uint8_t *name;    uint8_t name_len;    unsigned name_is_complete:1;
       /*** 0x0a - Tx power level. */    int8_t tx_pwr_lvl;    unsigned tx_pwr_lvl_is_present:1;
       /*** 0x0d - Slave connection interval range. */    uint8_t *slave_itvl_range;
       /*** 0x16 - Service data - 16-bit UUID. */    uint8_t *svc_data_uuid16;    uint8_t svc_data_uuid16_len;
       /*** 0x17 - Public target address. */    uint8_t *public_tgt_addr;    uint8_t num_public_tgt_addrs;
       /*** 0x19 - Appearance. */    uint16_t appearance;    unsigned appearance_is_present:1;
       /*** 0x1a - Advertising interval. */    uint16_t adv_itvl;    unsigned adv_itvl_is_present:1;
       /*** 0x20 - Service data - 32-bit UUID. */    uint8_t *svc_data_uuid32;    uint8_t svc_data_uuid32_len;
       /*** 0x21 - Service data - 128-bit UUID. */    uint8_t *svc_data_uuid128;    uint8_t svc_data_uuid128_len;
       /*** 0x24 - URI. */    uint8_t *uri;    uint8_t uri_len;
       /*** 0xff - Manufacturer specific data. */    uint8_t *mfg_data;    uint8_t mfg_data_len;   };

    有沒有一種一目了然的感覺,可以看之前的文章《這次一定搞定廣播的62字節

    表1-1廣播類型定義AD Type


    AD Type

    Value

    描述

    Flags

    0x01

    廣播出自己藍牙某些特性

    Service  UUIDs

    0x02~0x07

    廣播出自己服務的UUID

    Local  Name

    0x08/0x09

    廣播出自己的藍牙名字

    TX  Power Level

    0x0A

    廣播出自己的射頻發射功率

    Simple Pairing  Option OOB Tags

    0x0D~0x0F

    廣播出安全管理帶外標簽(本文忽略)

    Security  Manager TK Value

    0x10

    廣播出帶外方式配對綁定時的TK(本文忽略)

    Security  Manager OOB Flags

    0x11

    廣播出帶外特性標志(本文忽略)

    Slave  Connection Interval Range

    0x12

    廣播出自己希望的連接參數范圍

    Service  Solicitation

    0x14/0x15

    廣播出自己希望來接自己的主機有特定的服務

    Service  Data

    0x16

    服務數據

    Manufacturer  Specific Data

    0xFF

    廣播出廠商信息(用戶可以放自定義數據)


    • 看看廣播數據怎么設置


    static voidblehr_advertise(void){    struct ble_gap_adv_params adv_params;    struct ble_hs_adv_fields fields;    int rc;
       /*     *  Set the advertisement data included in our advertisements:     *     o Flags (indicates advertisement type and other general info)     *     o Advertising tx power     *     o Device name     */    memset(&fields, 0, sizeof(fields));
       /*     * Advertise two flags:     *      o Discoverability in forthcoming advertisement (general)     *      o BLE-only (BR/EDR unsupported)     */    fields.flags = BLE_HS_ADV_F_DISC_GEN |                    BLE_HS_ADV_F_BREDR_UNSUP;
       /*     * Indicate that the TX power level field should be included; have the     * stack fill this value automatically.  This is done by assigning the     * special value BLE_HS_ADV_TX_PWR_LVL_AUTO.     */    fields.tx_pwr_lvl_is_present = 1;    fields.tx_pwr_lvl = BLE_HS_ADV_TX_PWR_LVL_AUTO;
       fields.name = (uint8_t *)device_name;    fields.name_len = strlen(device_name);    fields.name_is_complete = 1;
       /*** 0x02,0x03 - 16-bit service class UUIDs. */    fields.num_uuids16 = 1;    fields.uuids16 = m_adv_uuids;    fields.uuids16_is_complete = 1;    rc = ble_gap_adv_set_fields(&fields);    if (rc != 0) {        MODLOG_DFLT(ERROR, "error setting advertisement data; rc=%d\n", rc);        return;    }    /*** 0xff - Manufacturer specific data. */    memset(&fields, 0, sizeof(fields));    fields.mfg_data = (uint8_t*)"GZH:Bluetooth-BLE,177341833";    fields.mfg_data_len = 27;
       rc = ble_gap_adv_rsp_set_fields(&fields);    if (rc != 0) {        MODLOG_DFLT(ERROR, "error setting advertisement data; rc=%d\n", rc);        return;    }    /* Begin advertising */    memset(&adv_params, 0, sizeof(adv_params));    adv_params.conn_mode = BLE_GAP_CONN_MODE_UND;    adv_params.disc_mode = BLE_GAP_DISC_MODE_GEN;    rc = ble_gap_adv_start(blehr_addr_type, NULL, BLE_HS_FOREVER,                           &adv_params, blehr_gap_event, NULL);    if (rc != 0) {        MODLOG_DFLT(ERROR, "error enabling advertisement; rc=%d\n", rc);        return;    }}

    各位大佬,有沒有感覺這個源碼非常非常的吊??!反正我是感覺很吊很吊了!

    • 演示效果

        不抽B了,看看演示效果吧!編譯nRF52840的工程,下載到nRF52840

    • 廣播hrm_adv 注意廣播內容中無處不在的廣告!

    image.png

    • 設備信息hrm_dev_info 注意設備信息中無處不在的廣告!

    image.png

    • 心率顯示hrm  1s 4個心率值

    image.png


    好了,差不多了,今天就到這兒了,下一次發文章也不知道是什么時候了,但是我自己會研究這個代碼學習BLE 以及MESH的,當然這個代碼我也會不停的增加工程的,例如加入finsh和控制臺便于調試,同時也會關注HCI接口,看能否將52840的USB用上,然后電腦上面寫一個HCI的HOST,這樣就能更方便的調試了。


    標簽

    0

    近期瀏覽:

    相關產品

    相關新聞

    日本少妇超清xxxx_胖女性大bbbbbb视频_欧洲熟妇色xxxx欧美老妇多毛_成年av动漫网站18禁