Raspberry Pico W - programování v CLion

04.02.2024 Raspberry Pi #raspberrypi #picow #c++

Na rozdíl od Pico je Pico vybaveno WiFi anténou a pro správnou funkci potřebuje trochu jiné knihovny než klasické Pico. Zde je ukázk, jak postupovat při zakládání vlastního projektu, bez všude omílané instalace příkladů.


Vše lze zvládnout z prosředí CLion. Počáteční kroky jsou stejné, jako pro Pico. V prostředí CLion využijeme prostředí terminálu pro instalaci potřebných balíčků.

Instalace Toolchain

Spusťte následující příkazy z terminálu

brew install cmake
brew tap ArmMbed/homebrew-formulae
brew install arm-none-eabi-gcc

Stažení SDK

Spuštěním následujících příkazů ze složky dle vašeho výběru naklonujte úložiště pico-sdk.

git clone -b master https://github.com/raspberrypi/pico-sdk.git 
cd pico-sdk
git submodule update --init

Poté spusťte následující příkaz, abyste získali úplnou cestu k souboru pico-sdk

pwd

Dále zkopírujte cestu a exportujte ji jako proměnnou prostředí PICO_SDK_PATH ve vašem ~/.bash_profile

Aby proměnná prostředí fungovala, budete muset restartovat svůj terminál. Případně můžete spustit následující příkaz

source ~/.bash_profile

Nastavení CLion

Založte nový projekt. Vyberte C++ Executable.

V preferencích se musí nastavit parametra, jak jsou uvedeny na obrázku níže,

Pokud jsou vaše nastavení správná, uvidíte výstup podobný následujícímu v dolní části IDE.

Důležitým krokem je nastavení souboru CMakeList.txt. Nastavte soubor následovně:

cmake_minimum_required(VERSION 3.26)

set(CMAKE_CXX_STANDARD 17)
set(PICO_BOARD pico_w)

include($ENV{PICO_SDK_PATH}/pico_sdk_init.cmake)
project(Blink C CXX ASM)
pico_sdk_init()

add_executable(Blink main.cpp)

target_link_libraries(Blink
        pico_stdlib              # for core functionality
        pico_cyw43_arch_none     # we need Wifi to access the GPIO, but we don't need anything else
)

pico_enable_stdio_usb(Blink 1)
pico_enable_stdio_uart(Blink 1)

pico_add_extra_outputs(Blink)

Všimněte si, že pokud projekt jmenuje Blink, tak se na tento název v souboru odkazují všechny direktivy. Jejich význam je následující:

cmake_minimum_required(VERSION 3.26)

Toto určuje minimální verzi CMake, která se má použít. Pokud je instalace CMake starší, než je uvedeno, zobrazí se chyba.

Ptáte se, co je CMake. CMake je nástroj pro automatizaci procesu tvorby softwaru. Není to toolchain nebo kompilátor. Místo toho generuje soubory a konfigurace potřebné pro vytváření softwaru se závislostmi a zdrojovými soubory. To vše bez závislosti na kompilátoru nebo toolchainu. To znamená, že CMake lze používat s toolchainy a IDE, což z něj dělá oblíbený nástroj softwarových vývojářů.

include($ENV{PICO_SDK_PATH}/pico_sdk_init.cmake)

To říká CMake, aby použil a.cmakesoubor nalezený v adresáři projektu. Soubor řekne CMake vše o Pico C/C++ SDK.

project(Blink C CXX ASM)

Toto určuje název projektu jako Blinka jazyky, které budeme používat. Budeme používat soubory C, C++ a ASM.

set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)

Tyto dva řádky specifikují jazykové standardy, které se mají použít.

add_executable(Blink main.cpp)

Toto je název cíle, který bude vytvořen z daných zdrojových souborů. Zde je cíl sestaveníBlink, což znamená, že cílové soubory budou pojmenovány jakomain.cpp,main.hex,main.hexatd. Main.c je zdrojový soubor, ze kterého budou vytvořeny cílové soubory.

pico_enable_stdio_usb(Blink 1)
pico_enable_stdio_uart(Blink 1)

Toto jsou dvě direktivy CMake, které říkají, kam směrovat výstup/vstup ze standardních vstupně-výstupních rozhraní. Když například použijete printf() funkci, musíte nasměrovat výstup do fyzického rozhraní, abyste viděli, co jste vytiskli. Pico SDK nám umožňuje použít buď USB nebo UART port jako vstupně-výstupní rozhraní. Můžeme povolit jeden po druhém nebo povolit oba najednou. Změňte hodnotu na1 k povolení výstupu nebo 0 k deaktivaci výstupu. V tomto případě jsou oba povoleny a to znamená, že vše, co vytisknete pomocí printf() funkce, bude vytištěno jak na USB, tak na výchozí UART.

pico_add_extra_outputs(Blink)

To říká, že systém sestavení musí také vytvořit další výstupní soubory, jako je elf, uf2 atd.

target_link_libraries(Blink
        pico_stdlib              # for core functionality
        pico_cyw43_arch_none     # we need Wifi to access the GPIO, but we don't need anything else
)

To přináší standardní knihovnu dostupnou v SDK, takže můžete používat základní funkce, jako je GPIO. Pokud potřebujete více nebo konkrétní funkci SDK, musíte ji zadat tímto způsobem.

Po uložení souboru CMakeLists.txt, klikněte na názvu projektu pravým tlačítkem myší, a vyberte Reload CMake Project.

Tím by měl být projekt nastaven. Nyní vytvořte zdrojový kód do souboru main.cpp.

#include "pico/stdlib.h"
#include "pico/cyw43_arch.h"

int main() {
    stdio_init_all();
    if (cyw43_arch_init()) {
        printf("Wi-Fi init failed");
        return -1;
    }
    while (true) {
        cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 1);
        sleep_ms(100);
        cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 0);
        sleep_ms(100);
    }
}

Klikněte na Build.

Pokud vše proběhlo v pořádku, měl by být zobrazen podobný výstup, jako:

Tím se vytvoří soubory uf2 a elf, které se pak zkopírují do MCU Pico W.