天天看點

用HarmonyOS點亮LED!

用HarmonyOS點亮LED!

Hi3861 模組的介紹

①外觀和基本功能

Hi3861 開發闆模組大小約 2cm*5cm,是一款高度內建的 2.4GHz WLAN SoC。

Hi3861 晶片內建高性能 32bit 微處理器、擁有豐富的外設接口,晶片内置 SRAM(Static Random Access Memory)和 Flash,并支援在 Flash 上運作程式。

Hi3861 模組有 2MB FLASH,352KB RAM。但我們編寫代碼時,要注意對有限資源的合理利用。

Hi3861 可以說是麻雀雖小,五髒俱全。Hi3861 的外設接口包括(外部主晶振為 40M 或者 24M):

  • 2 個 SPI(Synchronous Peripheral Interface)
  • 3 個 UART(Universal Asynchronous Receiver & Transmitter)
  • 2 個 I2C(The Inter-Integrated Circuit)
  • 6 路 PWM(Pulse Width Modulation)
  • 15 個 GPIO(General Purpose Input/Output)
  • 7 路 ADC(Analog to Digital Converter)
  • 1 個 I2S 接口
  • 1 個高速 SDIO2.0(Secure Digital Input/Output)接口,最高時鐘可達 50MHz

模組外觀圖:

用HarmonyOS點亮LED!

Hi3861 主要功能架構圖:

用HarmonyOS點亮LED!

Hi3861 原理圖:

用HarmonyOS點亮LED!
用HarmonyOS點亮LED!

Hi3861 開發環境的搭建

因為截至本文釋出,Linux 平台下的開發工具不支援 Hi3861 的燒錄(且 Windows 平台中的編譯環境比較難搭建),是以我們得使用 Windows 的工具來燒錄,Linux 平台編譯。

Ubuntu20.04 來編譯源碼,Windows10 通過網絡從 Ubuntu 中下載下傳二進制檔案,并燒錄二進制檔案到 Hi3861 中。

用HarmonyOS點亮LED!

①Ubuntu20.04 開發環境的搭建

可以在 Windows10 中使用 virtual box 虛拟機軟體來安裝一個下載下傳好的 Ubuntu20.04 鏡像,進而擁有 Ubuntu20.04 基本的開發環境。這裡忽略。

假設:

  • 已有 Ubuntu20.04 系統
  • 可以聯網
  • 可以使用 ssh 連接配接
  • 其空閑存儲空間(推薦)在 30G 以上

執行以下指令來搭建 Ubuntu20.04 的環境:

// Ubuntu20+
sudo apt update
sudo apt install -y vim gcc g++ flex bison texinfo make zlib* libffi-dev git git-lfs iputils-ping iproute2 net-tools
sudo apt install -y build-essential python3 python3-pip python3.8-venv scons python3-testresources
pip3 install scons ; scons -v
pip3 install kconfiglib
pip3 install pycryptodome
pip3 install six --upgrade --ignore-installed six
pip3 install ecdsa
// 安裝hb
python3 -m pip install --user ohos-build

// 安裝編譯鍊gcc_riscv32整合包, // 或者自行下載下傳gcc_riscv32各個元件 并且編譯, N/A
wget  https://repo.huaweicloud.com/harmonyos/compiler/gcc_riscv32/7.3.0/linux/gcc_riscv32-linux-7.3.0.tar.gz
// 使用~/.bashrc來配置環境變量
export PATH=$PATH:~/work/tools/gcc_riscv32/bin
source ~/.bashrc
//檢查編譯鍊是否安裝好
$ riscv32-unknown-elf-gcc -v
...
gcc version 7.3.0 (GCC)


// downloads devicetool-linux-tool
wget  https://contentcenter-vali-drcn.dbankcdn.com/pvt_2/DeveloperAlliance_package_901_9/50/v3/3iXerz92RfqKxMyzEXHblg/devicetool-linux-tool-2.1.0.0.zip\?HW-CC-KV=V1\&HW-CC-Date=20210531T110021Z\&HW-CC-Expire=315360000\&HW-CC-Sign=24AFCA46B37541ED3A936186EEDF627CFD397B7C202FFEEF564D820897F75822


//install vscode, install node.js  & hpm
N/A

// unzip & install the tool
bash deveco-device-tool-2.2.0+285431.76f4090e.run
// 最後可能有個warning資訊,我們按照提示來安裝一個軟體即可
sudo apt install authbind
...

// downloads the source codes
wget https://repo.huaweicloud.com/harmonyos/os/1.1.2/code-v1.1.2-LTS.tar.gz
tar -xvf code-v1.1.2-LTS.tar.gz      

進入源代碼根路徑,進行配置和編譯,“build success” 就意味着編譯環境搭建成功。

$ cd code-v1.1.2-LTS
$ hb set
[OHOS INFO] Input code path: .
OHOS Which product do you need?  wifiiot_hispark_pegasus
$ hb build
...
[OHOS INFO] wifiiot_hispark_pegasus build success
[OHOS INFO] cost time: 0:00:37

$ ls out/hispark_pegasus/wifiiot_hispark_pegasus/ -alh
total 31M
drwxrwxr-x  7 henry henry 4.0K 9月   2 14:52 .
drwxrwxr-x  3 henry henry 4.0K 9月   2 14:51 ..
-rw-rw-r--  1 henry henry  462 9月   2 14:51 args.gn
-rw-rw-r--  1 henry henry  47K 9月   2 14:52 build.log
-rw-rw-r--  1 henry henry  26K 9月   2 14:51 build.ninja
-rw-rw-r--  1 henry henry 5.3K 9月   2 14:51 build.ninja.d
drwxrwxr-x  3 henry henry 4.0K 9月   2 14:51 gen
-rw-rw-r--  1 henry henry  24K 9月   2 14:52 Hi3861_boot_signed_B.bin
-rw-rw-r--  1 henry henry  24K 9月   2 14:52 Hi3861_boot_signed.bin
-rw-rw-r--  1 henry henry  15K 9月   2 14:52 Hi3861_loader_signed.bin
-rw-rw-r--  1 henry henry 1.2M 9月   2 14:52 Hi3861_wifiiot_app_allinone.bin
-rw-rw-r--  1 henry henry  22M 9月   2 14:52 Hi3861_wifiiot_app.asm
-rw-rw-r--  1 henry henry 1.2M 9月   2 14:52 Hi3861_wifiiot_app_burn.bin
-rw-rw-r--  1 henry henry  25K 9月   2 14:52 Hi3861_wifiiot_app_flash_boot_ota.bin
-rw-rw-r--  1 henry henry 3.5M 9月   2 14:52 Hi3861_wifiiot_app.map
-rw-rw-r--  1 henry henry 570K 9月   2 14:52 Hi3861_wifiiot_app_ota.bin
-rwxrwxr-x  1 henry henry 2.2M 9月   2 14:52 Hi3861_wifiiot_app.out
-rw-rw-r--  1 henry henry    8 9月   2 14:52 Hi3861_wifiiot_app_vercfg.bin
drwxrwxr-x  2 henry henry 4.0K 9月   2 14:51 libs
-rw-rw-r--  1 henry henry  37K 9月   2 14:52 .ninja_log
drwxrwxr-x  4 henry henry 4.0K 9月   2 14:51 NOTICE_FILE
drwx------ 12 henry henry 4.0K 9月   2 14:51 obj
drwxrwxr-x  3 henry henry 4.0K 9月   2 14:51 suites
-rw-rw-r--  1 henry henry  34K 9月   2 14:51 toolchain.ninja      

②Windows10 開發環境的搭建

如下表:

用HarmonyOS點亮LED!

安裝 hpm:

// 建議将npm源配置為國内鏡像,例如設定為華為雲鏡像源。
npm config set registry https://repo.huaweicloud.com/repository/npm/
// 打開指令行工具,執行如下指令安裝最新版本hpm。
npm install -g @ohos/hpm-cli

//如果已安裝hpm,可以執行指令更新hpm至最新版本。
npm update -g @ohos/hpm-cli      

問題:DevEco Device Tool安裝失敗:

“[Errno 13] Permission denied: ‘xxx\\.deveco-device-tool\\core\\tool_openlogic_openjdk_jre\\jre\\bin\\ucrtbase.dll’”      

解決:

  • 退出了 360 安全衛士,關閉防毒軟體和所有其他不相關軟體:vscode,OpenJDK…
  • 手動删除 C:\Users<xxx>\AppData\Local\deveco-device-tool-installer 和 C:\Users<xxx>.deveco-device-tool 這兩個目錄
  • 重新安裝
  • 重新開機 vscode 後,在左側功能圖示中有 deveco 的圖示出現,即表示 deveco 安裝成功

點亮 Hi3861 的 LED

Hi3861 的 gpio 功能清單如下圖:

用HarmonyOS點亮LED!

①首先我們應該找到 Hi3861 的原理圖,LED1 對應的是 GPIO09

根據這個原理圖,我們隻要保持 J3 的跳冒是連接配接的,從 CPU 引過來的 GPIO09 保持低電平,那麼 LED1 就會點亮了。

用HarmonyOS點亮LED!

HarmonyOS 的 gpio 操作流程為:

用HarmonyOS點亮LED!

因為我們不是操作 gpio 來擷取/控制/響應 gpio 的中斷,是以隻需要關心讀寫 gpio 的流程即可。

②HarmonyOS 中提供了 LED 的 demo,可以供我們使用

代碼如下:

code-v1.1.2-LTS/applications/sample/wifi-iot/app/iothardware/led_example.c      

我們需要修改配置檔案:app/BUILD.gn,添加相對路徑"iothardware"下的庫"led_example",中間以":"分隔開。

用HarmonyOS點亮LED!

修改好後,我們就可以到源碼的根目錄中使用"hb build"來編譯了。

注:"led_example"庫名稱是由 iothardware/BUILD.gn 來指定的。

用HarmonyOS點亮LED!

燒錄二進制檔案到 Hi3861

①下載下傳 Ubuntu 中的源碼二進制檔案到 Windows10 中

所有的生成檔案在:code-v1.1.2-LTS/out 目錄中。

我們使用 mobaxterm 工具:

https://mobaxterm.mobatek.net/download.html      

ssh 通路到我們的 Ubuntu20.04 後,就可以用其 sftp 功能下載下傳 out 目錄到我們的 win10 的 download 目錄中。

②在 Windows10 中已經安裝好 deveco 工具的 vscode 打開

一定要打開包含 out 目錄的上一級目錄:如我們的下載下傳目錄 downloads 檔案夾。

直接可以作為一個項目打開,選擇 framework 為:hb,平台為:hi3861。

用HarmonyOS點亮LED!

③配置項目的下載下傳資訊

連接配接好自己的 hi3861 模組,如果電腦沒有裝 ch340 序列槽驅動,一定别忘了裝。

用HarmonyOS點亮LED!

④點選燒錄

燒錄的過程中,會在 vscode 的終端提示重新開機開始燒錄,請按下 hi3861 的 reset 鍵開始燒錄。

燒錄成功後,重新上電即可立即運作:

用HarmonyOS點亮LED!

⑤耶 - 布靈布靈 - 亮咯

如下圖:

用HarmonyOS點亮LED!