此款空氣凈化器我使用的是Nordic的一款藍牙SOC-NRF52832,其不僅支持低功耗藍牙BLE,並且也對藍牙mesh網絡有著良好的支持。相信藍牙mesh網絡大傢並不陌生,其在物聯網領域以及智能傢居中都有著廣泛的應用,支持數量龐大的節點以及多種節點模型,完善且安全的協議都使得它一直以來都是此領域的香餑餑。在此文章中,我就來分享一下我對我的凈化器軟件層面上的一些更新,使其支持mesh網絡控制。
首先我需要註意的一點是,藍牙mesh使用的雖然還是BLE低功耗藍牙的協議棧,但是他和BLE設備之間是不能直接進行通信的,所以代碼上會有很大調整。在Nordic官網上,我們可以看到由Nordic提供針對mesh的SDK。
這個SDK有很多版本,下載較新版本的SDK比較好,可以體驗更多的功能,也方便後期的升級。這裡我使用的是SDK for mesh V4.2.0 這個版本中Nordic加入瞭一些常用的模型到SDK中,例如sensor以及DFU,詳情可見Nordic的更新簡介。
下載好瞭SDK for mesh 之後,還需要下載一下BLE的SDK包,因為之前我說過,mesh是基於BLE開發的,所以BLE的SDK包我們也需要,這裡我使用的是SDK16
由於Nordic提供的mesh工程是在SES下建立的,所以我預先在電腦中安裝好瞭SES,這裡不多贅述。下載這兩個文件之後,我在電腦中新建瞭一個文件夾,把這兩個文件放到瞭同一目錄下,接著打開瞭SDK for mesh的example文件夾,這裡面存放著許多例程,這裡我基於light-lightness例程來修改,以達到最終目的。
light-lightness例程實際上就是控制led亮度的一個例程,使用的pwm來控制led亮度,這其實和我的空氣凈化器需要的一路電機轉速控制很是類似,故我在這個例程上修改,添加其他模型。點開light-lightness文件夾之後,發現裡面還有兩個文件夾,一個是server一個是client,我們使用server來修改,點開之後打開NRF52832的SES工程,如下
觀察左側的工程樹,我們可以發現其實和BLE的工程還是有比較多的類似之處,各個層級分層目錄很是明顯,首先我編譯一下工程,發現沒有錯誤沒有警告。接著就可以開始修改例程瞭,首先我把OLED屏幕以及光線傳感器的代碼移植過來,在工程中新建一個文件夾放入代碼,並且添加對應的頭文件路徑。
接著修改一下pwm的對應引腳,由於在mesh工程中,pwm使用的是軟件pwm庫,所以pwm的引腳可以任意定義。這裡對應我的電路板,修改為第五腳
熟悉Nordic的SDK的同學應該都知道,大部分事情都是在回調函數中處理的,對於light-lightness模型,當模型的狀態更新的時候,會調用set_lightness_cb這個回調函數,於是我在回調函數中添加瞭一個轉速的顯示函數,用來在改變轉速的時相應的顯示。
編譯工程,然後接上jlink,點擊target工具欄下面的連接之後,依次執行擦除和下載指令,程序以及協議棧就會被下載到芯片當中瞭。下載完成後控制臺顯示如下
接著給電路板接上電源,手機上安裝NRF mesh軟件之後,就可以搜索到我的電路板的信號瞭,此時顯示屏也有瞭顯示數據。
此時的電路板處在未配網狀態,需要使用手機先對其進行配置,按照手機上的提示依次操作即可,配置好之後點開element目錄,發現其中有很多模型,點擊generic level server模型,綁定app key之後,就可以使用最下方的滑動條來控制電機轉速瞭。
下面我需要添加的是控制負離子發生器功能,其需要的控制量是開關量,所以我選擇添加一個最基本的模型:generic on-off。在工程中新建一個文件夾, 添加generic on-off模型的相關文件,添加好之後如下所示
由於新加入瞭模型,我們就需要修改一下配置頭文件,在工程樹中找到nrf_mesh_config_app.h文件,修改其中的ACCESS_MODEL_COUNT(模型總數)以及ACCESS_ELEMENT_COUNT(元素總數)以及ACCESS_SUBSCRIPTION_LIST_COUNT(訂閱列表)
修改好之後就可以在main.c文件中添加generic on-off模型的相關初始化以及回調函數瞭
由於需要傳輸pm2.5傳感器的數據,我還需要添加sensor模型,和以上添加generic on-off模型類似,添加sensor模型相關文件以及相關初始化以及回調函數,由於sensor模型的回調函數有很多,我用到的隻有一個,所有我隻貼上用到的那個回調函數的代碼,其餘函數都參考sensor例程編寫,並無改動。
由於pm2.5傳感器使用串口發送數據,還需要添加串口的相關代碼,並且在app_config.h函數中聲明相關外設的宏
接著在main.c文件的initialize函數中添加創建軟件定時器相關代碼,在其回調函數中周期性更新顯示數據以及發佈數據
編譯工程並且下載到電路板上,可以看到pm2.5數據顯示正常,重新對電路板進行配網之後,可以看到其中有瞭3個元素,新添加的generic on-off模型以及sensor模型都可以正常顯示。點擊generic on-off模型,綁定app-key之後,即可控制負離子發生器的開啟和關閉。
為瞭測試mesh通信是否正常,我制作瞭一個小的測試板,將其燒錄light-lightness的client工程以及配置之後,我們需要配置一下兩者的訂閱以及發佈地址。給電路板的light-lightness模型下添加一個訂閱組地址,以及給測試板的light-lightness模型下添加一個發佈組地址,註意兩者地址需要相同,接著就可以使用測試板的按鍵來控制空氣凈化器的電機轉速。
請先 登入 以發表留言。