前言: 自己一直是板端開發也就是南向開發,對于北向應用端開發一直是個短板,九聯提供的開發板對南北向開發過程提供了樣例,非常感興趣這一部分,如何實現,下面就自己根據樣例實現開發板上使用APP控制板端接口來學習。下面根據Openharmony NAPI框架實現GPIO接口。
一、開發環境
以上除4部分,其他都在前面的帖子中搭建完成。第4部分自己準備幾根杜邦線和幾個LED燈。
二、NAPI框架簡介
NAPI(Native API)是OpenHarmony標準系統的一種JS API實現機制,適合封裝IO、CPU密集型、OS底層等能力并對外暴露JS接口,實現JS與C/C++代碼互相訪問。

三、實現NAPI擴展庫
1、創建NAPI擴展庫
新增子系統napisubsys在OpenHarmony源碼目錄下創建一個目錄napisubsys作為子系統目錄(子系統可以在OpenHarmony源碼目錄任意位置),目前創建在九聯開發板目錄下sample/napi目錄下,具體相對OpenHarmony目錄為vendor/unionman/unionpi_tiger/sample/napi/napisubsys,在創建的目錄下新建ohos.build文件,構建時會先讀取這個文件。將新增子系統配置到OpenHarmony目錄下的build/subsystem_config.json文件中參與編譯。subsystem_config.json增加如下代碼:
"napisubsys": {
"path": "vendor/unionman/unionpi_tiger/sample/napi/napisubsys",
"name": "napisubsys"
},
(左右移動查看全部內容)
2、新增gpioled_part組件
在子系統napisubsys目錄下創建一個子組件目錄gpioled_part,打開napisubsys目錄下的ohos.build文件,在"parts":中添加下列語句:
"gpioled_part": {
"variants": [
"phone"
],
"module_list": [ "http://vendor/unionman/unionpi_tiger/sample/napi/napisubsys/gpioled_part/gpioled_demo:gpioled"
]
}
(左右移動查看全部內容)
3、新增擴展動態庫
在組件目錄gpioled_part下面新建gpioled_demo目錄,作為NAPI擴展庫的代碼目錄。在gpioled_demo目錄下創建gpioled.cpp和BUILD.gn文件,編寫構建配置也即BUILD.gn文件內容如下:
import("http://build/ohos.gni")
ohos_shared_library("gpioled") {
include_dirs = [ "http://foundation/ace/napi/interfaces/kits" ]
sources = [
"gpioled.cpp",
"um_gpio.c",
]
deps = [
"http://foundation/ace/napi:ace_napi",
"http://utils/native/base:utils",
]
external_deps = [ "hiviewdfx_hilog_native:libhilog" ]
relative_install_dir = "module"
subsystem_name = "napisubsys"
part_name = "gpioled_part"
}
(左右移動查看全部內容)
4、將組件添加到產品定義中
打開vendor/unionman/unionpi_tiger/config.json文件,在“subsystems”:中添加如下語句:
{
"subsystem": "napisubsys",
"components": [
{
"component": "gpioled_part",
"features": []
}
]
},
(左右移動查看全部內容)
四、NAPI接口開發
模塊注冊
1)添加NAPI框架頭文件,引入框架提供的方法。
(左右移動查看全部內容)
2)定義模塊。
3)注冊模塊,加載動態庫時自動調用注冊。
/*
* 模塊定義
*/
static napi_module gpioled_demoModule = {
.nm_version = 1,
.nm_flags = 0,
.nm_filename = nullptr,
.nm_register_func = registerGpioLed_DemoApis,
.nm_modname = "gpioled_demo", //模塊名
.nm_priv = ((void *) 0),
.reserved = {0},
};
/*
* 注冊模塊
*/
extern "C" __attribute__((constructor)) void RegisterGpioLed_DemoModule(void) {
napi_module_register(&gpioled_demoModule); //接口注冊函數
}
(左右移動查看全部內容)
使用DECLARE_NAPI_FUNCTION("js函數名", c++實現函數名)定義接口函數、DECLARE_NAPI_PROPERTY、 DECLARE_NAPI_STATIC_PROPERTY等定義屬性,再通過napi_define_properties賦給exports對象,最后返回exports對象。
/*
* 注冊接口
*/
static napi_value registerGpioLed_DemoApis(napi_env env, napi_value exports) {
napi_value gpioValHigh = gpioValHigh;
napi_value gpioValLow = nullptr;
napi_create_int32(env, UM_GPIO_HIGH_LEVE, &gpioValHig);
napi_create_int32(env, UM_GPIO_LOW_LEVE, &gpioValLow);
napi_property_descriptor desc[] = {
DECLARE_NAPI_FUNCTION("setLedStatusWithCallback", setLedStatusWithCallback),
DECLARE_NAPI_FUNCTION("getLedStatusWithCallback", getLedStatusWithCallback),
DECLARE_NAPI_FUNCTION("setLedStatusWithPromise", setLedStatusWithPromise),
DECLARE_NAPI_FUNCTION("getLedStatusWithPromise", getLedStatusWithPromise),
DECLARE_NAPI_FUNCTION("setLedStatus", setLedStatus),
DECLARE_NAPI_FUNCTION("getLedStatus", getLedStatus),
DECLARE_NAPI_STATIC_PROPERTY("LED_ON", gpioValHigh),
DECLARE_NAPI_STATIC_PROPERTY("LED_OFF", gpioValLow),
};
NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
return exports;
}
(左右移動查看全部內容)
具體實現代碼可去代碼倉庫進行下載學習。
修改deviceoardunionmanunionpi_tigerconfiginitarminit.A311D.cfg 文件,在cmds中添加相關命令
"write /sys/class/gpio/export 380",
"write /sys/class/gpio/export 381",
"write /sys/class/gpio/export 382",
"write /sys/class/gpio/export 383",
"write /sys/class/gpio/export 384",
"write /sys/class/gpio/export 385",
"write /sys/class/gpio/export 386",
"write /sys/class/gpio/export 387",
"write /sys/class/gpio/export 388",
"write /sys/class/gpio/export 389",
"chmod 666 /sys/class/gpio/gpio380/direction",
"chmod 666 /sys/class/gpio/gpio381/direction",
"chmod 666 /sys/class/gpio/gpio382/direction",
"chmod 666 /sys/class/gpio/gpio383/direction",
"chmod 666 /sys/class/gpio/gpio384/direction",
"chmod 666 /sys/class/gpio/gpio385/direction",
"chmod 666 /sys/class/gpio/gpio386/direction",
"chmod 666 /sys/class/gpio/gpio387/direction",
"chmod 666 /sys/class/gpio/gpio388/direction",
"chmod 666 /sys/class/gpio/gpio389/direction",
"chmod 666 /sys/class/gpio/gpio380/value",
"chmod 666 /sys/class/gpio/gpio381/value",
"chmod 666 /sys/class/gpio/gpio382/value",
"chmod 666 /sys/class/gpio/gpio383/value",
"chmod 666 /sys/class/gpio/gpio384/value",
"chmod 666 /sys/class/gpio/gpio385/value",
"chmod 666 /sys/class/gpio/gpio386/value",
"chmod 666 /sys/class/gpio/gpio387/value",
"chmod 666 /sys/class/gpio/gpio388/value",
"chmod 666 /sys/class/gpio/gpio389/value"
(左右移動查看全部內容)
五、Ubuntu下進行編譯NAPI
將以上文件修改完成后,編譯鏡像文件,前面帖子中已有編譯方法,自行查閱,如有問題帖子留言,我會進行回答。進入到Ubuntu下進行編譯,編譯指令如下:
./build.sh --product-name unionpi_tiger –ccache
(左右移動查看全部內容)
編譯完成如下圖所示:

編譯完成后需要,進行對鏡像進行打包,然后進行燒寫。執行以下命令固件打包
./device/board/unionman/unionpi_tiger/common/tools/packer-unionpi.sh
(左右移動查看全部內容)
打包完成如下圖所示,打包最終燒錄程序目錄為out/unionpi_tiger/packages/phone/images/OpenHarmony.img

打開燒錄工具,使用Micro USB數據線連接PC與開發板OTG口并接通電源,導入燒錄包后開始燒錄即可(可關閉校驗IMG)。具體如何燒錄可參考我的其他博文。
六、應用程序編譯
打開DevEco Studio 3.0.0.993版本的軟件,打開vendor_unionman/unionpi_tiger/sample/app/gpioled_app/gpioled-javascript目錄,如下圖所示程序代碼。

將目錄vendor_unionman/unionpi_tiger/sample/napi/napisubsys下的@ohos.gpioled.d.ts文件拷貝到OpenHarmony的SDK下面,如圖所示具體路徑:

設置自動簽名,如圖所示:

編譯Hap文件,如下圖所示:

將編譯后的hap文件拷貝到USB中,因SDK中的hdc_std.exe不運行,用USB安裝應用程序了,文件如下圖所示,可自行修改文件名。

七、板端安裝應用控制LED燈
將USB插入USB3.0接口,串口端顯示如下所示:

掛載/dev/block/sda1到/mnt/usb目錄,如果沒有/mnt/usb目錄進行自建,運行如下命令進行安裝hap,如圖所示:
bm install -p 包名.hap
(左右移動查看全部內容)

安裝后屏幕界面如圖所示:

連接GPIO_05到LED的正極,如下圖所示:

打開gpioled的app運行如視頻所示。
弄了hdc_std.exe,但它不運行,有問題。正在查找問題。有了hdc,直接連接板子OTG將hap運行到板子上看app效果,可以看調試信息,一口兩用。
提示:本文由電子發燒友社區發布,轉載請注明以上來源。如需社區合作及入群交流,請添加微信EEFans0806,或者發郵箱liuyong@huaqiu.com。
更多熱點文章閱讀
- 鴻湖萬聯產品推薦官招募!啟鴻OpenHarmony開發板免費體驗
- 小河貍創客格物開發板體驗:智能升降車
- 全球首家支持OpenHarmony的3D引擎,Cocos Creator 3.6.1社區版發布
- ROC-RK3568-PC開發板體驗:網絡數據傳輸性能測試
- ROC-RK3568-PC開發板OpenWRT系統初體驗
END
想了解更多開源技術?后臺留言,立刻安排!就喜歡獎勵一個“”和“在看”唄~
原文標題:基于OpenHarmony NAPI框架控制板端LED
文章出處:【微信公眾號:電子發燒友開源社區】歡迎添加關注!文章轉載請注明出處。
-
led
+關注
關注
243文章
24596瀏覽量
690858 -
NAPIT
+關注
關注
0文章
2瀏覽量
2258 -
OpenHarmony
+關注
關注
33文章
3952瀏覽量
21102
原文標題:基于OpenHarmony NAPI框架控制板端LED
文章出處:【微信號:HarmonyOS_Community,微信公眾號:電子發燒友開源社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
使用NAPI實現openharmony APP網絡開發的接口
如何通過OpenHarmony系統中集成的ffmpeg庫和NAPI機制,實現更多的多媒體功能?
【潤和軟件DAYU200開發板體驗】三方庫移植之NAPI開發[1]—Hello OpenHarmony NAPI
【九聯科技Unionpi Tiger開發板試用體驗】基于OpenHarmony NAPI框架控制板端LED
OpenHarmony之NAPI框架介紹
遙控LED數碼顯示屏控制板的應用制作
控制板是什么_控制板的作用是什么
FANSEA泛海微單片機MCU芯片LED化妝鏡控制板開發
【潤和軟件DAYU200開發板體驗】三方庫移植之NAPI開發[1]—Hello OpenHarmony NAPI
教程分享!OpenHarmony之NAPI框架介紹
鴻蒙OpenHarmony NAPI技術-基礎學習
OpenHarmony 之 NAPI 框架介紹
基于OpenHarmony NAPI框架控制板端LED
評論