*

ライブラリで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で、公開しています。
使ってみて下さい。

ではっ!

関連記事

MY_MFC_LOGO

MFCプログラミング(2):コピー機能の実装

どもです。 前回に引き続き、今回もMFCネタです。 内容は、MFCでの「クリップボードへのデータ

記事を読む

MY_MFC_LOGO

MFCプログラミング(3):クリップボードへのデータ形式の登録

どもです。 今回も、クリップボードネタです。 1.背景(簡単に) アプリケーションにコピー

記事を読む

eclipse_oxygen

Linux/EclipseでRaspberryPiのクロス環境を構築してみた…がっ!

どもです。 前回のエントリでは、WindowsにRaspberryPi3のクロスコンパイル環境の構

記事を読む

eclipse_oxygen

苦肉の策でLinux/EclipseでRaspberryPiのクロス環境を構築してみた

どもです。 前回のエントリでは、仮想環境(VirtaulBox)を用いたRaspberryPi3の

記事を読む

Arduino_Logo

ホールセンサーの種類と使い方

どもです。 今回のエントリは、表題にある「ホールセンサー」についてです。 1.「ホールセンサ

記事を読む

toppers

C言語でEV3開発(20)-超音波センサと安全状態

どもです。 前回は、BluetoothでPCとEv3を接続してコマンドの送受信について書きました。

記事を読む

Arduino_DHT11

温度(湿度)センサを使ってみた(1)-ArduinoでDHT11

どもです。 今回は、久しぶりにセンサーを購入して使ってみたので、それについて記載します。 1.使

記事を読む

no image

C言語でEV3開発(8)-opOUTPUT_POWERコマンド

どもです。 今回のエントリーでは、EV3でモーターを動かします。 なお、今回のエントリーでも

記事を読む

raspberry-pi

QtでRaspberryPi/GUI開発(9)-SPI通信をしてみた

どもです。 えー。 「Qtで…」とか書いておきながら、今回はQtは出てきません。 今回のエ

記事を読む

iot_at_home_eye_catch

IoT開発(4)-ESP-WROOM-02を電池で駆動

どもです。 この記事は、以下の記事の続きです。 IoT開発(1)-ESP-WROOM-02の

記事を読む

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="">

arduino_relay_switch_002_ae_g5v_drv_eye_catch
Arduinoでリレースイッチ(2)-AE-G5V-DRV

どもです。 前回の記事では、「フォトカプラリレー」を使用したLチ

tlp222af_001_eye_catch
Arduinoでリレースイッチ(1)-TLP222AF

どもです。 つい先日、やっとのことでリレースイッチを手に入れるこ

c_sharp_eye_catch
外部からMariaDbにアクセスする(2)-C#からMariaDbにアクセスする。

どもです。 前回のエントリで、外部からMariaDbにアクセスす

c_sharp_eye_catch
外部からMariaDbにアクセスする(1)-データベースの設定

どもです。 今回は、Linux上のMariaDbにWindows

think_about_utest
middle_unit
最小…よりも(ほんの)少し大きいテストフレームワーク

どもです。 今回は、単体テストのフレームワークについて書きます。

→もっと見る

PAGE TOP ↑