首頁 > 評測 > BLE 5遇見96Boards——BLE Nitrogen評測
BLE 5遇見96Boards——BLE Nitrogen評測
- [導讀]
- 雖然是一個小板子,但是受到了我們的關(guān)注,有幾個重要的點:1-這是一款96boards, 2-搭載了Nordic nRF52832實現(xiàn)BLE5的功能,3-使用Zephyr做為開發(fā)環(huán)境。不過BLE Nitrogen的GPIO口采用1.8V輸出,這是我們的一個黑點。。。
#ifndef LED0_GPIO_CONTROLLER
#define LED0_GPIO_CONTROLLER LED0_GPIO_PORT
#endif
#define LED_PORT LED0_GPIO_CONTROLLER
/* Change this if you have an LED connected to a custom pin */
#define LED LED0_GPIO_PIN
/* 1000 msec = 1 sec */
#define SLEEP_TIME 1000
void main(void)
{
int cnt = 0;
struct device *dev;
dev = device_get_binding(LED_PORT);
/* Set LED pin as output */
gpio_pin_configure(dev, LED, GPIO_DIR_OUT);
while (1) {
/* Set pin to HIGH/LOW every 1 second */
gpio_pin_write(dev, LED, cnt % 2);
cnt++;
k_sleep(SLEEP_TIME);
}
}
這段代碼掩蓋了太多的細節(jié)!
RTOS體現(xiàn)在哪里?多任務(wù)是怎么實現(xiàn)的?Zephyr使用類似內(nèi)核編譯的模式,將大部分細節(jié)都隱藏在底層,用戶只需要關(guān)心自己要實現(xiàn)的任務(wù)即可。這一點可以使用如下的命令行來得到驗證
make BOARD=Nitrogenmenuconfig
這樣會得到一個菜單式的配置工具,如下
與硬件配置相關(guān)的操作都可以在里面選擇,然后得到一個.config文件,接下來使用make就可以根據(jù)用戶設(shè)置進行編譯并到最終的elf及hex文件。
然而這里并沒有牽涉到線程的配置,默認情況下,Zephyr為我們生成兩個線程,一個idle線程和一個main線程,可以在代碼中使用KTHREADDEFINE 來定義一個新線程,其函數(shù)原型如下
K_THREAD_DEFINE(name, stack_size, entry, p1, p2, p3, prio, options, delay)
如果要定義多個線程,可以參考如下代碼
K_THREAD_DEFINE(blink1_id, STACKSIZE, blink1, NULL, NULL, NULL,
PRIORITY, 0, K_NO_WAIT);
K_THREAD_DEFINE(blink2_id, STACKSIZE, blink2, NULL, NULL, NULL,
PRIORITY, 0, K_NO_WAIT);
K_THREAD_DEFINE(blink3_id, STACKSIZE, blink3, NULL, NULL, NULL,
PRIORITY, 0, K_NO_WAIT);
為了體驗一下,我們嘗試將代碼修改如下
/*
* Copyright (c) 2016 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#include
#include
#include
#include
/* Change this if you have an LED connected to a custom port */
#ifndef LED0_GPIO_CONTROLLER
#define LED0_GPIO_CONTROLLER LED0_GPIO_PORT
#endif
#define LED_PORT LED0_GPIO_CONTROLLER
/* Change this if you have an LED connected to a custom pin */
#define LED LED0_GPIO_PIN
/* 1000 msec = 1 sec */
#define SLEEP_TIME 2000
void main(void)
{
while(1) {
k_sleep(100);
}
}
void blink(void) {
int cnt = 0;
struct device *dev;
dev = device_get_binding(LED_PORT);
/* Set LED pin as output */
gpio_pin_configure(dev, LED, GPIO_DIR_OUT);
while (1) {
/* Set pin to HIGH/LOW every 1 second */
gpio_pin_write(dev, LED, cnt % 2);
cnt++;
k_sleep(SLEEP_TIME);
}
}
K_THREAD_DEFINE(blink_id, 512, blink, NULL, NULL, NULL,
7, 0, K_NO_WAIT);
只是一個簡單的修改,將原來main里的代碼放到新定義的線程中去,main里面什么也沒有做。
編譯并上傳到開發(fā)板,發(fā)現(xiàn)LED還是按我們的要求開始閃爍了!
然而這只不過是冰山一角,Zephry里面還有更多的細節(jié)需要我們?nèi)ヌ剿。不過接下來我們要開始體驗BLE功能了,示例里的bluetooth目錄下包含大量的演示程序,我們選擇peripheral_dis來查看下實際運行的效果。
代碼就不再貼出來了,實際運行的效果我們通過nRF Connect手機APP來查看,如下
找到的設(shè)備,連接后可以通過APP來讀取要顯示的字符串
可以看到正確讀取了開發(fā)板通過BLE提供的字符串信息。
下圖顯示的是讀取另一個例程peripheral_hr的信息
該程序通過模擬心率數(shù)據(jù)并暴露給Central設(shè)備,通過Notify的方式連續(xù)顯示。
BLE Nitrogen為我們帶來全新的BLE 5的體驗,雖然在我們的體驗過程中,BLE5的優(yōu)勢并沒充分體現(xiàn)出來,然而BLE更高傳輸率及更遠的傳輸距離,必定會給基于BLE5的產(chǎn)品帶來更好的體驗。使用Zephyr做為開發(fā)環(huán)境,在社區(qū)強大的動力之下,必然也會為開發(fā)者帶來更強有力的保障及更快的開發(fā)速度。
只是由于目前BLE Nitrogen提供的API接口仍然只專注于BLE部分,其它如GPIO、I2C等接口仍然沒有完全添加進來,要使用這些功能還得等待或自行添加,對開發(fā)者來說,算是一個不好的消息!不過Zephyr向來都號召大家為Zephyr添磚加瓦,也許很快就會有了我們需要的功能!
另外也有人對96Boards的1.8V破多非議,難道真的只是為了低功耗?
- 本文系21ic原創(chuàng),未經(jīng)許可禁止轉(zhuǎn)載!
網(wǎng)友評論
- 聯(lián)系人:巧克力娃娃
- 郵箱:board@21ic.com
- 我要投稿
-
歡迎入駐,開放投稿
-
人均百萬?英偉達中國員工收入曝光! 2024-08-29
-
《黑神話:悟空》玩家硬盤升級攻略:提升游戲體驗,暢享3A大作 2024-08-29
-
數(shù)睿數(shù)據(jù)參加《系統(tǒng)與軟件工程 低代碼開發(fā)平臺通用技術(shù)要求》國家標準編制 2024-08-29
- NRF52810藍牙數(shù)字耳機找人定制
預(yù)算:¥30005天前
- 125KW模塊式PCS軟硬件外包開發(fā)
預(yù)算:¥1100000015小時前
- 12V汽車啟動電源項目BMS設(shè)計
預(yù)算:¥50000023小時前
- 數(shù)據(jù)可視化軟件 開發(fā)
預(yù)算:¥5000023小時前
- PLC項目調(diào)試修改
預(yù)算:¥100001天前
- 起動電機控制器開發(fā)
預(yù)算:¥1100001天前