今回はJetsonNanoとPCA9685を組み合わせたときに発生したエラーについてです。
PCA9685にはさらにサーボモーターを接続してこちらをサンプルプログラムで動かすところまで説明していきます。
PCA9685のパッケージをインストール
PCA9685を利用するためにパッケージをインストールしておきます。
1 |
pip3 install Adafruit_PCA9685 --user |
サンプルコードを実行したときに発生したエラー
まずはサンプルコードが格納されているフォルダへ移動します。
1 |
cd Adafruit_Python_PCA9685/examples |
次に配線を行ってサンプルコードを実行してみると以下のエラーが発生しました。
1 2 3 4 5 6 7 8 9 10 11 |
sudo python simpletest.py Traceback (most recent call last): File "simpletest.py", line 17, in <module> pwm = Adafruit_PCA9685.PCA9685() File "build/bdist.linux-aarch64/egg/Adafruit_PCA9685/PCA9685.py", line 74, in __init__ File "/home/jetbot/.local/lib/python2.7/site-packages/Adafruit_GPIO/I2C.py", line 63, in get_i2c_device busnum = get_default_bus() File "/home/jetbot/.local/lib/python2.7/site-packages/Adafruit_GPIO/I2C.py", line 55, in get_default_bus raise RuntimeError('Could not determine default I2C bus for platform.') RuntimeError: Could not determine default I2C bus for platform. |
I2CのBusが見つからないそうです。結果として参考記事の方法でクリアしましたのでこちらを実行していきます。
対策として「I2C.py」を編集する
以下のファイルを編集していきます。
~/.local/lib/python3.6/site-packages/Adafruit_GPIO/I2C.py
1 2 |
cd .local/lib/python3.6/site-packages/Adafruit_GPIO/ nano I2C.py |
ファイルが開けたら「get_default_bus()」の部分を以下のようにコメントアウトして、ハードコーディングで「1」を返却するようにします。もしI2C Busの2番を使用するときはこちらを2にします。
1 2 3 4 |
# if busnum is None: # busnum = get_default_bus() # return Device(address, busnum, i2c_interface, **kwargs) return Device(address, "1", i2c_interface, **kwargs) |
これでI2CのBus1が見つかるかどうか以下のコマンドで確認します。
1 |
sudo i2cdetect -y -r 1 |
以下のように表示されればOKです。
再度サンプルコードを実行してみる
サンプルコードを実行してみます。
1 |
sudo python3 simpletest.py |
これでサーボモーターが動くことが確認できると思います。
参考記事
今回はこちらの記事の方法で解決することができました。ありがとうございます。
コメントを残す