《基于Python鴻蒙開(kāi)發(fā)板外設(shè)控制》直播圖文及答疑
想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
在鴻蒙設(shè)備上 Python 以原生 App 的形式存在,其職責(zé)是執(zhí)行 Python 腳本文件,并把對(duì)設(shè)備操作的請(qǐng)求傳遞到鴻蒙系統(tǒng),由系統(tǒng)執(zhí)行具體的操作,進(jìn)而達(dá)到“使用 Python 語(yǔ)言操作設(shè)備”的目的。


目前由于代碼版本差異和硬件廠商的定制化差異,Python 框架需要進(jìn)行適配才能按照預(yù)期的方式運(yùn)行(詳細(xì)適配步驟后續(xù)會(huì)以文檔方式給出)。隨著持續(xù)開(kāi)發(fā),最終適配好的版本可以完全屏蔽 C 語(yǔ)言的開(kāi)發(fā)方式,使用 Python 實(shí)時(shí)對(duì)代碼進(jìn)行解釋執(zhí)行。

Python 框架以靜態(tài)庫(kù)的形式提供,因此可通過(guò) API 將 Python 代碼集成到 C 源碼中。同時(shí),也是因?yàn)檫@些 API 的存在,后續(xù)我就可以開(kāi)發(fā)專用的 Python 任務(wù),動(dòng)態(tài)解釋執(zhí)行 Python 代碼。如何動(dòng)態(tài)執(zhí)行?嗯。。。 REPL 在路上了!!!

這是一個(gè)多文件 Python 腳本示例。目前在開(kāi)發(fā)板上支持了多個(gè) Python 文件的相互依賴,比如:test.py 調(diào)用 another.py 中的代碼。對(duì)于熟悉 Python 編程的同學(xué)來(lái)說(shuō)這本身是一件很正常的事,然而,在鴻蒙 L0 級(jí)別的設(shè)備(資源受限設(shè)備)中需要花一些功夫定制支持這個(gè)特性。





Python 接口提供了 GPIO 編程的能力,詳見(jiàn)帖子《使用Python開(kāi)發(fā)鴻蒙設(shè)備程序(1-GPIO外設(shè)控制)》。




Python 接口提供了 I2C 編程的能力,詳見(jiàn)帖子《使用Python開(kāi)發(fā)鴻蒙設(shè)備程序(2-I2C應(yīng)用實(shí)例)》。
直播答疑:
1. Python 也很容易讀,與 C 比較哪個(gè)更容易?
答:從語(yǔ)言的角度,Python 比 C 更容易學(xué)習(xí)和掌握,因此使用 Python 開(kāi)發(fā)設(shè)備的難度要比使用 C 語(yǔ)言低很多,簡(jiǎn)而言之就是:使用 Python 更容易上手。
2. 唐老師,這個(gè) Python 引擎是你自己開(kāi)發(fā)的嗎?
答:這個(gè) Python 框架的語(yǔ)言解釋器取自 MicroPython-v1.13 。我在解釋器的基礎(chǔ)做了鴻蒙系統(tǒng)的適配進(jìn)而可以進(jìn)行設(shè)備開(kāi)發(fā)。Python 解釋器不是我開(kāi)發(fā)的,但是整個(gè) Python 框架是我設(shè)計(jì)開(kāi)發(fā)的,包括后續(xù)的一些列工具鏈,也會(huì)由我開(kāi)發(fā)完成。
3. 老師回調(diào)函數(shù)怎么支持多參數(shù)?
答:Python 版本的回調(diào)函數(shù)參數(shù)可以是對(duì)象,比如:list 對(duì)象。因此,只要把需要的多個(gè)參數(shù)存入一個(gè) list 對(duì)象,然后將這個(gè) list 對(duì)象作為回調(diào)參數(shù)使用即可。
4. import gpio 能否改成類似樹(shù)莓派的導(dǎo)入 import RPi.GPIO ,比如 import HOS.GPIO,這樣在未來(lái)能知道是鴻蒙的 gpio 庫(kù)。
答:這個(gè) Python 框架專為鴻蒙 L0 設(shè)備開(kāi)發(fā)的,沒(méi)有移植到其它系統(tǒng)的打算。所以,所有庫(kù)都是為鴻蒙而開(kāi)發(fā)的。另外,大家現(xiàn)在看到的接口都只是我設(shè)計(jì)規(guī)劃中的底層 Python 接口,使用上還稍顯繁瑣;后續(xù),我會(huì)開(kāi)發(fā)上層面向?qū)ο蟮慕涌?,使用起?lái)更加的輕松愉快。
5. 老師,不能實(shí)時(shí)執(zhí)行 Python 嗎?
答:可以,相關(guān)接口已經(jīng)提供了,如:DTPython_RunCode(const char* code) ,只需要開(kāi)發(fā)一個(gè) REPL 命令行工具就可以有實(shí)時(shí)執(zhí)行 Python 代碼的體驗(yàn)了,而這個(gè) REPL 命令行工具的開(kāi)發(fā)稍后會(huì)啟動(dòng)。
6. 唐老師,支持 Pygame 或 Turtle 嗎?結(jié)合外設(shè)可以做非常炫酷的外設(shè)硬操作游戲或傳感,呈現(xiàn)一體的軟件。
答:鴻蒙 L0 設(shè)備的能力比較有限,目前主要作為數(shù)據(jù)采集器以及外設(shè)主控板使用,沒(méi)法做太多炫酷的東西,并且這類庫(kù)對(duì)資源需求大,L0 設(shè)備沒(méi)法支持。如果真要做這類東西,可以考慮富鴻蒙設(shè)備(如:Hi3516),在這類設(shè)備上可以實(shí)現(xiàn)很多炫酷效果。
7. GPIO 底層是調(diào)用 OHOS 什么接口?
答:Python 中的 GPIO 接口會(huì)適配到鴻蒙本地 GPIO 接口上,即:最終調(diào)用 iot_gpio.h 定義的函數(shù)。
8. Python 鴻蒙如何實(shí)現(xiàn)遠(yuǎn)程升級(jí)?
答:如果是升級(jí) Python 代碼,那么直接遠(yuǎn)程下載 Python 文件即可實(shí)現(xiàn)升級(jí)。
9. 發(fā)布產(chǎn)品后,如何保證 Python 源代碼不外泄?
答:Python 源碼最終存儲(chǔ)于設(shè)備的 Flash 中,最終的產(chǎn)品只要不提供對(duì)外的調(diào)試接口,那么就沒(méi)法直接拿到源碼,除非強(qiáng)制對(duì)產(chǎn)品進(jìn)行逆向才有可能。當(dāng)然,可以考慮采用加密 Python 源碼的方式防止外泄。
10. 鴻蒙開(kāi)發(fā)有沒(méi)有什么低成本的深度學(xué)習(xí)視覺(jué)開(kāi)發(fā)板?Hi3516 價(jià)格 1000 左右有點(diǎn)貴,別家同類開(kāi)發(fā)板比要便宜很多,比如K210只要200左右。
答:目前支持視覺(jué)的富鴻蒙開(kāi)發(fā)板確實(shí)只有 Hi3516 一種,但是隨著適配鴻蒙的硬件廠商越來(lái)越多,相信適合大家使用的高性價(jià)比視覺(jué)開(kāi)發(fā)板會(huì)陸續(xù)出現(xiàn)。
文章相關(guān)附件可以點(diǎn)擊下面的原文鏈接前往下載
https://harmonyos.51cto.com/resource/1265
想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)