サンプルコンポーネントの実行

以下の例では、GPIO を用いて、スイッチの ON/OFF の検出と、LED の点灯を行うコンポーネント (DigitalIn-RTC、DigitalOut-RTC) を作成して Raspberry Pi の特徴である GPIO の利用について理解を深めます。 サンプルコンポーネントのソースコードは以下からダウンロードできます。

Raspberry Pi の GIOP

Raspberry Pi には GPIO端子があり、これを利用することで様々な外部デバイスを利用することができます。

Raspberry Pi 本体に付属している GPIO のピンアサインを以下に示します。

raspberrypi_gpio_pinassign.png
Raspberry Pi GPIO のピンアサイン

GPIO を使用する場合には、各ピンの位置に注意してください。特に5V 端子を使用する場合、配線を誤ると Raspberry Pi 本体および SD カードを破壊してしまう危険がありますので、十分に注意してください。

ブレッドボード配線例

LED を点灯させる回路と、スイッチの ON/OFF を検出する回路を作成します。 ブレッドボード等があれば簡単に回路を組めますが、ない場合でも部品点数が少ないのでリード線をはんだ付けするなどすれば比較的容易に回路を組むことができるでしょう。 以下に、必要な部品のリストを示します。

部品表
LED回路
LED 1個
抵抗 100Ω (茶黒茶金) ~330Ω (橙橙茶金)
リード線 若干
スイッチLED回路
LED 1個
抵抗 330Ω (橙橙茶金) ~1kΩ (茶黒赤金)
リード線 若干

Raspberry Pi が1台の場合は、以下の LEDとスイッチ回路を同じ Raspberry Pi に接続します。 もし、Raspberry Pi が2台あるなら、それぞれの Raspberry Pi に LED とスイッチを取り付けると面白いかもしれません。

DigitalIn-RTC 用配線例

DigitalIn-RTC は、データポートに入力された bool 値 (true/false) を指定された GPIO ポートに出力するコンポーネントです。GPIO ポートの出力値を観測するために、GroundピンとGPIO 18ピンに LED と抵抗を接続し下図のような回路を作成します。

gpio_led_circuit.png
LED 接続回路図

ブレッドボードでこの回路を作成する場合はこのようになります。

3_rp2.png
ブレッドボードによる LED 回路配線例

DigitalOut-RTC 用配線例

DigitalOut-RTC は、GPIO ポートに入力された bool 値 (true/false) をデータポートから出力するコンポーネントです。 GPIO に値を入力するために、Ground, 3.3V Power, GPIO 17に抵抗とスイッチを接続して下図のような回路を作成します。

gpio_stiwch_circuit.png
タクトスイッチ接続回路図

ブレッドボードでこの回路を作成する場合はこのようになります。

3_rp3.png
ブレッドボードによりスイッチ回路配線例

コンポーネントのコンパイル

ソースコードを以下から Raspberry Pi にダウンロードして、DigitalIn-RTC/DigitalOut-RTC コンポーネントをコンパイルします。

DigitalIn-RTC のコンパイル

 $ unzip RaspberryPi_sample.zip
 $ cd RaspberryPi_sample/DigitalInRPI/
 $ vi CMakeLists.txt

ここで、CMakeLists.txt を書き換えて、ドキュメントの生成を抑制するよう設定します。

 option(BUILD_DOCUMENTATION "Build the documentation" OFF)
  ↓
 option(BUILD_DOCUMENTATION "Build the documentation" ON)
 
 $ mkdir build
 $ cd build
 $ cmake ..
 -- The C compiler identification is GNU 4.6.3
 -- The CXX compiler identification is GNU 4.6.3
   : 中略
 -- Configuring done
 -- Generating done
 -- Build files have been written to: /home/pi/RaspberryPi_sample/DigitalInRPI/build

OpenRTM-aist が正しくインストールされていれば、問題なく configure が終了します。 もし、OpenRTM や coil が無いなどでエラーが出た場合、OpenRTM-aist (C++版) が正しくインストールされていることを確認 (dpkg -l |grep openrtm 等) してください。

 $ make
  : 中略
 Scanning dependencies of target DigitalInComp
 [ 66%] Building CXX object src/CMakeFiles/DigitalInComp.dir/DigitalInComp.cpp.o
 [100%] Building CXX object src/CMakeFiles/DigitalInComp.dir/DigitalIn.cpp.o
 Linking CXX executable DigitalInComp
 [100%] Built target DigitalInComp
 $

コンパイルされたコンポーネント DigitalInComp は src の下にあります。

 $ ls src/
 CMakeFiles  cmake_install.cmake  DigitalInComp  DigitalIn.so  Makefile

DigitalOut-RTC のコンパイル

DigitalIn-RTC と同様にコンパイルします。

 $ cd RaspberryPi_sample/DigitalOutRPI/
 $ mkdir build
 $ vi CMakeLists.txt

ここで、CMakeLists.txt を書き換えて、ドキュメントの生成を抑制するよう設定します。

 option(BUILD_DOCUMENTATION "Build the documentation" OFF)
  ↓
 option(BUILD_DOCUMENTATION "Build the documentation" ON)
 
 $ mkdir build
 $ cd build
 $ cmake ..
 -- The C compiler identification is GNU 4.6.3
 -- The CXX compiler identification is GNU 4.6.3
   : 中略
 -- Configuring done
 -- Generating done
 -- Build files have been written to: /home/pi/RaspberryPi_sample/DigitalOutRPI/build
続いて make します。

 $ make
 -- OpenRTMConfig.cmake found.
 -- Configrued by configuration mode.
  : 中略
 Scanning dependencies of target DigitalOutComp
 [ 66%] Building CXX object src/CMakeFiles/DigitalOutComp.dir/DigitalOutComp.cpp.o
 [100%] Building CXX object src/CMakeFiles/DigitalOutComp.dir/DigitalOut.cpp.o
 Linking CXX executable DigitalOutComp
 [100%] Built target DigitalOutComp
 $

コンパイルされたコンポーネント DigitalOutComp は src の下にあります。

 $ ls src/
 CMakeFiles  cmake_install.cmake  DigitalOutComp  DigitalOut.so  Makefile

コンポーネントの実行

各RTC が正常にコンパイルできたら、NameServer を起動後、各RTC を起動します。

 $ rtm-naming
 $ sudo  /home/pi/RaspberryPi_sample/DigitalOutRPI/build/src/DigitalOutComp &
 $ sudo  /home/pi/RaspberryPi_sample/DigitalInRPI/build/src/DigitalInComp &

&color(red){※サンプルコンポーネントは GPIO を利用するので root 権限で実行する必要があります。}

PC上で RTSystemEditor を起動し、Raspberry Pi上の NameServewr に接続します。 各RTC を配置し、ポート間の接続を行った後、活性化(Activate)します。

3_rp4.png
サンプル RTC の実行

各RTC が正常に起動すると、タクトスイッチの状態に応じて、LED が点灯/消灯するようになります。