Raspberry PiでIoTなシステム開発:オンボードLEDのコントロールはBCMナンバーで、WiringPiのコントロールは独自のナンバーで

当たり前のことではあるのですが、PiでGPIOを指定するときはコアであるBCMの番号が原則です。が、WiringPiは何故かGPIOに対して独自の付番をしているので、対照関係が結構ややこしいです。ヘッダピンの番号がさらにまた別になっています。で、今回オンボードLEDのコントロールのため、以下のコマンドでGPIOに対応させるようにしたのですが、このコマンドはBCMの番号で指定します。

    system(""echo gpio | sudo tee /sys/class/leds/led0/trigger"");    system(""echo 21 | sudo tee /sys/class/leds/led0/gpio"");

一方このGPIOをWiring PiでコントロールするときはWiring PiでコントロールするときはWiring Piの番号でコントロールします。

    while(1) {        digitalWrite(29, 1);        usleep( 50000);        digitalWrite(29, 0);        usleep(950000);   }

コード上ではWiring Piの世界とBCMの世界の区別がぱっと見ではわかりにくいので、気をつけた方がいいですね。”””

ピン番号を選ぶ場合

本文の対比は既定のwiringPiSetup()でWiringPi番号を使った例です。wiringPiSetupGpio()ならBCM番号、wiringPiSetupPhys()ならヘッダの物理番号を使うため、WiringPiだから常に独自番号とは限りません。オンボードLEDの接続や制御方法も基板ごとに異なります。