C#と言えば、Windows環境だけと思われがちですが、.Net CoreをLinux環境にインストールすれば、C#で開発したアプリケーションが動作します。また、Raspberry Pi(ラズベリーパイ)でも、C#を使ってIoT開発を行うことができます。この連載では、C#によるIoTプログラミングを解説します。
対象読者
IoTに興味があり、C#とRaspberry Pi(Linux環境)の基本的な知識がある方を対象とします。Linuxや電子工作の初歩的な説明は割愛しているので、「ラズベリーパイをつかったセンサープログラミング超入門」の記事なども併せて参照してください。
はじめに
前回で、WindowsとRaspberry Pi環境の準備が整ったので、今回は、C#によるGPIOの基本操作を解説します。
GPIO
Raspberry PiでLEDなどの電子部品を操作するには、GPIO(General Purpose Input/Output)の制御が必須です。
GPIOの制御は、ハードウェア的には、SoC(System on Chip、CPUと周辺パーツを集積したもの)のレジスタを操作することなのですが、Raspberry Pi(Raspbean OS)では、直接レジスタを操作するだけではなく、Linuxの仮想ファイルシステムを用いて制御することもできます。仮想ファイルシステムとは、さまざまなデバイスに、あたかも通常のファイルであるかのようにアクセスできる仕組みのことです。
仮想ファイルであれば、プログラムからは通常のファイルとして扱えるため、どのプログラミング言語でもGPIOの操作は可能です。ただし、仮想ファイルを操作してGPIOを制御するのは少し面倒で、GPIOの設定にも制限があります。そのため、プログラムからGPIOを制御するには、GPIO制御に特化したツールやライブラリを用いるほうが手軽です。
gpioコマンド
Raspberry Pi(Raspbean OS)では、WiringPiというGPIOの制御を行うC言語のライブラリが、デフォルトでインストールされています。WiringPiには、コマンドラインから使えるgpioコマンドが含まれています。例えば、GPIOの状態を確認するには、次のように指定します。
$ gpio readall
GPIOの番号と、ピンの状態(IN、OUTなど)が一覧で表示されます。またgpioコマンドでは、状態の参照だけではなく、特定のピンの制御ができるので、シェルスクリプトからGPIOを操作することも可能です。
C#によるGPIO制御
.Net Core環境のC#を用いてGPIOを制御するには、次の方法があります。
- 仮想ファイルシステムを利用する
- WiringPiなどのライブラリ(.Net用以外)を利用する
- .Net用のライブラリを利用する
仮想ファイルシステム
まず今回は、仮想ファイルシステムを利用してみましょう。仮想ファイルシステムによる操作の流れは、次のようになります。
- 使用するGPIOピンの初期設定
- GPIOピンの出力、入力の設定
- GPIOの制御
- GPIOピンの終了処理
1.使用するGPIOピンの初期設定
仮想ファイルを用いてGPIOを利用するには、使用するGPIOピンの初期設定が必要です。最初に、仮想ファイルの/sys/class/gpio/exportに、使用したいGPIOピンの番号を書き込みます。すると、/sys/class/gpio/ディレクトリに、GPIOピンを制御するための仮想ファイルが作成されます。例えばGPIO4なら、/sys/class/gpio/gpio4となります。この作成されたファイルを使って、GPIOを制御します。
2.GPIOピンの出力、入力の設定
指定したGPIOピンを入力で使うか出力で使うかの指定を行います。これは、仮想ファイルの/sys/class/gpio/gpio番号/directionに、"in"または"out"の文字列を書き込むことで設定します。
3.GPIOの制御
GPIOピンの制御は、仮想ファイルの/sys/class/gpio/gpio番号/valueを用います。ピンが出力であれば、このファイルに、"0"または"1"を書き込むことで、OFF、ONを設定できます。入力であれば、このファイルを読み出すことで、ピンの状態を0または1の値として確認できます。
4.GPIOピンの終了処理
GPIOピンの使用後は、仮想ファイルの/sys/class/gpio/unexportに、使用したGPIOの番号を書き込みます。すると、/sys/class/gpio/ディレクトリに作成された仮想ファイルが削除されます。
この記事は参考になりましたか?
- C#ではじめるラズパイIoTプログラミング連載記事一覧
- この記事の著者
-
WINGSプロジェクト 高江 賢(タカエ ケン)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
