# 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都不用開起來了