<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 設(shè)計(jì)應(yīng)用 > Silicon Labs藍(lán)牙Mesh應(yīng)用實(shí)例

          Silicon Labs藍(lán)牙Mesh應(yīng)用實(shí)例

          作者:李仁慶 時(shí)間:2019-03-29 來源:電子產(chǎn)品世界 收藏

          The application of ’ Bluetooth Mesh

          本文引用地址:http://www.ex-cimer.com/article/201903/399041.htm

          李仁慶(貝能國際有限公司,廣東 廣州 510665)

                 摘要:標(biāo)準(zhǔn)脫胎于藍(lán)牙低功耗(BLE)和網(wǎng)狀協(xié)議,兼有兩種協(xié)議優(yōu)點(diǎn),又摒棄其缺點(diǎn),是開發(fā)節(jié)點(diǎn)網(wǎng)絡(luò)的選擇之一;公司推出的 SDK和支持BT5.0的EFR32BG13系列SoC,讓應(yīng)用變得簡單靈活。
                 關(guān)鍵詞:藍(lán)牙;mesh;照明;拓?fù)?/p>

            引言

                 物聯(lián)網(wǎng)發(fā)展如火如荼的今天,怎樣可以聯(lián)接大量節(jié)點(diǎn),又可以適應(yīng)不同節(jié)點(diǎn)的特點(diǎn)的問題?這不可避免地?cái)[在了所有的業(yè)內(nèi)人士面前。Zigbee標(biāo)準(zhǔn)已有成熟生態(tài)鏈,但需要有網(wǎng)關(guān),無法跟目前流行的操作終端如手機(jī)進(jìn)行直連成為了短板;在家庭、工業(yè)、商業(yè)都普遍應(yīng)用的Wi-Fi因功耗大,無法適應(yīng)各種節(jié)點(diǎn)的特點(diǎn)而只能用在傳輸速度有要求的產(chǎn)品上;入門簡單、成本低的在簡單的智能物聯(lián)產(chǎn)品中使用最多,但因其標(biāo)準(zhǔn)化程度不高,無法達(dá)到各廠家的產(chǎn)品互聯(lián)互通;近期流行的NB-IoT產(chǎn)品因其廣域網(wǎng)特點(diǎn),在大規(guī)模遠(yuǎn)距離節(jié)點(diǎn)網(wǎng)絡(luò)中有頗多應(yīng)用,但功耗和整體成本問題是暫時(shí)難以解決的問題。那是否就沒有一種協(xié)議可以完美解決這些問題嗎?
            有!藍(lán)牙技術(shù)聯(lián)盟于2017年7月19日正式宣布,藍(lán)牙(Bluetooth?)技術(shù)開始全面支持Mesh網(wǎng)狀網(wǎng)絡(luò)(如圖1)。藍(lán)牙Mesh標(biāo)準(zhǔn)脫胎于藍(lán)牙低功耗(BLE),用于建立多對(duì)多設(shè)備通信的新網(wǎng)絡(luò)。藍(lán)牙Mesh標(biāo)準(zhǔn)協(xié)議具有藍(lán)牙BLE的特點(diǎn),也有多對(duì)多的網(wǎng)絡(luò)拓?fù)?,無需網(wǎng)關(guān)同時(shí)具備多種應(yīng)用profile標(biāo)準(zhǔn),操作簡單,在各種操作終端中普遍配備的優(yōu)點(diǎn),完全符合節(jié)點(diǎn)網(wǎng)絡(luò)的特點(diǎn);未來利用藍(lán)牙beacon信息推送和定位技術(shù),可以實(shí)現(xiàn)無連接推送和室內(nèi)定位功能。

                 1 公司的套件及芯片

                 公司提供的藍(lán)牙Mesh標(biāo)準(zhǔn)協(xié)議目前已經(jīng)推出第二版正式SDK,加入了調(diào)光、調(diào)色功能,標(biāo)志著藍(lán)牙Mesh在Lighting(照明)上的應(yīng)用更加成熟;也加入了友員節(jié)點(diǎn)、低功耗節(jié)點(diǎn),低功耗應(yīng)用的實(shí)現(xiàn)也令藍(lán)牙Mesh在Lighting領(lǐng)域的產(chǎn)品化成為現(xiàn)實(shí)。
            公 司 在 藍(lán) 牙 M e s h 應(yīng) 用 上 有、EFR32BG系列SoC和BGM系列模塊,其中性價(jià)比最高的為EFR32BG13系列,并提供了相應(yīng)的開發(fā)套件和例程,能大大提高藍(lán)牙Mesh產(chǎn)品的開發(fā)速度。該SoC集成了藍(lán)牙5.0 2.4 GHz RF硬件,內(nèi)置PA和巴倫電路,RF外圍器件只需要增加2個(gè)電感和1個(gè)電容,無需客戶在射頻方面投入不必要的精力。
            2 在照明領(lǐng)域應(yīng)用藍(lán)牙Mesh實(shí)例

                 無論是在工業(yè)照明、商業(yè)照明還是在家庭照明中,實(shí)際燈的數(shù)量和開關(guān)的數(shù)量都遠(yuǎn)遠(yuǎn)超過初戰(zhàn)演示,而且照明場景也遠(yuǎn)遠(yuǎn)復(fù)雜過初戰(zhàn)演示。接下來,我們結(jié)合案例實(shí)現(xiàn)一個(gè)應(yīng)用實(shí)例。

          1554699094893731.png

           ?、俑鶕?jù)Silicon Labs公司提供的硬件資料重新制作了合乎產(chǎn)品尺寸的PCB(印制板),由于該SoC在無線方面集成了PA(功率放大器)和巴倫電路,外圍電路相當(dāng)簡單,基本不需要進(jìn)行任何硬件調(diào)試,一次PCB制作成功率相當(dāng)高。官方提供的開發(fā)套件為兩個(gè)LED,本應(yīng)用實(shí)驗(yàn)將其擴(kuò)展為三個(gè)LED;官方提供的開發(fā)套件為兩個(gè)按鍵,分別完成開關(guān)、調(diào)光和出廠復(fù)位,本應(yīng)用實(shí)驗(yàn)將其縮減為一個(gè)按鍵,采用單方向循環(huán)算法完成開關(guān)、調(diào)光和出廠復(fù)位。
           ?、谠趹?yīng)用實(shí)驗(yàn)中,我們模擬了一個(gè)需要用到50個(gè)節(jié)點(diǎn)的照明網(wǎng)絡(luò)(如圖2),將其分成4組,其中兩組均為手動(dòng)模式,為1個(gè)開關(guān)節(jié)點(diǎn)手動(dòng)控制9個(gè)燈節(jié)點(diǎn)的開關(guān)和調(diào)光,這個(gè)場景是官方演示套裝的加大版本,也是日常照明比較常見的場景;第3組為自動(dòng)開關(guān)場景,2個(gè)開關(guān)節(jié)點(diǎn)按不同節(jié)拍自動(dòng)控制25個(gè)燈節(jié)點(diǎn)開或關(guān),模擬的是需要自動(dòng)開關(guān)的場景,如路燈自動(dòng)開啟和熄滅;最后一組為自動(dòng)轉(zhuǎn)發(fā)場景,由1個(gè)開關(guān)節(jié)點(diǎn)和2個(gè)帶轉(zhuǎn)發(fā)功能燈節(jié)點(diǎn)完成,適用于長廊控制場景。
            下面將在初步實(shí)戰(zhàn)和以上硬件基礎(chǔ)上完成軟件應(yīng)用。
           ?、墼趕implicity studio上建立例程SoC-Mesh Light和SoC-Mesh Switch,生成代碼后可以直接進(jìn)行編譯,之后進(jìn)行第一處修改,本應(yīng)用實(shí)驗(yàn)的LED和引腳進(jìn)行了改動(dòng),而LED是調(diào)用了PWM進(jìn)行控制,所以需要進(jìn)行引腳分配和PWM配置修改,可以在其他工程中調(diào)用硬件配置器進(jìn)行圖形化修改,生成代碼。由于本應(yīng)用實(shí)驗(yàn)中改動(dòng)不大,故直接在源碼中進(jìn)行修改:

          // configure LED pins
          GPIO_PinModeSet(BSP_
          L E D 0 _ P O R T , ( 5 U ) ,
          gpioModePushPull, LED_OFF_
          STATE);
          GPIO_PinModeSet(BSP_
          L E D 0 _ P O R T , ( 6 U ) ,
          gpioModePushPull, LED_OFF_
          STATE);
          GPIO_PinModeSet(BSP_
          L E D 0 _ P O R T , ( 7 U ) ,
          gpioModePushPull, LED_OFF_STATE);
          // configure pushbutton PB4 as inputs, with pull-
          up enabled delete PB1
          GPIO_PinModeSet(BSP_BUTTON0_PORT, (4U),
          gpioModeInputPull, 1);
          // configure PWM
          TIMER0->ROUTELOC0 = LED0_ROUTELOC |
          LED1_ROUTELOC | LED2_ROUTELOC;// add CC2
          TIMER0->ROUTEPEN = TIMER_ROUTEPEN_
          CC0PEN | TIMER_ROUTEPEN_CC1PEN | TIMER_
          ROUTEPEN_CC2PEN;
          sInitCC.mode = timerCCModePWM;
          TIMER_InitCC(TIMER0, 0, &sInitCC);
          TIMER_InitCC(TIMER0, 1, &sInitCC);
          TIMER_InitCC(TIMER0, 2, &sInitCC); // add CC2
          TIMER_CompareSet(TIMER0, 0, current_level);

          TIMER_CompareSet(TIMER0, 1, current_level);
          TIMER_CompareSet(TIMER0, 2, current_level); //
          add CH2

          修改一下出廠復(fù)位的觸發(fā)條件:

          case gecko_evt_system_boot_id:
          // check pushbutton state at startup. If PB4 is
          held down then do factory reset
          if (GPIO_PinInGet(BSP_BUTTON0_PORT,
          BSP_BUTTON0_PIN) == 0){
          temp1 = RTCC_CounterGet();
          while(GPIO_PinInGet(BSP_BUTTON0_
          PORT, BSP_BUTTON0_PIN) == 0){
          temp2 = RTCC_CounterGet()-
          temp1;
          if(temp2>LONG_PRESS_TIME_
          TICKS){
          t e m p 1 = R T C C _
          CounterGet();
          LED_set_state(LED_STATE_
          PROV);
          temp3++;
          }
          if(temp3>30){
          initiate_factory_reset();
          break;
          }
          }

          if(temp3<=30){
          struct gecko_msg_system_get_bt_
          address_rsp_t *pAddr = gecko_cmd_system_get_bt_
          address();
          set_device_name(&pAddr-
          >address);
          // Initialize Mesh stack in Node
          operation mode, wait for initialized event
          result = gecko_cmd_mesh_node_
          init()->result;
          if (result) {
          sprintf(buf, “init failed
          (0x%x)”, result);
          }
          }
          }

          1554699125936998.png

                 ④重新編譯完后,可以燒錄進(jìn)第一、二組中,按進(jìn)行組網(wǎng)分組即可完成手動(dòng)模式的場景。
            ⑤在手動(dòng)模式基礎(chǔ)上修改自動(dòng)模式的開啟關(guān)閉,則變成自動(dòng)模式的場景:

                 //修改按鍵中斷處理即可

          void gpioint(uint8_t pin){
          if ((pin == BSP_BUTTON0_PIN)&&(enter==0)) {
          if (GPIO_PinInGet(BSP_BUTTON0_PORT,
          BSP_BUTTON0_PIN) == 0) {
          // pressed - record RTCC timestamp
          pb0_press = RTCC_CounterGet();
          } else {
          // released - check if it was short or long press
          t_diff = RTCC_CounterGet() - pb0_press;
          if (t_diff < LONG_PRESS_TIME_TICKS) {
          gecko_external_signal(EXT_
          SIGNAL_PB4_SHORT_PRESS);
          enter=1;
          } else {
          gecko_external_signal(EXT_
          SIGNAL_PB4_LONG_PRESS);

          enter=1;
          }
          }
          }
          e l s e i f ( ( p i n = = B S P _ B U T T O N 0 _
          PIN)&&(enter==2)) {
          enter=0;
          }
          }

                 ⑥重新編譯完后,可以燒錄進(jìn)第三、四組中,按進(jìn)行組網(wǎng)分組即可完成自動(dòng)模式的場景。
           ?、咴谧詣?dòng)模式組網(wǎng)時(shí),選擇RELAY功能,則具備了轉(zhuǎn)發(fā)功能,使用電池供電裝置后,可以用在長廊控制場景。
           ?、?如 客 戶 需 要 自 己 開 發(fā) 合 適 的 A p p , 則simplicity studio在上下載到ADK,按應(yīng)用筆記《an1140-
          bluetooth-mesh-for-android-adk.pdf》完成:安裝,新建工程,展開下載到的ADK包,內(nèi)有jar文件(路徑:C:SiliconLabsSimplicityStudiov4developersdksblemeshv1.3appbluetoothandroid),將符合藍(lán)牙Mesh的API接口導(dǎo)入,則可以進(jìn)行下一步開發(fā)。
            注意事項(xiàng)如下。
           ?、俟俜教峁┑腁pp為演示版本,其分組數(shù)目只分到4組,但藍(lán)牙Mesh標(biāo)準(zhǔn)是這樣描述的:“A groupaddress is a multicast address and can represent multiple elements on one or more nodes. There are 16384 group addresses per mesh network”,是可分多達(dá)16384組的,足夠任何場景使用。
           ?、谕瑯?,device ID在藍(lán)牙Mesh標(biāo)準(zhǔn)里是這樣描述的:“A unicast address is allocated to an element and always represents a single element of a node. There are 32767 unicast addresses per mesh network”,演示版本中只分到250個(gè)會(huì)重新開始分配。
           ?、鬯{(lán)牙Mesh標(biāo)準(zhǔn)支持客戶開發(fā)定制model,在圖形化配置界面里面進(jìn)行model修改和軟件配置,即可完成。
            如下是軟件修改:

                 //定義IDmodel

          my_model_t my_model = {
          .elem_index = PRIMARY_ELEMENT,
          .vendor_id = MY_VENDOR_ID,
          .model_id = MY_MODEL_CLIENT_
          ID,
          .publish = 1,
          .opcodes_len = 6,
          .opcodes_data[0] = temperature_
          get,
          .opcodes_data[1] = temperature_
          status,
          .opcodes_data[2] = unit_get,
          .opcodes_data[3] = unit_set,
          .opcodes_data[4] = unit_set_unack,
          .opcodes_data[5] = unit_status
          };

                 3 結(jié)論藍(lán)牙Mesh標(biāo)準(zhǔn)具有多對(duì)多的網(wǎng)絡(luò)拓?fù)?,可以滿足節(jié)點(diǎn)網(wǎng)絡(luò)里各種節(jié)點(diǎn)的通信需求,無需網(wǎng)關(guān),操作簡單,在各種操作終端中普遍配備的優(yōu)點(diǎn),配搭無連接推送和室內(nèi)定位功能,適合開發(fā)節(jié)點(diǎn)網(wǎng)絡(luò)。
            公司推出的藍(lán)牙Mesh SDK可以讓藍(lán)牙Mesh應(yīng)用變得非常簡單又靈活,EFR32BG13系列支持BT5.0,是Mesh Update模式的必要條件,故Labs公司的藍(lán)牙Mesh方案是開發(fā)藍(lán)牙Mesh產(chǎn)品的好選擇。

                 參考文獻(xiàn)
                 [1]Bluetooth Mesh Mesh Profile / Specification.
                 [2]QSG148: Getting Started with the Silicon Labs Bluetooth ? Mesh Lighting Demonstration.
                 [3]an1140-bluetooth-mesh-for-android-adk.
                 [4]官方教程《Vendor model examples》.
                 [5]efr32bg13-datasheet.
                 [6]efr32xg13-reference-manual.
                 [7]Bluetooth Mesh Networking Customer Friendly, July 2017.

          本文來源于科技期刊《電子產(chǎn)品世界》2019年第4期第72頁,歡迎您寫論文時(shí)引用,并注明出處



          關(guān)鍵詞: 201904 藍(lán)牙Mesh Silicon Labs

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();