TL;DR
・GP0 - GP28 まですべてのピンが内部プルアップを使える
・CmakeListsの書き方を改めて整理した
ラズパイピコを使ったプロジェクトを計画中なのですが、内部プルアップを使えるピンの情報が見つからない(一度どこかで見た)のでテストコードを書いて確認してみました。
以前、ラズパイピコに関してCmakeListsの書き方を書いたようなつもりでいましたが、記事を書いていなかったようなので改めて整理しました。
新プロジェクトの作成
ラズパイピコのサンプルコードはビルドできたけど、自分のプロジェクトをイチからつくるのはどうやるの?というとこををまとめました。
すでにpico-examplesがbuildできている前提です。
pico-examplesや pico-sdkがあるフォルダで作成すると手順通りにできます。これ以外の場所で行うときはこれらのパスを適切に設定する必要があります。
// projectのフォルダを以下の場所に作る pico ├── pico-examples ├── pico-sdk ├── <project>
この場所にC言語ソースやCMakeListsを作成し、sdkのパスを設定します。
$ mkdir <フォルダ名> $ cd <フォルダ名> $ touch main.c // main.cの作成 // CMakeLists.txtの作成 // pico-examplesや pico-sdkがあるフォルダ以外の場合は相対パスを正しく設定する必要がある $ cp ../pico-sdk/external/pico_sdk_import.cmake .
この時点で以下のようになているはずです。
ubuntu@ubuntu-XXXX:~/code/te$ ls -la 合計 20 drwxrwxr-x 2 ubuntu ubuntu 4096 2月 10 18:23 . drwxrwxr-x 12 ubuntu ubuntu 4096 2月 10 18:18 .. -rw-rw-r-- 1 ubuntu ubuntu 329 2月 10 18:23 CMakeLists.txt -rw-rw-r-- 1 ubuntu ubuntu 795 2月 10 18:13 main.c -rw-rw-r-- 1 ubuntu ubuntu 3165 2月 10 18:21 pico_sdk_import.cmake
buildフォルダに移動してbuildします。
$ mkdir build $ cd build // pico-examplesや pico-sdkがあるフォルダ以外の場合は相対パスを正しく設定する必要がある $ export PICO_SDK_PATH=../../pico-sdk $ cmake .. $ make
これでbuildフォルダにbin.uf2
が作成されます。
ラズパイpicoのbootスイッチを押しながらUSBを接続し、USBストレージとして認識されたらラズパイpicoにドラッグドロップでコピーします。
USBを再接続すると書き込んだプログラムで起動します。
またソースコードを変更したとき再度コンパイルするにはmake
だけでOKです。
ソースコード
//main.c #include <stdio.h> #include <string.h> #include "pico/stdlib.h" int main() { stdio_init_all(); const uint LED_PIN = PICO_DEFAULT_LED_PIN; gpio_init(LED_PIN); gpio_set_dir(LED_PIN, GPIO_OUT); sleep_ms(1000); gpio_put(LED_PIN, 1); sleep_ms(1000); gpio_put(LED_PIN, 0); for(int i=0;i<30;i++) { if(i==25)continue; // BUILTIN_LEDを除外 gpio_init(i); gpio_set_dir(i, 0); gpio_pull_up(i); } while (true) { for(int i=0;i<30;i++) { if(i==25)continue; // BUILTIN_LEDを除外 if(gpio_get(i)) { gpio_put(LED_PIN, 0); } else { gpio_put(LED_PIN, 1); sleep_ms(1000); } printf("debug\n"); } } }
// CMakeLists.txt cmake_minimum_required(VERSION 3.13) include(pico_sdk_import.cmake) project(test_project C CXX ASM) set(CMAKE_C_STANDARD 11) set(CMAKE_CXX_STANDARD 17) pico_sdk_init() add_executable(bin #バイナリのファイル名 main.c #ソースコード ) pico_enable_stdio_usb(bin 1) #対象のバイナリ, usb sirial (1:有効、0:無効) pico_add_extra_outputs(bin) #対象のバイナリ target_link_libraries(bin pico_stdlib) #対象のバイナリ,リンクするlibrary