# Raspberry pico 使用 zephyr 進行開發
## 介紹
Zephyr是一個小型的即時作業系統,用於資源受限的嵌入式互聯裝置,支援多種體系並在Apache許可證 2.0下發行。它有一個BSD許可證的仿品出現在來自Intel的Arduino 101軟體資源包中。
來自:https://zh.wikipedia.org/zh-tw/Zephyr_(%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F)
可以專注在軟體開發,且在為來移植只需要在zephyr支持的清單中,可以快速進行開發平台的轉換,不用關注在HAL重新建構
當然ST,Nordic,ESP,Ti許多單片機都有支持.
## 環境安裝
- 注意 如遭遇版本與本文內容有所差異,請參考Zephyr使用文檔.
- Windows環境建置
1. 安裝choco,主要用於安裝相依套件管理,類似ubuntu apt或是mac brew.![](https://i.imgur.com/iyJSXgd.png)圖一
2. 以管理員身份打開cmd.exe![](https://i.imgur.com/UuvL28X.png)
3. 將圖一第二點命令貼上並運行安裝choco
4. 使用choco安裝相依套件
```
choco feature enable -n allowGlobalConfirmation
choco install cmake --installargs 'ADD_CMAKE_TO_PATH=System'
choco install ninja gperf python git dtc-msys2 wget unzip
```
5. 重新開啟cmd.exe不需要使用管理員身分
6. 安裝python與python相依包(此處建議使用虛擬環境venv進行)
```
cd %HOMEPATH%
python -m venv zephyrproject\.venv
zephyrproject\.venv\Scripts\activate.bat
```
![](https://i.imgur.com/L2XQvpg.png)
**注意 必須出現(.venv)才是在python的venv下面,才繼續進行後面步驟**
7. 安裝west
```
pip install west
```
8. 使用west初始化Zephyr,並進行更新
```
west init zephyrproject
cd zephyrproject
west update
```
9. 導出Cmake
```
west zephyr-export
```
10. 使用pip安裝Zephry的requirements
```
pip install -r %HOMEPATH%\zephyrproject\zephyr\scripts\requirements.txt
```
11. 安裝Zephyr SDK
於Home目錄下下載SDK(zephyr-sdk-0.15.2_windows-x86_64.zip)
```
cd %HOMEPATH%
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.15.2/zephyr-sdk-0.15.2_windows-x86_64.zip
```
解壓縮
```
unzip zephyr-sdk-0.15.2_windows-x86_64.zip
```
![](https://i.imgur.com/gsFQfzI.png)
12. 配置Zephyr SDK的環境
```
cd zephyr-sdk-0.15.2
setup.cmd
```
到這步已經完成環境的安裝了,接下來建置Raspberry pico的Blinky的代碼
## 快速建構Blinky
### Zephyr目錄結構
boards目前有支持的板子或是MCU
![](https://i.imgur.com/RB0RsNu.png)
找到我們需要的板子
![](https://i.imgur.com/cM7YoHz.png)
可以找到{rpi_pico}這個資料夾
![](https://i.imgur.com/0tU1lWx.jpg)
今天的主角pico將
### 官方文件
https://docs.zephyrproject.org/latest/boards/arm/rpi_pico/doc/index.html
### 建構方式
```
cd %HOMEPATH%\zephyrproject\zephyr
west build -b rpi_pico samples/basic/blinky
```
沒錯,只要一行就可以完成編譯,並也貼心的建置zephyr.uf2檔案,uf2檔的路徑為(./zephyrproject\zephyr\build\zephyr)
![](https://i.imgur.com/wGYsM3f.png)
此時可以插上pico
1. 如果是第一次燒錄的pico插上會自動掛載一個磁碟出來
![](https://i.imgur.com/5WiQcFV.png)
將zephyr.uf2拖曳到pico裡面,板子自已就開始閃阿閃
![](https://i.imgur.com/1Xs1sKq.png)
2. 如果是之前有燒寫過的需要按著板子上BOOTSEL按鈕並且插上電,磁碟就會出現,在將zephyr.uf2放入即可.
## 修改Blinky內容
找到Zephyr所附上的範例所存放的位置
.\zephyrproject\zephyr\samples\basic\blinky\src
![](https://i.imgur.com/gsyQHpK.png)
可以找到main.c文件,沒錯,程式碼就只有簡簡單單的這份!
![](https://i.imgur.com/XGHCOO0.png)
將秒數從1000->100
![](https://i.imgur.com/v8gwhCx.png)
重新再跑一次
```
cd %HOMEPATH%\zephyrproject\zephyr
west build -b rpi_pico samples/basic/blinky
```
產出uf2檔後,老方法快速地把檔案拖曳進磁碟,即可完成
## 最後
針對Zephyr使用pico快速導入,如何從入門快速入土.
Zephyr不只支持pico..常見各家uC都有
![](https://i.imgur.com/vyIZbYh.png)
熱門的ST,Nordic,ESP32也是在其中的喔
![](https://i.imgur.com/MjqLisk.png)
![](https://i.imgur.com/YDvWgJ3.png)
![](https://i.imgur.com/Xmuqlha.png)
今天如果要把blinky轉換到ESP32上運行呢?
west build -b <改為ESP32或是Nordci的板子>
因為之前有先編pico,可以添加-pristine參數避免報錯
```
cd %HOMEPATH%\zephyrproject\zephyr
west build -b esp32 samples/basic/blinky -pristine
```
![](https://i.imgur.com/FnQQehb.png)
或是指定輸出的目錄即可.
簡簡單單的ESP32閃阿閃就完成拉,相同的代碼,直接可以在兩個不同平台上運行
![](https://i.imgur.com/kqNzZqa.png)
![](https://i.imgur.com/Pv3sZSL.png)
### 補充Nordic DK52
相同代碼不做修改直接編看看
![](https://i.imgur.com/ivlsPYr.png)
透過nRFConnect的Programmer燒寫hex
![](https://i.imgur.com/sN1MNyK.png)
![](https://i.imgur.com/qsR5sUp.png)
一樣順利OK!
換個方式 使用west flash進行
```
west flash --build-dir ../nrfbuild
```
../nrfbuild 為剛剛額外設定的輸出路徑
![](https://i.imgur.com/VFyuHM7.png)
這下連nrfConnect都不用開起來了