01.picoセットアップ C言語


01.picoセットアップ C言語

550円のRaspberry Pi picoを何か月か前に購入しました。セット内容は以下です。

Raspberry Pi Pico

・550円 SWサイエンス
・ピンヘッダ無し 自分で半田付
・USBのCN--(VBUS)--Di--(VSYS)--DDコン--(3V3)
https://www.switch-science.com/catalog/6900/

コネクタ基板

・PIMORONI-PIM555 Pico Decker (Quad Expander)PIMORONI
・1980円 SWサイエンス
・Picoと4枚が接続可能
・基板パターンとCNのみ パラ接続
https://www.switch-science.com/catalog/7378/
・写真は、pico接続済。

タッチディスプレイ

・WAVESHARE-19907(微雪電子)
・2530円 SWサイエンス
・3.5インチ 480x320 microSDスロット付 リセットSW付
・Vcc=5V SPI通信 内部でVSYSから3V3を作成
https://www.switch-science.com/catalog/7330/
・解説
https://www.waveshare.com/wiki/Pico-ResTouch-LCD-3.5

e-Paperディスプレイ

・WAVESHARE-20053(微雪電子)
・2409円 SWサイエンス
・2.66インチ 296x152
・Vcc=3.3V SPI通信 リフレッシュ間隔15s 白地に黒と赤で表示
https://www.switch-science.com/catalog/7324/
・解説
https://www.waveshare.com/wiki/Pico-ePaper-2.66-B

電池駆動基板

・SSCI-074131(SWサイエンス)
・1980円 SWサイエンス
・Vin=0.6V~ 単4x1本 out=3.3V0.5A
・ピンヘッダ無し スライドSW付 リセットSW付
・電池を下向きにCNを半田付
https://www.switch-science.com/catalog/7413/

wifiモジュール

・Pico-ESP8266(微雪電子)
・1500円 アマゾン
・内蔵の3端子で3.3Vを使用
https://www.amazon.co.jp/gp/product/B09KYF559X/ref=ppx_od_dt_b_asin_title_s00?ie=UTF8&psc=1
・解説
https://www.waveshare.com/wiki/Pico-ESP8266

細ピンヘッダ

・C-06641
・350円 秋月電子通商
・1列40pin 10本
https://akizukidenshi.com/catalog/g/gC-06641/

ロングピンソケット

・C-05779
・80円 秋月電子通商
・1列42pin 1本
https://akizukidenshi.com/catalog/g/gC-05779/

picoピン配置

基板の表側(白スイッチ側)から、USBコネクタを上にして
IOSPII2CUART
1GP00Rx0SDA0Tx
2GP10CS0SCL0Rx
3GND
4GP20SCK1SDA
5GP30Tx1SCL
6GP40Rx0SDA1Tx
7GP50CS0SCL1Rx
8GND
9GP60SCK1SDA
10GP70Tx1SCL
11GP81Rx0SDA1Tx
12GP91CS0SCL1Rx
13GND
14GP101SCK1SDA
15GP111Tx1SCL
16GP121Rx0SDA0Tx
17GP131CS0SCL0Rx
18GND
19GP141SCK1SDA
20GP151Tx1SCL

IOSPII2CUARTADC
40Vbus
39Vsys
38GND
373V3EN
363V3out
35Vref
34GP282
33GNDGND
32GP271SCL1
31GP261SDA0
30RUN
29GP22
28GND
27GP210SCL
26GP200SDA
25GP190Tx1SCL
24GP180SCK1SDA
23GND
22GP170CS0SCL0Rx
21GP160Rx0SDA0Tx

信号線組数

・GP0-22,25-28の27pin
・ADC 0-2の3組 (Vref入力も)
・I2C 0-1の2組 (SDA/SCL)
・UART 0-1の2組 (Tx/Rx)
・SPI 0-1の2組 (Tx/Rx/CSn/SCK)
*GP25は内部LED

対応言語

picoのソフト開発言語は、CかMicroPythonです。モニタのサンプルコードも、CとPythonでした。サンプルコードのCをArduino-IDE用に修正してもエラーとだけの表示で修正箇所がわかりませんでした。Cの1サンプルは30ファイルぐらいからなり色々なことが出来そうです。それに対してPythonは1ファイルだけで簡単に出来そうですが出来る範囲はCに比べて限定的なようです。そこで、Arduino-IDEを使わないC言語でプログラミングします。

C言語開発環境のインストール

https://www.zep.co.jp/nbeppu/article/z-pico-da2/
の通りにインストールします。10GB程度必要のようです。

インストールの流れ
1.ARM GCC Compiler 10.3-2021.10
 (Cコンパイラ)

2.CMake 3.23.1
 (実行ファイルのビルドに必要な各種ファイルの管理を自動化)

3.Build Tools for Visual Studio 2022
 (マイコン上で動作する実行ファイルを作る)

4.Python 3.10.4
 (補助的)

5.Git for Windows
 (公式SDK等をGitHubからダウンロードに必要)

6.Visual Studio Code
 (ソース・コードを書くエディタ)

7.TeraTerm 4.93
 (ターミナルソフト Picoから送信される文字列を受信)

をインストール後、CのソースファイルとCMake用の設定ファイルを作成し、ビルドを実行すると、Picoに書込む実行ファイル(.uf2)が得られます。

1.GNU Arm Embedded Toolchain

https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm
にて、Downloadsをクリック > gcc-arm-none-eabi-10.3-2021.10-win32.exe をクリック > 実行 > 指示に従い、最後はすべて選択 > 完了

2.CMake

https://cmake.org/
にて、右上のDownloadをクリック > Release(3.23.1) > Binary distributions > Windows x64 Installer > cmake-3.23.1-windows-x86_64.msi をダウンロード > 実行 > 指示に従い完了

3.Build Tools for Visual Studio 2022

Visual Studio 2022
https://visualstudio.microsoft.com/ja/downloads/
にて、下の方にある Visual Studio 2022 用のツール > Build Tools for Visual Studio 2022 > ダウンロード > 実行 > C++によるデスクトップ開発にチェック > 一覧で以下の項目にチェックが付いているのを確認 > インストール
・MSVC v143 -VS 2022 C++ x64/x86 ビルド...
・Windows 10 SDK
・Windows 用 C++ CMakeツール
・ツールのコア機能のテスト-ビルドツール
・C++ AddressSanitizer
指示に従い、PCを再起動する

4.Python 3.10.4

https://www.python.org/
にて、上のメニューのDownloads > Windows > Python 3.10.4の Download Windows installer(64-bit) > 実行 > Add Python 3.9 to PATHもチェック > Deisable path length limit をクリック

5.Git for Windows

https://gitforwindows.org/
にて、Download > 実行 >全てデフォルトのままクリック > 完了
PCのスタートメニューからGit Bashを起動しておく。

5-A.pico用のSDK

C:/Pico/ のディレクトリを作る。PATHには日本語がない事。Git Bashにて以下を入力

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

そして、以下が出来ていることを確認します。
C:\Pico\pico-examples
C:\Pico\pico-sdk

5-B.サンプルソースが実行できる事の確認

PCのスタートメニュー > Visual Studio 2022 > Developer Command Prompt for VS 2022 > Developer Command Promptが起動したら以下を入力

setx PICO_SDK_PATH "C:/Pico/pico-sdk"
cd C:/Pico/pico-examples
mkdir build
cd build
cmake -G "NMake Makefiles" ..
nmake

15分ぐらいかかります。
C:\Pico\pico-examples\build の中に実行ファイル(.uf2)が保存されます。例えば
C:\Pico\pico-examples\build\blink\blink.uf2 については、
picoの白ボタンを押しながらUSBケーブルを接続し、接続後白ボタンを離します。Picoはフラッシュ・メモリとして認識されるので“blink.uf2”をpicoにドラッグ・アンド・ドロップすれば書込み、すぐに実行します。

6.Visual Studio Code

https://code.visualstudio.com/download
にて、Windows > User Installer > 64bit をダウンロード > 実行 > デフォルトのままで、PATHへの追加 はチェックを付ける。

6-A.Visual Studio Codeの設定

PCのスタートメニュー > Visual Studio 2022 > Developer Command Prompt for VS 2022 > Developer Command Promptを起動
codeと入力してEnterを押すと Visual Studio Codeが起動します。
注)Windowsのスタート・メニューなどから起動した場合は、正常にビルドできないことがあります。
左側の縦メニューの拡張機能 > 検索欄に CMake Tools を入力 > CMake Toolsをインストール > 先のCMake Toolsの歯車マークをクリック > 拡張機能の設定 をクリック > Cmake:Configure Environment の項目の追加 をクリック > 項目欄に、PICO_SDK_PATH と 値欄に、C:\Pico\pico-sdk を記入 > OK
Cmake:Generatorの設定欄に NMake Makefiles と入力
ファイル > フォルダを開く... > C:\Pico\pico-examplesを選択
画面最下行に No Kit Selected と表示してしまうので、そこをクリックし、GCC 10.3.1を選択

サブディレクトリ無しのプログラムを作成

C:\Pico\test
のホルダを作り、以下の3ファイルを入れます。

1 test.c

以下を作ります。

#include <stdio.h>         // printf()を使う
#include "pico/stdlib.h"   // USBポートを使う
#include "hardware/gpio.h" // GPを制御
void main(void) {
    stdio_init_all();           // USBポートの初期化
    gpio_init(25);              // GP25(内蔵緑LED)の初期化
    gpio_set_dir(25, GPIO_OUT); // GP25を出力モードに設定し
    while (true){               // 永久Loop
        printf("Hello World!\r\n"); // シリアル通信で表示
        gpio_put(25, 1);            //GP25をH(点灯)
        sleep_ms(250);              // 250mS待つ
        gpio_put(25, 0);            //GP25をL(消灯)
        sleep_ms(250);              // 250mS待つ
    }
}

2 pico_sdk_import.cmake

C:\Pico\pico-examples\pico_sdk_import.cmake をコピーする。

3 CMakeLists.txt

CMake(ビルドに必要なファイル管理を自動化する)の設定リストです。

#CMakeの必要最小限のバージョンを設定
cmake_minimum_required(VERSION 3.12)

#公式の pico_sdk_import.cmake を読込む。プロジェクトの前に置く
include(pico_sdk_import.cmake)

#プロジェクト名と言語を設定。今回は project1 ●
project(project1 C CXX ASM)
#CとC++のバージョンを指定
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)

#SDKを初期化。Pico用環境を読込む
pico_sdk_init()

#ソースファイルからビルドする実行可能ターゲットを追加。 test という実行ファイルを作成するものとし,必要な test.c を読込む●
add_executable(test test.c)

#一般的に使用される機能を集約するpico_stdlibをプルします。ソースコードにビルドに必要な pico_stdlib のライブラリを読込む●
target_link_libraries(test pico_stdlib)

#USB出力は有効、UART出力は無効。標準出力を指定。printf などを使った場合にUSBポートが入出力になる。デフォルトはGP0(1番pin)がUART TXとして出力、GP1(2番pin)がUART RXとして入力●
pico_enable_stdio_usb(test 1)
pico_enable_stdio_uart(test 0)

#map/bin/hex/uf2等を作成。Picoに書込む.uf2ファイル作成指示を出す●
pico_add_extra_outputs(test)

ビルドする

PCのスタートメニュー > Visual Studio > Developer Command Prompt > 起動したら code と入力 > Visual Studio Code が起動 > ファイル > フォルダを開く... > C:\Pico\test のフォルダーの選択 > 最下行の No Kit Selected をクリック > GCC.... を選択 > 最下行の Build をクリックして、ビルドを実行 > しばらく待つ > C:\Pico\test\build\test.uf2 が出来る。
picoの白ボタンを押しながらUSBに接続 > 先の.uf2をpicoにコピー > picoの緑LEDが周期0.5秒で点滅する。
Tera Termを起動
設定 > シリアルポート...は以下にする
・ボーレート:115200
・データ:8bit
・パリティ:none
・ストップビット:1bit
・フロー制御:none
Tera Term画面に0.5秒おきに Hello World! を表示します。

サブディレクトリがあるプログラムを作成

各ディレクトリに CMakeLists.txt を作成します。

C:\Pico\test2\CMakeLists.txt ←作る
C:\pico\test2\pico_sdk_import.cmake ←先と同じ
C:\Pico\test2\test2_sub\CMakeLists.txt ←作る
C:\Pico\test2\test2_sub\test.c ←先と同じ

1 test2\CMakeLists.txt


#CMakeの必要最小限のバージョンを設定
cmake_minimum_required(VERSION 3.12)

#SDKでプル(プロジェクトの前に置く)
include(pico_sdk_import.cmake)

#プロジェクト名と言語を設定
project(project1 C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)

#SDKを初期化
pico_sdk_init()

#ビルドにサブディレクトリを追加●
add_subdirectory(test2_sub)

2 test2_sub\CMakeLists.txt


#ソースファイルからビルドする実行可能ターゲットを追加●
add_executable(test test.c)

#一般的に使用される機能を集約するpico_stdlibをプル●
target_link_libraries(test pico_stdlib)

#USB出力は有効、UART出力は無効●
pico_enable_stdio_usb(test 1)
pico_enable_stdio_uart(test 0)

#map/bin/hex/uf2等を作成●
pico_add_extra_outputs(test)

ビルドする

上記と同様、変更点は、
C:\Pico\test のフォルダーの選択 →
C:\Pico\test2 のフォルダーの選択
C:\Pico\test\build\test.uf2 が出来る →
C:\Pico\test2\build\test2_sub\test.uf2 が出来る
ビルドすると、上記と同じ動作をします。