*

ライブラリでRasPiのピンにアクセス(1)-ライブラリを作ります

公開日: : 最終更新日:2020/03/08 C++, pigpio, RaspberryPi, 開発

どもです。

これまでこのブログでは、RaspberryPiのGPIOとかSPIを使用したアプリケーションを提示してきました。
その際には、pigpioというライブラリを使用していました。
このライブラリは、非常に機能が豊富で便利です。
しかし、ブログを書いたりしていると、同じようなコード、ほんの少ししか違わないコードを何回も書くことが多くありました。
これは、正直面倒くさいです。
そこでこの問題を解決するために、もう少し簡便にH/Wの操作をできるようにするライブラリを作成してみます。

1.どうやって作る?

これから作成するライブラリは、pigpioをラップするようにして作成します。
本当は、まったく新規に作成したいのですが、個人的にそんなスキルがないので、既存のライブラリを使わせてもらいます。

2.まずは作ってみました

まず、基本的な機能としてGPIOを使用する機能を実装してみました。
詳細を説明するよりも、まずはサンプルを紹介します。

上記コードでのCPartというクラスが、今回作成するライブラリで基本とするクラスです。

詳細を説明するよりも、まずはサンプルを紹介します。
これまでLチカするためには、ライブラリを初期化して、GPIOの設定を行って…という手順が必要でした。
しかし、それらの処理は、上記サンプルでの

で、実行されます。
Lチカするための準備/設定が、1行で済みます。

GPIO、LEDが接続されたGPIOピンのレベルのHIGH/LOWを切り替える処理は、pigpioと同じような処理です。

3.詳細について

前章で紹介したコードの内容を紹介します。

3.1.CPartのコンストラクタ

前章でも紹介しましたが、CPartのコンストラクタ

では、CPartが使用するGPIOピンの番号と入力/出力を設定しています。
入力されたGPIOピン番号と入出力の設定は、メンバ変数として保持されます。

3.2.CPart::Write()

この関数で、実際にGPIOの値を変更します。
実装は、以下の通りです。、

この実装からわかるように、CPartクラスのもう一段(?)下にCGpioクラスを設けています。
そしてこのCGpioは、シングルトンです。

3.3.なぜシングルトン?

CPartはCGpioを参照しており、CGpioはシングルトンとしています。
CGpioは、RaspberryPiのGPIOピン、即ちH/WのI/Fに対応するクラスです。
そして、このH/Wは決定しています。
(RaspberryPiのバージョンが変わらない限り)変化しません。
そういった意味で、「1つだけ」存在します。

…上手な説明になっていませんが、CGpio/GPIOピンの状態は、それを使用しているアプリケーションが動いている間は、保持しておく必要があります。
これらのことから、CGpioはシングルトンにしています。

3.4.CPart::Read()

おまけです。
GPIOへのWriteと同様、Readも実装しています。
コードは、

です。
Write()とほとんど同じです。

4.まとめ

今回から、RaspberryPiのGPIOに接続された、GPIOを使用するH/Wに対応するクラスのライブラリの開発を始めました。
まず初めに、ということで作ったライブラリを使用してLチカするサンプルを紹介しました。
今後も開発を続けていくので、新規の機能を追加したら、記事にしていきます。

ではっ!

5.公開しています

GitHubで、公開しています。
使ってみて下さい。

ではっ!

関連記事

google_test

C言語でEV3開発(6)

どもです。 今回のエントリーは、前回のエントリーの続き、google testでの単体テスト環境に

記事を読む

raspberry-pi

ライブラリでRasPiのピンにアクセス(2)-SPIのインターフェース追加

どもです。 前回のエントリでは、RaspberryPiのピンをより簡便に使用できるようにするた

記事を読む

toppers

C言語でEV3開発(26)-EV3で機械学習(1)-QLearningをC#に委譲してみた

どもです。 前回の投稿では、Q-LearningをEV3本体に実装してみたら、メモリが足りなくて動

記事を読む

GitHub

Windowsでのカバレッジ測定-OpenCppCoverageを使ってみた(2)

どもです。 前回のエントリーで、OpenCppCoverageというカバレッジを測定する、フリーの

記事を読む

EF_GRY-OR_png

Eclipseで単体テストするときの注意点(?)

どもです。 今回のエントリは、Eclipse/cygwinで単体テストを行う際にハマってしまっ

記事を読む

Arduino_Logo

フォトレジスタを使ってみた-Arduinoで光検出

どもです。 今回は、タイトル通り「フォトレジスタの使い方」です。 1.フォトレジスタって何?

記事を読む

MindStormControl_SprachScreen

EV3開発サポートツール(1)-C#のユーザーコントロール開発

どもです。 突然ですが、今回はC#に関するエントリになります。 具体的には、C#/WPFで、独自

記事を読む

no image

C言語でEV3開発(10)-opOUTPUT_CLEAR_COUNTコマンド

どもです。 前回のエントリーのラストで、「モーターを動かすコマンド」と書きましたが、今回紹介するコ

記事を読む

toppers

C言語でEV3開発(18)-モードの遷移の設計-コマンド通信処理の準備

 どもです。  今回は、前回紹介したEv3とBluetoothで通信する機能を

記事を読む

raspberry-pi

QtでRaspberryPi/GUI開発(1):ためしに時計を作ってみた

どもです。 また更新の間隔が空いてしまいました。 久しぶりの更新です。 前回のエントリーで

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

c_sharp_eye_catch
Windowsでのカバレッジ測定-OpenCoverageを使ってみた

どもです。 以前、OpenCppCoverageを使用してWindo

EF_GRY-OR_png
Eclipseで単体テストするときの注意点(?)

どもです。 今回のエントリは、Eclipse/cygwinで単体

cygwin_my_image
Windows10/cygwinの音を消す

どもです。 最近、Windows10/cygwinで作業をする場

raspberry-pi
ライブラリでRasPiのピンにアクセス(3)-SPIのインターフェース追加(その2)

どもです。 今回のエントリも、前回に引き続き、Raspberry

cygwin_my_image
cygwinでstartコマンド

どもです。 このエントリでは、cygwinでWindows/コマ

→もっと見る

PAGE TOP ↑