偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

2020征文-開(kāi)發(fā)板 基于鴻蒙Hi3861平臺(tái)的HarmonyOS Device開(kāi)發(fā)體驗(yàn)

系統(tǒng) OpenHarmony
此篇應(yīng)是 Copy 攻城獅 2020 年最后一個(gè)”Hello,World“--基于 Harmony OS 的 Hi3861 開(kāi)發(fā)板進(jìn)行物聯(lián)網(wǎng)應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)。Copy 攻城獅的“Hello World”之路從來(lái)都不是一帆風(fēng)順的,此次嘗試開(kāi)(拷)發(fā)(貝)物聯(lián)網(wǎng)應(yīng)用也走了不少?gòu)澛?,最后終于跑通了蜂鳴器版的《Jingle Bells》.

[[357782]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com/#zz

"剩蛋老人"哼著”金顧拜“來(lái)了HarmonyOS Device 開(kāi)發(fā)體驗(yàn)

大家好,我是不務(wù)正業(yè)的非著名 Copy 攻城獅,此篇應(yīng)是 Copy 攻城獅 2020 年最后一個(gè)”Hello,World“--基于 Harmony OS 的 Hi3861 開(kāi)發(fā)板進(jìn)行物聯(lián)網(wǎng)應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)。Copy 攻城獅的“Hello World”之路從來(lái)都不是一帆風(fēng)順的,此次嘗試開(kāi)(拷)發(fā)(貝)物聯(lián)網(wǎng)應(yīng)用也走了不少?gòu)澛?,最后終于跑通了蜂鳴器版的《Jingle Bells》.

環(huán)境搭建篇

編程界有個(gè)傳承了幾十年的”規(guī)矩“--入門先從環(huán)境搭建開(kāi)始,有的時(shí)候環(huán)境搭建比較簡(jiǎn)單,比如學(xué)習(xí) HTML 編程,有瀏覽器就行;有時(shí)候又比較繁瑣,比如 React Native 開(kāi)發(fā),需要安裝 NodeJS、Python、Java、Android SDK……而 HarmonyOS Device 開(kāi)發(fā)屬于后者,環(huán)境搭建比較繁瑣,比如需要 Linux 系統(tǒng)進(jìn)行編譯,燒錄到設(shè)備時(shí)又需要用到 Windows。如果您還想體驗(yàn) Wifi 模組或者“碰一碰”等其他功能,還需要提供熱點(diǎn)及其他設(shè)備。HarmonyOS 官方提供了詳細(xì)的環(huán)境搭建文檔以及 Hi3861 開(kāi)發(fā)板介紹理論上跟著文檔走一遍就能正常運(yùn)行“Hello,HarmonyOS Device”。


盡管如此,不過(guò)每個(gè)人的開(kāi)發(fā)習(xí)慣或者工具口味不一樣,因此在實(shí)際搭建環(huán)境的時(shí)候還是會(huì)和官方文檔有些不一樣的地方。由于手頭有點(diǎn)乞丐版的云主機(jī)資源,因此我選擇將他們派上用場(chǎng),用 Linux 的云主機(jī)作為編譯機(jī),在本地的 Window 10 電腦上安裝 SFTP Drive 將 Linux 云主機(jī)掛載到本機(jī),使得燒錄的時(shí)候能直接讀取到 Linux 上的文件;通過(guò) VSCode 的 Remote SSH 擴(kuò)展以及 HUAWEI DevEco Device Tool 擴(kuò)展來(lái)開(kāi)發(fā)調(diào)試代碼,此外通過(guò)某大佬分享的 sscom 串口調(diào)試工具進(jìn)行更加便捷的調(diào)試。如果您恰好和我一樣的情況,或者您也想嘗試一下我的搭建思路,那我們就開(kāi)始吧!

1. Windows 環(huán)境(開(kāi)發(fā)、調(diào)試、燒錄)

在 Windows 上,因?yàn)樯婕暗介_(kāi)發(fā)調(diào)試,因此我們需要安裝 VS Code 及擴(kuò)展(也就是插件)、SFTP Drive(燒錄時(shí)用來(lái)直接訪問(wèn) Linux 上的文件)、CH341SER.EXE(USB 轉(zhuǎn)串口驅(qū)動(dòng))、sscom(可選,方面連接串口調(diào)試)。我這邊本地已經(jīng)安裝了 VS Code 就不過(guò)多贅述,相信大家都安裝了,從我接觸過(guò)的幾個(gè)軟硬件開(kāi)發(fā)教程都推薦安裝 VS Code,真香!

1.1 Remote - SSH和 SFTP Drive

可能大家會(huì)有疑問(wèn),這兩個(gè)玩意都是訪問(wèn)遠(yuǎn)程主機(jī)上文件的,裝一個(gè)就行了吧?剛開(kāi)始我也有同樣的想法,后來(lái)在實(shí)操中發(fā)現(xiàn):如果只安裝 Remote - SSSH,燒錄配置時(shí)無(wú)法讀取遠(yuǎn)程文件;如果只安裝 SFTP Drive,在編輯代碼時(shí)訪問(wèn)遠(yuǎn)程文件非常慢;在座的給位大佬有好的方案的話一定要傳授一下哦。我這里安裝的是 Remote - SSH,如果您想體驗(yàn)更多的功能,可以直接安裝 Remote Development,Remote 系列是巨硬公司針對(duì)遠(yuǎn)程開(kāi)發(fā)而開(kāi)發(fā)的擴(kuò)展。安裝完 Remote - SSH 之后,為了免密碼登錄 Linux(有風(fēng)險(xiǎn)需謹(jǐn)慎),我們需要操作一下 SSH 密鑰配置。


在 VSCode 的 Remote 擴(kuò)展和 SFTP Drive 中先通過(guò)賬號(hào)密碼訪問(wèn)遠(yuǎn)程主機(jī),確保能正常訪問(wèn)到 Linux 主機(jī)中的代碼和文件。

SSH 密鑰配置的時(shí)候,我們可以在遠(yuǎn)程主機(jī)上生成密鑰,也可以在本機(jī)生成密鑰,最終將配置關(guān)聯(lián)就可以。我們這里采用的是 Windows 機(jī)使用 PowerShell 執(zhí)行`ssh-keygen`生成密鑰到文件`C:\Users\您的用戶名\.ssh\id_rsa`(私鑰),同時(shí)會(huì)生成文件`C:\Users\您的用戶名\.ssh\id_rsa.pub`(公鑰),通過(guò) SFTP Drive 拷貝公鑰到遠(yuǎn)程主機(jī)的`~/.ssh`目錄,在 VSCode 中連接遠(yuǎn)程主機(jī)執(zhí)行命令`cat id_rsa.pub >> authorized_keys`追加到 authorized_keys 中,由于我本機(jī)已經(jīng)有了公鑰私鑰,直接拿來(lái)用即可。

此步需注意的是:

  1. cd ~/.ssh 
  2. cat id_rsa.pub >> authorized_keys #追加公鑰 
  3. sudo chmod 600 authorized_keys 
  4. sudo chmod 700 ~/.ssh #文件及文件夾加權(quán)限 
  5. sudo vim /etc/ssh/sshd_config #準(zhǔn)備修改sshd配置 
  6. # PubkeyAuthentication yes 確保此處注釋放開(kāi) 
  7. sudo service sshd restart #重啟sshd 

 

完事之后關(guān)閉 VSCode 再打開(kāi),不出意外再連接遠(yuǎn)程主機(jī)就不需要輸入訪問(wèn)密碼了,徹底告別每次連接都要輸密碼的煩惱。

1.2 HUAWEI DevEco Device Tool 及依賴安裝

HUAWEI DevEco Device Tool可以理解為是 HarmonyOS Device 的開(kāi)發(fā)工具,“HarmonyOS 智能設(shè)備一站式集成開(kāi)發(fā)環(huán)境,支持 HarmonyOS 組件按需定制、一鍵編譯和燒錄、可視化調(diào)試、分布式能力集成等,幫助開(kāi)發(fā)者高效開(kāi)發(fā)和創(chuàng)新新硬件”。

官網(wǎng):https://device.harmonyos.com/cn/ide,目前只支持 Windows,這也是為什么我們需要用到 Windows 本機(jī)的原因!另外 HUAWEI DevEco Device Tool 沒(méi)有上架到 VSCode 擴(kuò)展市場(chǎng),只能通過(guò)**從 VSIX 安裝**的方式進(jìn)行安裝,也就是說(shuō)我們需要解壓從官網(wǎng)下載的安裝包,另外將`.vsix`文件后綴修改為`.zip`解壓有驚喜哦 -- 在 DevEcoDeviceTool/extension/deveco/tool 您能得到 HiBurn.exe ,這個(gè)程序就可以用來(lái)燒錄(相當(dāng)于不使用 VSCode 的擴(kuò)展在程序中配置燒錄參數(shù)直接燒錄)。


根據(jù)官方文檔的指引,我們還需要:

  • - 安裝 Node.js(盡量別裝最新的)
  • - 安裝 JDK
  • - 安裝 hpm
  • - 安裝 VSCode C/C++擴(kuò)展
  • - 安裝 CH341SER.EXE
  • - 安裝 Jlink 工具(可選,V6.54c 及以上版本)
  • - 安裝 hcc_riscv32(這個(gè)我沒(méi)裝成功,所以調(diào)試全靠手打)

鑒于前期跑過(guò)“Hello, HarmonyOS”(因此才獲得的開(kāi)發(fā)板),大部分環(huán)境我都有,不過(guò)在安裝 Jlink 工具的時(shí)候卡了很久,主要是網(wǎng)絡(luò)的問(wèn)題,導(dǎo)致下載的文件不全,好在想方設(shè)法終于下好了,又在安裝 hcc_riscv32 時(shí)卡住了,幸好不是關(guān)鍵,索性放棄!……費(fèi)了九牛二虎之力,終于完成 Windows 部分的環(huán)境搭建,可以直接燒錄別人編譯好的程序了!


2. Linux 環(huán)境(編譯)

相比 Windows 環(huán)境,HarmonyOS Device Linux 的環(huán)境搭建顯得微不足道,跟著文檔走一遍就完事了。不過(guò),經(jīng)過(guò)實(shí)操,如果您是 Ubuntu 18.04,我更加推薦潤(rùn)和許老師的文檔--Harmony OS 開(kāi)發(fā)指南——源碼下載和編譯。如果您和我一樣還想嘗試一下在 CentOS 上搭建環(huán)境,那就推薦鴻蒙社區(qū)的文章--在 CentOS 中安裝鴻蒙 LiteOS 編譯環(huán)境-海思 Hi3861,同樣的也只取我需要的--我只需要編譯部分的環(huán)境搭建。我的云主機(jī)操作系統(tǒng)是 CentOS 7.6 64 位,和博主的大同小異,按照文章中的命令行逐個(gè)敲完再去編譯就一把過(guò)。


老話說(shuō)得好:"If I have seen further, it is by standing upon the shoulders of giants",于是我結(jié)合許老師和社區(qū)文章完成了 HarmonyOS 在 CentOS 上的編譯環(huán)境搭建。

2.1 源碼獲取(其中的一種方法)

  1. ```bash 
  2. # 配置repo工具 
  3. mkdir ~/bin/ 
  4. # sudo apt install curl # 如果沒(méi)有curl命令需要先下載 
  5. curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > ~/bin/repo 
  6. chmod +x ~/bin/repo 
  7. echo 'export PATH=~/bin:$PATH'  >> ~/.bashrc 
  8. source ~/.bashrc 
  9. ``` 

 

  1. ```bash 
  2.  
  3. # 下載Harmony OS源碼 
  4.  
  5. mkdir -p ~/harmonyos/openharmony && cd ~/harmonyos/openharmony 
  6.  
  7. sudo apt install --no-install-recommends git python # repo工具本身是python腳本,它會(huì)調(diào)用git命令下載單個(gè)代碼倉(cāng) 
  8.  
  9. # 開(kāi)始前需要配置`user.name`和`user.email`,如果沒(méi)有配置,使用如下命令進(jìn)行配置: 
  10.  
  11. # git config --global user.name "yourname" 
  12.  
  13. # git config --global user.email "your-email-address" 
  14.  
  15. repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify 
  16.  
  17. repo sync -c # 以后每天同步遠(yuǎn)程倉(cāng)的修改,只需要執(zhí)行這一條命令即可 
  18.  
  19. ``` 

 

2.2 安裝編譯基礎(chǔ)環(huán)境

依賴 Python 3.7+ 以及SCons安裝,我這里通過(guò)自行編譯安裝的 Python 3.9.0。

  1. ```bash 
  2.  
  3. # 下載Python源碼包 
  4.  
  5. wget https://www.python.org/ftp/python/3.9.0/Python-3.9.0.tgz 
  6.  
  7. # 解壓源碼包 
  8.  
  9. tar -xzvf Python-3.9.0.tgz 
  10.  
  11. # 安裝依賴 
  12.  
  13. yum groupinstall -y "Development tools" 
  14.  
  15. yum install -y openssl-devel 
  16.  
  17. yum install -y libffi libffi-devel 
  18.  
  19. yum install -y bzip2-devel 
  20.  
  21. yum install -y sqlite-devel 
  22.  
  23. yum install -y readline-devel 
  24.  
  25. yum install -y libuuid-devel 
  26.  
  27. yum install -y uuid-devel 
  28.  
  29. yum install -y xz-devel 
  30.  
  31. yum install -y gdbm-devel 
  32.  
  33. yum install -y tk-devel 
  34.  
  35. # 配置編譯 
  36.  
  37. cd Python-3.9.0 
  38.  
  39. ./configure --prefix=/usr/local/python3 
  40.  
  41. # 編譯Python 
  42.  
  43. make -j8 && make install 
  44.  
  45. # 創(chuàng)建軟鏈接 
  46.  
  47. ln -s /usr/local/python3/bin/python3 /usr/bin/python3 
  48.  
  49. ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 
  50.  
  51. # 驗(yàn)證 
  52.  
  53. python3 --version 
  54.  
  55. pip3 --version 
  56.  
  57. # 安裝編譯時(shí)需依賴的Python 3組件 
  58.  
  59. pip3 install setuptools 
  60.  
  61. pip3 install kconfiglib 
  62.  
  63. pip3 install pycryptodome 
  64.  
  65. pip3 install six --upgrade --ignore-installed six 
  66.  
  67. pip3 install ecdsa 
  68.  
  69. ``` 

 

  1. ```bash 
  2.  
  3. # 下載SCons源碼包 
  4.  
  5. wget http://prdownloads.sourceforge.net/scons/scons-4.0.1.tar.gz 
  6.  
  7. # 解壓源碼包 
  8.  
  9. tar -xzvf scons-4.0.1.tar.gz 
  10.  
  11. # 安裝 
  12.  
  13. cd SCons-4.0.1/ 
  14.  
  15. python3 setup.py install 
  16.  
  17. # 創(chuàng)建軟鏈接 
  18.  
  19. ln -s /usr/local/python3/bin/scons /usr/bin/scons 
  20.  
  21. ```​ 

 

2.3 安裝編譯工具環(huán)境

我們需要用到的編譯工具有交叉編譯器 gcc_riscv32、 產(chǎn)生 ninja 編譯腳本的 gn、執(zhí)行 ninja 編譯腳本的 ninja,雖然我并不知道她們是怎么工作的,但我堅(jiān)信“Just Do IT”!

  1. ```bash 
  2.  
  3. # 下載交叉編譯工具 
  4.  
  5. wget https://repo.huaweicloud.com/harmonyos/compiler/gcc_riscv32/7.3.0/linux/gcc_riscv32-linux-7.3.0.tar.gz 
  6.  
  7. # 解壓工具鏈 
  8.  
  9. tar -xvf gcc_riscv32-linux-7.3.0.tar.gz 
  10.  
  11. # 安裝交叉編譯工具 
  12.  
  13. mv gcc_riscv32 /usr/local/ # 按照個(gè)人喜好存放 
  14.  
  15. vi /etc/profile # 將環(huán)境變量配置進(jìn)來(lái)export PATH=/usr/local/gcc_riscv32/bin:$PATH 
  16.  
  17. # 如果已存在PATH,需將:/usr/local/gcc_riscv32/bin:$PATH 追加到PATH 
  18.  
  19. source /etc/profile 
  20.  
  21. # 如果還是不生效,請(qǐng)嘗試加到全局變量 vim ~/.bashrc 我這邊就醬 
  22.  
  23. # 驗(yàn)證 
  24.  
  25. cd 
  26.  
  27. riscv32-unknown-elf-gcc --version 
  28.  
  29. ``` 

 

  1. ```bash 
  2.  
  3. # 下載gn工具源碼包 
  4.  
  5. wget https://repo.huaweicloud.com/harmonyos/compiler/gn/1523/linux/gn.1523.tar 
  6.  
  7. # 解壓 
  8.  
  9. tar -xvf gn.1523.tar 
  10.  
  11. # 安裝 
  12.  
  13. mv gn /usr/local
  14.  
  15. ln -s /usr/local/gn/gn /usr/bin/gn 
  16.  
  17. # 驗(yàn)證 
  18.  
  19. gn --version 
  20.  
  21. ``` 

 

  1. ```bash 
  2.  
  3. # 下載ninja 
  4.  
  5. wget https://repo.huaweicloud.com/harmonyos/compiler/ninja/1.9.0/linux/ninja.1.9.0.tar 
  6.  
  7. # 解壓 
  8.  
  9. tar -xvf ninja.1.9.0.tar 
  10.  
  11. # 安裝 
  12.  
  13. mv ninja /usr/local
  14.  
  15. ln -s /usr/local/ninja/ninja /usr/bin/ninja 
  16.  
  17. # 驗(yàn)證 
  18.  
  19. ninja --version 
  20.  
  21. ``` 

 

2.4 編譯測(cè)試

通過(guò)簡(jiǎn)單而又繁瑣的 Ctrl C 和 Ctrl V 我們終于完成了 HarmonyOS Device 用于編譯的 Linux 環(huán)境搭建。我已經(jīng)迫不及待地想編譯一次試試:

  1. ```bash 
  2.  
  3. cd /root/harmonyos/openharmony 
  4.  
  5. python3 build.py wifiiot 
  6.  
  7. ``` 

 至此,完整的 HarmonyOS Device 環(huán)境算是搭建完畢,我們可以開(kāi)始編寫自己的程序進(jìn)行編譯、燒錄了。接下來(lái),我們嘗試從 Hi3861 套件的一些基本功能中了解 HarmonyOS Device 的開(kāi)發(fā)調(diào)試。

開(kāi)發(fā)調(diào)試篇

具體的文檔和教程請(qǐng)參考 HarmonyOS 官方文檔以及廠商的開(kāi)源教程如 HiHope 的《Harmony OS 物聯(lián)網(wǎng)應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)》配套視頻和代碼倉(cāng)庫(kù)、BearPi 的《HM Nano 鴻蒙·季 發(fā)布》配套視頻及代碼倉(cāng)庫(kù)。我們使用的是 HiHope 出品的 WI-FI IoT Hi3861 套件,涵蓋了一個(gè)核心板(Hi3861 WLAN 模組)和七個(gè)擴(kuò)展模塊(交通燈板、炫彩燈板、OLED 板、NFC 板、機(jī)器人擴(kuò)展板),包含了豐富的外設(shè)接口如 I2C(The Inter Integrated Circuit)、PWM(Pulse Width Modulation)、GPIO(General Purpose Input/Output)和多路 ADC(Analog to Digital Converter)等等,可玩性非常高。鴻蒙社區(qū)也有很多牛人創(chuàng)造了超多創(chuàng)意玩法,比如通過(guò)蜂鳴器演奏樂(lè)曲、通過(guò) OLED 播放視頻、俄羅斯方塊小游戲、控制大疆無(wú)人機(jī)……您是不是也想來(lái)一套?接下來(lái),請(qǐng)跟隨 Copy 攻城獅本大獅一起探索一下 HarmonyOS Devic 開(kāi)發(fā)調(diào)試吧!

3.1 從點(diǎn)燈開(kāi)始

如果您留意到 HarmonyOS Device 官方文檔中關(guān)于 Hi3861 的示例程序,除了“Hello,World”和 WLAN 模組聯(lián)網(wǎng),在設(shè)備開(kāi)發(fā)章節(jié)還提供了一個(gè) LED 外設(shè)控制的 Demo,通過(guò)調(diào)用 HarmonyOS 的 NDK 接口,實(shí)現(xiàn)對(duì) GPIO 控制,達(dá)到 LED 閃爍的效果,也就是我們常說(shuō)的“點(diǎn)燈”。源代碼在我們下載的目錄中:harmonyos/openharmony/applications/sample/wifi-iot/app/iothardware/led_example.c。

在 Copy 代碼之前,大概了解一下源碼的目錄:

  1. ├── applications # 應(yīng)用程序樣例,包括wifi-iot,camera等 
  2.  
  3. │ └── sample 
  4.  
  5. │ ├──── camera # 攝像頭類產(chǎn)品 
  6.  
  7. │ └──── wifi-iot # WIFI連接類產(chǎn)品 
  8.  
  9. ├── base # 基礎(chǔ)軟件服務(wù)子系統(tǒng)集&硬件服務(wù)子系統(tǒng)集 
  10.  
  11. ├── build # 組件化編譯、構(gòu)建和配置腳本 
  12.  
  13. │ └── lite 
  14.  
  15. ├── build.py # 編譯腳本文件 
  16.  
  17. ├── device # qemu模擬不同內(nèi)核運(yùn)行在不同的單板 
  18.  
  19. ├── docs # OpenHarmony開(kāi)發(fā)者文檔 
  20.  
  21. ├── domains # 增強(qiáng)軟件服務(wù)子系統(tǒng)集 
  22.  
  23. │ └── iot 
  24.  
  25. ├── drivers # 驅(qū)動(dòng)子系統(tǒng) 
  26.  
  27. │ ├── hdf 
  28.  
  29. │ └── liteos 
  30.  
  31. ├── foundation # 系統(tǒng)基礎(chǔ)能力子系統(tǒng)集 
  32.  
  33. ├── kernel # 內(nèi)核子系統(tǒng) 
  34.  
  35. ├── out # 編譯輸出 
  36.  
  37. │ └── wifiiot # python3 build.py wifiiot的產(chǎn)物 
  38.  
  39. ├── prebuilts # 編譯器及工具鏈子系統(tǒng) 
  40.  
  41. ├── test # 測(cè)試子系統(tǒng) 
  42.  
  43. ├── third_party # 開(kāi)源第三方組件 
  44.  
  45. ├── utils # 常用的工具集 
  46.  
  47. └── vendor # 廠商提供的軟件 
  48.  
  49. ├── hisi 
  50.  
  51. └── huawei 

 再看看我們的開(kāi)發(fā)目錄`applications/sample/wifi-iot`:

  1. ├── app 
  2.  
  3. │ ├── BUILD.gn # 入口 
  4.  
  5. │ ├── demolink # Hello,World 
  6.  
  7. │ │ ├── BUILD.gn 
  8.  
  9. │ │ └── helloworld.c 
  10.  
  11. │ ├── iothardware # 點(diǎn)燈Demo 
  12.  
  13. │ │ ├── BUILD.gn 
  14.  
  15. │ │ └── led_example.c 
  16.  
  17. │ ├── samgr # 服務(wù)框架子系統(tǒng)管理系統(tǒng)功能 
  18.  
  19. │ │ ├── bootstrap_example.c 
  20.  
  21. │ │ ├── broadcast_example.c 
  22.  
  23. │ │ ├── BUILD.gn 
  24.  
  25. │ │ ├── example.h 
  26.  
  27. │ │ ├── feature_example.c 
  28.  
  29. │ │ ├── maintenance_example.c 
  30.  
  31. │ │ ├── service_example.c 
  32.  
  33. │ │ ├── service_recovery_example.c 
  34.  
  35. │ │ ├── specified_task_example.c 
  36.  
  37. │ │ └── task_example.c 
  38.  
  39. │ └── startup # 啟動(dòng)配置 
  40.  
  41. │ └── BUILD.gn 
  42.  
  43. └── LICENSE # 許可證 

 根據(jù)現(xiàn)有的代碼,要想完成“點(diǎn)燈”實(shí)踐,我們只需在 VSCode Remote 中修改入口文件`BUILD.gn`:

  1. import("//build/lite/config/component/lite_component.gni"
  2.  
  3. lite_component("app") { 
  4.  
  5. features = [ 
  6.  
  7. "iothardware:led_example" 
  8.  
  9.  

 然后新開(kāi)一個(gè) VSCode 窗口進(jìn)行 DevEco Device Tool 配置及燒錄,燒錄完畢通過(guò)串口工具能查看開(kāi)發(fā)板的輸出,再 Reset 開(kāi)發(fā)板之后,伴隨著節(jié)奏聲,LED 燈一閃一閃,有點(diǎn)轉(zhuǎn)向燈的趕腳,按下左邊按鈕時(shí)提示閃爍。


為了簡(jiǎn)化操作,我安裝了串口調(diào)試工具 sscom,因此在每次燒錄前我先在 sscom 中關(guān)閉串口,燒錄完畢之后,我就在 sscom 中打開(kāi)串口,方便的點(diǎn)在于不必每次都輸入串口,在發(fā)送操作指令時(shí)也更加快捷。值得注意的是燒錄時(shí)一定要先關(guān)閉被占用的串口,不然會(huì)提示串口繁忙而無(wú)法正常燒錄。


這里的點(diǎn)燈 Demo 通過(guò) GPIO(General-purpose input/output,通用型輸入輸出)實(shí)現(xiàn),同樣的還可以實(shí)現(xiàn)交通燈板上的“紅黃綠”LED 及蜂鳴器的操作,我們實(shí)現(xiàn)蜂鳴器版的《Jingle Bells》也基于 GPIO。

3.2 走向 Copy 之路

在萬(wàn)物互聯(lián)的世界里,傳感器承擔(dān)了絕大部分的數(shù)據(jù)采集工作,在 WIFI-IoTHi3861 套件中的炫彩燈板包含了光敏、人體紅外,環(huán)境檢測(cè)板包含了溫濕度傳感器、燃?xì)鈧鞲衅?。這部分主要涉及到 ADC 和 I2C,因此我們?cè)谶M(jìn)行傳感器應(yīng)用開(kāi)發(fā)的時(shí)候,需要特別留意公共基礎(chǔ)庫(kù)中的`wifiiot_adc.h`和`wifiiot_i2c.h`,文件均位于openharmony/base/iot_hardware/interfaces/kits/wifiiot_lite目錄下.另外就是如果使用了外設(shè)接口編譯的時(shí)候要注意對(duì)應(yīng)的配置是否已經(jīng)設(shè)置正常,比如我用到了 I2C,那么在編譯配置文件`vendor\hisi\hi3861\hi3861\build\config\usr_config.mk`中,我就需要將`# CONFIG_I2C_SUPPORT is not set`修改為`CONFIG_I2C_SUPPORT=y`……當(dāng)然一開(kāi)始我是不知道這些“門道”的,直到我在 HarmonyOS Device 開(kāi)發(fā)中又走向了 Copy 之路,這條道也許永遠(yuǎn)難回頭。我就像這些傳感器,在既定的程序里采集“知識(shí)”……

秉著學(xué)習(xí)的態(tài)度,我直接 clone 的 HiHope 的倉(cāng)庫(kù)到我的`harmonyos/openharmony`目錄中,當(dāng)然,既然是 Copy,我一定會(huì)按照`LICENSE`的規(guī)則使用,萬(wàn)一沒(méi)遵守也是僅個(gè)人學(xué)習(xí)使用,應(yīng)該不會(huì)被“譴責(zé)”吧。請(qǐng)開(kāi)始 Copy 吧:

  1. ```bash 
  2.  
  3. cd /root/harmonyos/openharmony/applications/sample/wifi-iot 
  4.  
  5. git clone https://gitee.com/hihopeorg/HarmonyOS-IoT-Application-Development.git 
  6.  
  7. mv HarmonyOS-IoT-Application-Development/* ./ 
  8.  
  9. ``` 

 

于是乎,在司職前端開(kāi)發(fā)的 Copy 攻城獅的票圈又多了些物聯(lián)網(wǎng)開(kāi)發(fā)的動(dòng)態(tài),“外行看熱鬧,內(nèi)行看笑話”,不過(guò)捫心自問(wèn),這樣的 Copy,我還是非常樂(lè)意嘗試--零基礎(chǔ)也能玩玩,真好!一頓 Copy 操作下來(lái),我便開(kāi)始嘗試編譯燒錄每一個(gè) Demo,盡管代碼看的吃力(我是太白),但一些關(guān)鍵的代碼還是能夠勉強(qiáng)修改,比如“1 改為 2”……總體來(lái)說(shuō),我體驗(yàn)到了動(dòng)手實(shí)踐的樂(lè)趣。尤其是看到蜂鳴器版的《兩只老虎》,我瞬間想到了那年平安夜,在陌生的城市,深夜加班之后,路燈下自己的影子被拉得長(zhǎng)長(zhǎng)的,我和往常一樣掃了一輛共享單車,鎖開(kāi)的那一瞬間,音樂(lè)響起來(lái)的……

實(shí)戰(zhàn)應(yīng)用篇

說(shuō)回我們今天的主要任務(wù)--蜂鳴器版的《Jingle Bells》。小的時(shí)候我們學(xué)過(guò)“聲音是一種波??梢员蝗硕R(shí)別的聲(頻率在 20 Hz~20000 Hz 之間),我們稱之為聲音”。那聲音的頻率和我們聽(tīng)到的音調(diào)又有什么關(guān)系呢?剛好我找到了它--每個(gè)人都應(yīng)該了解的音樂(lè)理論, 從表格中可以看出,“幾”字型方向聲音頻率逐漸增大,我們聽(tīng)到的“哆唻咪”差不多是表中的“1046.50,1174.66,1318.51”。


在我所使用的 WIFI-IoT 套件中的蜂鳴器要想輸出相同的頻率,需要使用 PWM 接口來(lái)控制。根據(jù)社區(qū)大佬們的實(shí)測(cè),通過(guò)`hi_pwm_set_clock(PWM_CLK_XTAL);`可以將時(shí)鐘源設(shè)置為晶體時(shí)鐘且時(shí)鐘頻率為 40MHz。根據(jù) PWM 輸出的方波頻率的公式:

  1. f = Fcs / freq 

其中,F(xiàn)cs 是 PWM 時(shí)鐘源頻率,freq 是分頻倍數(shù),取值[1~65535];


我們通過(guò)簡(jiǎn)單的換算得出我所用的《鈴兒響叮當(dāng)》簡(jiǎn)譜中需要的音頻:

  1. static const uint16_t g_tuneFreqs[] = { 
  2.  
  3. 0, // 40M Hz 對(duì)應(yīng)的分頻系數(shù): 
  4.  
  5. 38223, // 1046.50 1 
  6.  
  7. 34052, // 1174.66 2 
  8.  
  9. 30338, // 1318.51 3 
  10.  
  11. 28635, // 1396.91 4 
  12.  
  13. 25510, // 1567.99 5 
  14.  
  15. 22727, // 1760.00 6 
  16.  
  17. 40495, // 987.77 7- 
  18.  
  19. 36077, // 1108.73 1+ 
  20.  
  21. 51021, // 783.99 5- 
  22.  
  23. 45455 // 880.00 6- 
  24.  
  25. }; 

 索引從 0 開(kāi)始,比如"1,2,3,4,5,6"分別對(duì)應(yīng)”哆來(lái)咪發(fā)嗦啦“,因此簡(jiǎn)譜中的音符對(duì)應(yīng)進(jìn)來(lái)就如下圖所示了:


當(dāng)然要想出色的演奏,我們還需要掌握一定的節(jié)奏,不然都是一個(gè)節(jié)拍,平平淡淡沒(méi)有跌宕起伏的感覺(jué),怎么體現(xiàn)咱 Copy 攻城獅的人生歷程呢?關(guān)于節(jié)拍,我簡(jiǎn)單做了總結(jié),簡(jiǎn)譜中常見(jiàn)的節(jié)拍有下面幾個(gè),套用在代碼里面就是停頓時(shí)間:


整明白這些之后,開(kāi)始編(kao)程(bei),其核心實(shí)踐如下:

  1. # 音樂(lè)處理 
  2.  
  3. static void *BeeperMusicTask(const char *arg) 
  4.  
  5.  
  6. (void)arg; 
  7.  
  8. printf("BeeperMusicTask start!\r\n"); 
  9.  
  10. hi_pwm_set_clock(PWM_CLK_XTAL); // 設(shè)置時(shí)鐘源為晶體時(shí)鐘(40MHz,默認(rèn)時(shí)鐘源160MHz) 
  11.  
  12. for (size_t i = 0; i < sizeof(g_scoreNotes)/sizeof(g_scoreNotes[0]); i++) { 
  13.  
  14. uint32_t tune = g_scoreNotes[i]; // 音符 
  15.  
  16. uint16_t freqDivisor = g_tuneFreqs[tune]; 
  17.  
  18. uint32_t tuneInterval = g_scoreDurations[i] * (125*1000); // 音符時(shí)間 
  19.  
  20. printf("%d %d %d %d\r\n", tune, (40*1000*1000) / freqDivisor, freqDivisor, tuneInterval); 
  21.  
  22. PwmStart(WIFI_IOT_PWM_PORT_PWM0, freqDivisor/2, freqDivisor); 
  23.  
  24. usleep(tuneInterval); 
  25.  
  26. PwmStop(WIFI_IOT_PWM_PORT_PWM0); 
  27.  
  28.  
  29. return NULL
  30.  

 整完就是一頓編譯、燒錄,一套下來(lái)按下 Reaset 就崩出了那個(gè)似曾相識(shí)的聲音:"Jingle bells, jingle bells,ingle all the way……"

突然又一個(gè)想法冒出來(lái)了:”八音盒“是不是可以整了?服務(wù)端提供音樂(lè)數(shù)據(jù),Hi3861的通過(guò)請(qǐng)求網(wǎng)絡(luò)獲取數(shù)據(jù),蜂鳴器演奏,然后OLED屏顯示當(dāng)前播放,再給交通燈板的按鍵加上功能,是不是齊活了~

后記

心心念念終于擼完這篇了,本來(lái)以為幾個(gè)小時(shí)就能搞定的,結(jié)果一搞就是一個(gè)周末。最近發(fā)現(xiàn)效率太低了,有很多文章很多題材想寫,也有很多事情要完成,卻總是發(fā)現(xiàn)沒(méi)時(shí)間,時(shí)間都去哪兒了?之前沒(méi)在 CentOS 上搭這套環(huán)境,知道寫文章的時(shí)候才發(fā)現(xiàn)同樣是 Linux,CentOS 和 Ubuntu 還是有些差異的,幸好有坑也爬出來(lái)了,關(guān)鍵在于前人的經(jīng)驗(yàn)分享。因此,希望此篇能給入門HarmonyOS的新人有所啟發(fā)。

B站鏈接:https://www.bilibili.com/video/BV1X64y1f7j1

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com/#zz

 

責(zé)任編輯:jianghua 來(lái)源: 鴻蒙社區(qū)
相關(guān)推薦

2020-12-11 12:45:04

鴻蒙Hi3861游戲

2020-12-16 10:05:48

鴻蒙開(kāi)發(fā)板Onenet平臺(tái)

2021-09-16 10:03:39

鴻蒙HarmonyOS應(yīng)用

2020-11-06 10:15:16

HiBurn

2020-12-29 09:59:01

鴻蒙HarmonyOS智能家居

2020-10-14 09:37:03

HiBurn鴻蒙.bin文件

2020-10-30 17:12:05

Hi3861

2020-12-17 10:02:16

鴻蒙Hi3861開(kāi)發(fā)板

2020-11-18 11:56:06

鴻蒙Hi3861

2020-12-09 09:44:29

Hi3861硬件介紹鴻蒙開(kāi)發(fā)板

2021-12-20 21:01:52

鴻蒙HarmonyOS應(yīng)用

2021-06-25 15:32:13

鴻蒙HarmonyOS應(yīng)用

2021-05-14 15:51:01

鴻蒙HarmonyOS應(yīng)用

2020-11-06 11:32:11

NV操作

2020-12-08 12:36:41

Hi3861 ADC驅(qū)動(dòng)開(kāi)發(fā)

2020-10-30 17:42:36

鴻蒙 OS Hi386

2020-10-30 09:48:03

Hi3861開(kāi)發(fā)板get請(qǐng)求

2022-08-19 10:54:47

操作系統(tǒng)鴻蒙

2020-10-27 10:08:19

Hi3861ADC驅(qū)動(dòng)

2020-10-29 09:53:06

Hi3861硬件開(kāi)發(fā)板
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)