MaixPyでboard_infoを参照しようとしてImportErrorやAttributeErrorが出た時の対処法のご紹介です。
先日、ファームウェアをカスタムビルドして、Maixduinoにロードして動作確認しました。
今日は、IO周りのスクリプトを 書いていたところ、以前のファームウェアで動いていたはずのスクリプトが、動かなくなっていました…。なぜ!?
その他のMaixPyとMaixduinoの関連記事はここ>>
board_infoのImportError
ImportErrorの原因
これは簡単、board_infoがインポートできないと起こる症状です。
まずは、import周りの構文に間違いがないか、確認してみてください。
よくあるのはスペルミスですね。VSのIntellisenseに慣れてしまっている私は、よくやります。
で、今回の場合はこれ、
from fpioa_manager import board_info
記憶が正しければ、このコードは動いてたはずなんですけど、新しいファームウェアだと”InportError”になります。前のファームウェアに戻しての確認はしてません。おそらくファームウェアのバージョンアップとともに使用が変わった模様。公式サイトのマニュアルにもこの表記はもうなかった。
ImportErrorの解決法
正しく書き直す。
from board import board_info
board_infoのAttributetError
AttributetErrorの原因
使っているデバイスのIO情報を保管している”config.json”が存在しないか、中身が間違っている場合、また参照しようとしているオブジェクト(Attribute)が存在しない場合に起こります。
例えば、以前は使えていた書き方、
board_info.D[0]
は、新しいファームウェアではサポートされていないようです。
正しくは、
board_info.PIN0
なのですが、下記のようにエラーになります。
>>> from board import board_info
[Warning] Not loaded from /flash/config.json to board_info.
>>> board_info.PIN0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: type object 'board_info' has no attribute 'PIN0'
>>>
私の場合、”config.json”がそもそも存在してませんでした。
>>> os.listdir()
['freq.conf', 'main.py']
AttributetErrorの解決法
”config_maix_***.py”を実行して、”config.json”を生成します。
config_maix_***.pyはここからダウンロードできます。
MaixPy_scripts/board at master · sipeed/MaixPy_scripts (github.com)
私はMaixPyIDEで”config_maix_duino.py”を開いて、ビルド、実行しました。
うまく実行されると、”board_info”の中身がターミナルに出力されます。
その後、もう一度”config.json”と”board_info”を確認すると?
>>> os.listdir()
['freq.conf', 'main.py', 'config.json']
>>> from board import board_info
>>> board_info.PIN0
4
>>>
うまくboard_infoでピン情報を拾えました。