コマンドラインからGPIOを操作する

  1. GPIOについて
    Raspberry Piで何かを動かしたり、センサーからデータを取り込んだりする場合、基板上に並んだ40本(旧モデルでは26本)のピンに信号を送ったり、信号を読み取ったりすることでできるようになります。
    つまり現実世界とのインターフェースで、言うところのIoT的なことができるようになります。
    このピンには番号が振られており、Raspberry Piに付属のカードにも記載されております。
    f:id:tomaberry:20170212141136j:plain
    このうち、GPIO xx と記載されているピンが実際にデータの入出力に使用できるピンになります。GPIOというのは"General-Purpose Input/Output"の略で、入力にも出力にも使用することができます。
    なかでも後ろに()がついているピンはさらに特殊用途に使えるものですが、とりあえずは何もついていないピンから使いましょう。
    ちなみに番号は「GPIO xx」のxxにあたるGPIO番号と、基板上の物理的な位置に対応した番号(上の図の緑の部分)の両方で指定することができます。

  2. gpioコマンド
    ではまず、コマンドラインから現在のGPIOの状態を見てみましょう。
    コマンドラインからは、"gpio"コマンドでGPIOを操作することが可能で、
    $ gpio readall
    と入力すると、現在のピンの状態が一覧表示されます。f:id:tomaberry:20170212144148p:plainここで真ん中の"Physical"という部分が物理的な番号で、両端の"BCM"がGPIO番号になります。
    さらに"Mode"の部分に現在のピンのモード(IN/OUT)が、"V"の部分にピンの値(1ならON、0ならOFF)が表示されます。

  3. GPIOからの入力
    個々のGPIOの値(先の"V"の部分)を読み取る場合は以下のようにコマンドを入力します。
    $ gpio -g read 3
    1
    ここで"-g"は番号種別、"read"は操作種別、"3"はピン番号になります。
    つまり、このコマンドの意味は「GPIO番号3のピンの値を読む」ということになります。
    ピン番号を物理番号で指定したい場合は、オプションが"-1"(数字の1)になります。つまり、以下でも同じ結果が得られます。
    $ gpio -1 read 5
    1
  4. GPIOへの出力
    GPIOに信号を出力する場合は以下のようになります。
    $ gpio -g write 17 1
    "17"がピン番号、"1"が値(1がONで0がOFF)、つまりこのコマンドの意味は「GPIO番号17のピンを1(ON)にする」ということです。
    $ gpio -g read 17
    1
    とすれば、実際に値が"1"に変わっていることが確認できます。

  5. GPIOのモード変更
    次にピンのモード変更について説明します。
    最初の"gpio readall"コマンドの出力より、GPIO番号3のモードは"IN"、GPIO番号17のモードは"OUT"であることがわかります。
    "IN"になっているピンは入力モード、つまり各種センサーなどから値を取得するためのピンで、"OUT"は出力モード、つまりLEDやモーターなどに信号を送信するためのピンということになります。
    この「モード」も、gpioコマンドによって変更することができます。
    $ gpio -g mode 3 out
    とすると、GPIO番号3のピンのモードが"OUT"に変わります。
    もとに戻す場合には、
    $ gpio -g mode 3 in
    とすればOKです。