ブログ

Raspberry Pi向けライブラリ「WiringPi」をArmadillo-640で動かしてみる

at_akihito.irie
2021年7月15日 18時16分
Raspberry PiはRaspberry Pi財団の登録商標です。

GPIOを操作するRaspberry Pi向けライブラリのひとつであるWiringPiをArmadillo-640上で動くように移植してみました。

WiringPiはコマンドラインでGPIOを制御するgpioコマンドと、C言語やPythonなど主要なプログラム内で使用できるライブラリを提供します。
制限はありますが、一部のコマンド/ライブラリはArmadillo上で使用可能です。

Armadillo-640上で以下のコマンドを実行し、WiringPiのソースコードをダウンロードしてきます。

[armadillo]$ sudo apt update && sudo apt upgrade
[armadillo]$ sudo apt install -y git build-essential
[armadillo]$ git clone https://github.com/WiringPi/WiringPi.git

上記のWiringPiそのままではうまく動作しない部分がありますので、一部修正してみました。
こちら からパッチをダウンロードし、Armadillo-640上でWiringPiのソースコードに当てた上で、ビルド&インストールしてください。

[armadillo]$ cd WiringPi
[armadillo ~/WringPi]$ ls wiringpi_armadillo.patch
wiringpi_armadillo.patch
[armadillo ~/WringPi]$ patch -p1 < wiringpi_armadillo.patch

以下のコマンドを実行し、インストールします。

[armadillo ~/WiringPi]$ ./build

gpioコマンドを使用する

使用上の制限事項と注意

gpioコマンドには様々なサブコマンドが実装されていますが、Armadillo上で動作可能なサブコマンドは以下の通りです。

  • -h
  • -R, -V
  • -v
  • -warranty
  • exports
  • export
  • edge
  • unexport
  • unexportall
  • read
  • write
  • toggle
  • blink
  • mode

また、以下のコマンドは/sys/class/gpio/以下にexport済みのGPIOに対してのみ実行可能です。

  • unexport
  • read
  • write
  • toggle
  • blink
  • mode

また、modeはinかoutのみ指定可能です。

[armadillo]$ gpio mode 22 in  // OK
[armadillo]$ gpio mode 22 pwm // NG
pinMode: Invalid mode: should be INPUT or OUTPUT in Armadillo board

使用例

実行可能なgpioコマンドの一部を紹介します。

以下のコマンドを実行することでヘルプを確認できます。

[armadillo]$ gpio -h

以下のコマンドを実行することで指定したピンをinputモードでexportできます。

[armadillo]$ gpio export 22 in

以下のコマンドを実行することで指定したピンのvalueを取得できます。

[armadillo]$ gpio read 22
1

以下のコマンドを実行することで指定したピンの出力値を設定できます(outputモードでexportされているピンに対してのみ使用可能)。

[armadillo]$ gpio export 22 low
[armadillo]$ gpio write 22 1

以下のコマンドを実行することで/sys/class/gpio/以下にexportされている全てのGPIOをunexportします。

[armadillo]$ gpio unexportall

C言語から使用する

wiringPi.hをインクルードすることで、C言語のプログラムから各ライブラリを使用可能になります。

使用上の制限事項と注意

wiringPiの実行時に初めに行うセットアップは必ずwiringPiSetupSys()をご使用ください。
wiringPiSetupGpio()などの他のセットアップライブラリは、Armadilloに対応しておりませんので正しく動作しません。

また、C言語での利用につきましても、セットアップ前にexport済みのGPIOのみ操作対象となりますので、あらかじめexportしておいてください。

動作確認済みのAPI

  • wiringPiSetup
  • wiringPiSetupSys
  • pinMode
  • digitalRead
  • digitalWrite
  • piGpioLayout
  • piBoardRev
  • piBoardId
  • waitForInterrupt
  • delay
  • delayMicroseconds
  • millis
  • micros

使用例

以下、赤色LEDをGPIOで制御するため、Armadillo-640に以下のarmadillo-640-led.dtbを書き込みます。

armadillo-640-led.dtb

dtb書き換え手順は こちら を参考にしてください。
dtb書き換え後にはrebootコマンドを実行して再起動してください。

準備段階として以下のコマンドを実行し、赤色LEDを制御するGPIO(GPIO番号: 5)をexportします。

[armadillo]$ gpio export 5 in

その後、以下のサンプルコードをコンパイル・実行することで、赤色LEDが点滅します。

#include <stdio.h>
#include <wiringPi.h>
 
#define LED GPIO(1, 5) // LED(赤) -> GPIO1_IO05
 
int main(void) {
    wiringPiSetupSys(); // WiringPiでGPIOを扱う前に必ず実行する
 
    pinMode(LED, OUTPUT); // GPIO1_IO05のdirectionをOUTに設定
 
    // 0.5秒間隔でLED(赤)が点滅する
    while (1) {
        digitalWrite(LED, HIGH);
        delay(500);
        digitalWrite(LED, LOW);
        delay(500);
    }
    return 0;
}

サンプルコードは こちら からダウンロードできます。
コンパイル時には-lwiringPiをオプションに追加してください。

[armadillo]$ gcc -o test test.c -lwiringPi
[armadillo]$ sudo ./test