ラズピコ GPIOとLチカ

ラズピコ GPIOとLチカ

皆さん こんにちは。

今回は制御の基本、GPIO出力でLチカ動作を確認してみます。

環境構築とプロジェクトのつくり方については こちら をご覧ください。

ラズピコのプログラムを書くにはSDKについて学んでいくのが良いと思います。

ラズピコのドキュメント

ドキュメントは こちら の下の方に Documentsがあり各ドキュメントのリンクが貼られています。

プログラミングする時には、特に SDK と API のドキュメントが役に立つと思います。

回路図

Lチカ(LEDをチカチカ)させるには、マイコンの端子に抵抗を介してLEDをつなぐ必要があります。
そこでまず回路図を見てみましょう。

ラズピコのデータシートには回路図が含まれていますので、まずそれをダウンロードしましょう。

ラズピコのデータシート からダウンロードしてください。

24(PDFでは25)ページに回路図がありました。
そして右のほうにLEDが見つかりました。GREENと書いてあります。

配線や部品の実装が不要になりますので、これを使ってみることにします。

信号名は GPIO25 と書かれています。LEDのカソードがGNDにつながっているので、GPIO25を HレベルにすればLEDが点灯することがわかりました。

GPIO

汎用入出力ピンはGPIOと呼ばれています。
ラズピコに実装されているマイコン RP2040 は 36本のGPIOを備えています。
そのうちの6本はQSPI Flash(プログラムを格納するフラッシュメモリー)とのインターフェースに使われます。

従って私達ユーザーは残りの30本(GPIO0~29)をGPIOとして使うことができます。
更にそのうちの4本(GPIO26~29)はADC(Analog Digital Converter)の入力として使うこともできます。

このあたりについては RP2040データシート の2.19.1項に書かれていますのでご確認ください。

更にラズピコの40ピンの端子には以下の26本だけが割り当てられているようですからご注意ください。

GPIO0~22 の23本と GPIO26~28の3本 (ラズピコの回路図より)

GPIOの機能

GPIO端子はGPIO以外の機能を割り当てることができます。これについては RP2040データシート の2.19.2項をご覧ください。
割り当てる機能は、GPIO CTRLレジスタのFUNCSELフィールドに書き込むことで選択します。

各GPIOは一度にひとつの機能だけを選択することができます。

それからある機能(ここでは例えとして UART0 TX)はひとつのGPIOでのみ選択されるべきです。

例えば UART0 TX は GPIOの 0, 12, 16, 28 に割り当てることができるので、UART0 TXを使う場合には、この中のいずれかひとつだけを選択します。

「2つ以上割り当ててはいけない」ということです。
(あたりまえと言えばあたりまえの話ですね)

GPIO出力として使う

レジスタに値を設定するためのAPIが用意されているので、それを使ってみることにします。

さっと眺めたところ、

gpio_init()
gpio_set_dir()
gpio_put()

の3つを使えば良さそうです。

ここ にサンプルプログラムがあるようなのですが、簡単すぎるせいか GPIO の例は見つかりませんでした。

GPIOに関するAPIは こちら を参考になさってください。

GPIOなのにAPIの数がたくさんあってビックリしました。

これら全てをかみ砕いていたら時間が足りません。

ネットでサンプルを探しながら柔軟にお勉強していくのが良さそうに思います。

とりあえず上に書いた3つの関数のリンクを貼っておきます。
個人的には、もう少し詳しく説明して欲しい感じがします。

gpio_init()

gpio_set_dir()

gpio_put()

gpio_init()の中で先に出てきた機能設定を行っているようです。
GPIO(汎用入出力)として使うには GPIO_FUNC_SIO に設定するのですね。
“SIO”がGPIO機能であるということが何かピンと来ませんけれど。

gpio_set_dir()では方向(入力か出力)を決める。
gpio_put(gpio, 0)で low を出力する。
gpio_put(gpio, 1)で high を出力する。(今回の回路では第2引数に 1 を指定することでLEDが点灯します)

それではプロジェクトをつくり、ソースコードを書いて動作させてみることにします。

プロジェクトをつくる

プロジェクトのつくり方や、VSCodeの起動方法等については省略します。

それぞれについて、わからない方は ラズピコ VSCode + Picoprobe でデバッグ環境を構築する の記事をご覧になってください。

ちょっと手順がややこしいので慣れるまで辛抱してください。

Project Name: picoGpioOut とする
IDE Optionsは
Create VSCode project にチェックを入れる
Debugger: では PicoProbe を選択する

VSCodeを起動する

起動後、何か開いてたら File – Close Folder で閉じた後、File – Open Folder から picoGpioOut のフォルダーを辿って選択します。

こちらの環境では C:\Users\m3925\Documents\Pico\pico-project-generator\picoGpioOut です。

m3925の部分は皆さんのユーザー名に置き換えてください。

vscode関連の json ファイルは前回作成済のプロジェクトのものをドラッグ&ドロップでコピー&ペーストすると良いでしょう。

ソースコードを書く

VSCodeのツリーから picoGpioOut.c を選択して次のように編集し、保存します。

“pico/stdlib.h” は一般的に使われるヘッダを取り込んでいます。
今回のプログラムで必要なのは hardware/gpio.h になります。このヘッダはGPIOにアクセスするために使われます。

#include "pico/stdlib.h"

#define LED_PIN 25

int main()
{
    stdio_init_all();

    gpio_init(LED_PIN);
    gpio_set_dir(LED_PIN, true);

    gpio_put(LED_PIN, 0);
    gpio_put(LED_PIN, 1);
    gpio_put(LED_PIN, 0);
    gpio_put(LED_PIN, 1);

    return 0;
}

デバッグ開始

それでは接続に問題がないことを確認した後、Run – Start Debugging を選択します。

以下のようにmain()のところでカーソルが停止します。

F5キーを押してしまうと一瞬でプログラムが停止してしまいますので、ここではF10キーを押して1行ずつステップ実行していきます。

gpio_put(LED_PIN, 0) でLEDが消灯、gpio_put(LED_PIN, 1) で点灯すれば成功です。

gpio_init()の処理

Run – Restart Debugging を選択してプログラムをリスタートさせます。

gpio_init()のある行をクリックしてカーソルを移動し、F9キーを押してブレークポイントを貼ります。

F5キーを押してプログラムを走らせると、gpio_init()の行で停止します。

ここでF11キーを押すと、gpio_init()の中に入っていきます。

中に gpio_set_function(gpio, GPIO_FUNC_SIO); と書かれた行があります。

このAPIがGPIOの機能設定を行うもので、汎用GPIOの場合は、やはり”GPIO_FUNC_SIO”を設定していることが確認できました。

いかがでしたか?

皆さまの環境ではデバッグ動作やLチカ動作を確認できましたか?

お疲れさまでした。

GPIOカテゴリの最新記事