Jetson NanoにはGPIOポートがJ41というピンヘッダに用意されている(図1)。今回はPin 31とPin 33にLEDを取り付けてみることにする。
さて、Jetson NanoでGPIOを扱うためのパッケージとして、NVIDIAはJetson-gpioを提供している。面白いのは、このJetson-gpioが「Raspberry Pi」のGPIOパッケージ(RPi.GPIO)とインタフェースが互換になっていることで、特にPythonからだと最初のimportの宣言だけ変更すれば、後はRaspberry Piと同じ様に記述可能である。
さてこのパッケージ、GitHubからダウンロードしても構わないのだが、確認したところ/opt/nvidia/jetson-gpio/の下に既にインストール済であった。もしインストールされていなければ、以下のコマンドでインストールできる。
pip install Jetson.GPIO
さて、この状態で動作するかどうかをちょっと確認してみよう。まずは回路をご紹介。図2は回路図、というにはおこがましいほどだが、今回の回路である。OSYL3133AとOSNG3133Aは筆者の手持ちのLED(URLで分かる通り秋月電子商会でまとめ買いしたもの)で、おおむね2Vで20mAほどの消費電流となる。
Jetson NanoのGPIOは3.3V出力なので、プルダウン抵抗は65Ωほどになる計算だが、手持ちがなく100Ωを利用している。Pin 31とPin 33から信号を、Pin 39からGNDを取る形である(図3)。回路そのものはブレッドボード上に実装した。
さて、図1にもちょっとあるが、rootになって直接「/sys/class/gpio」をたたくことが可能である。今回の場合、Pin 31とPin 33をオンにすればLEDが点灯するが、Pin 31はgpio200、Pin 33はgpio38に相当するので以下のコマンドを実施したところ、きちんと両方のLEDが点灯した(図4)。
echo 38 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio38/direction echo 1 > /sys/class/gpio/gpio38/value echo 200 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio200/direction echo 1 > /sys/class/gpio/gpio200/value
さて、次はこれをPythonの中から操作する方法だ。まずは、アプリケーションからGPIOポートを操作する権限を与える必要がある。このために、gpioというグループを作り、ユーザーをこのgpioというグループに所属させた上で、gpioのグループにGPIOポートを操作する権限を付加するという手順を取る。
sudo groupadd -f -r gpio sudo usermod -a -G gpio your_user_name(←ここに自分のユーザー名を入れる)
次のグループへの権限付加だ。以下のコマンドを入力すればよい。
sudo cp lib/python/Jetson/GPIO/99-gpio.rules /etc/udev/rules.d/
続けて以下のコマンドを入力する。
sudo udevadm control --reload-rules && sudo udevadm trigger
これで登録できるはずなのだが、筆者の環境では再起動が必要だった。再起動後には、GPIOポートへの操作の権限が付加されている。
Copyright © ITmedia, Inc. All Rights Reserved.