JavaScriptを有効にしてください

[自作キーボード]Arduino IDEで発生したランタイムエラー対応

 ·  ☕ 3 分で読めます

概要

  • ISP1807搭載Microボードを使用してキーボードを作ろうとした
  • Arduino IDEを使用してコンパイルした時にランタイムエラーが発生
  • Pythonのバージョン関連で発生してそうで、IDEのバージョンを下げたら解消した

各種バージョン等

  • macos 12.5
  • Adafruit nRF52(ボード) 1.3.0
  • Arduino IDE 2.0.3 から 1.8.19に変更
  • Arduino IDEを初めて使用する初心者

エラー発生までにやったこと

ISP1807搭載MicroボードでBluetooth接続可能なキーボードを作成しようとして、
製品ページを参考にArduino環境構築を行なった。

  • Arduino IDE 2.0.3 をインストール(homebrewを使用)
  • IDEを使用して2種類のボードをインストール

コードについては以下のサイトを参考にさせていただき進めていた。
ISP1807 Micro Boardにキーパッドを接続してHID/BLEキーボードに

発生したエラー

Library Adafruit nRFCrypto has been declared precompiled:
Using precompiled library in /Users/keee/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/libraries/Adafruit_nRFCrypto/src/cortex-m4/fpv4-sp-d16-hard
[91803] Failed to execute script __main__
Traceback (most recent call last):
  File "nordicsemi/__main__.py", line 315, in <module>
  File "click/core.py", line 722, in __call__
  File "click/core.py", line 676, in main
  File "click/_unicodefun.py", line 118, in _verify_python3_env
RuntimeError: Click will abort further execution because Python 3 was configured to use ASCII as encoding for the environment.  Consult http://click.pocoo.org/python3/for mitigation steps.

This system lists a couple of UTF-8 supporting locales that
you can pick from.  The following suitable locales where
discovered: af_ZA.UTF-8, am_ET.UTF-8, be_BY.UTF-8, bg_BG.UTF-8, ca_ES.UTF-8, cs_CZ.UTF-8, da_DK.UTF-8, de_AT.UTF-8, de_CH.UTF-8, de_DE.UTF-8, el_GR.UTF-8, en_AU.UTF-8, en_CA.UTF-8, en_GB.UTF-8, en_IE.UTF-8, en_NZ.UTF-8, en_US.UTF-8, es_ES.UTF-8, et_EE.UTF-8, eu_ES.UTF-8, fi_FI.UTF-8, fr_BE.UTF-8, fr_CA.UTF-8, fr_CH.UTF-8, fr_FR.UTF-8, he_IL.UTF-8, hr_HR.UTF-8, hu_HU.UTF-8, hy_AM.UTF-8, is_IS.UTF-8, it_CH.UTF-8, it_IT.UTF-8, ja_JP.UTF-8, kk_KZ.UTF-8, ko_KR.UTF-8, lt_LT.UTF-8, nl_BE.UTF-8, nl_NL.UTF-8, no_NO.UTF-8, pl_PL.UTF-8, pt_BR.UTF-8, pt_PT.UTF-8, ro_RO.UTF-8, ru_RU.UTF-8, sk_SK.UTF-8, sl_SI.UTF-8, sr_YU.UTF-8, sv_SE.UTF-8, tr_TR.UTF-8, uk_UA.UTF-8, zh_CN.UTF-8, zh_HK.UTF-8, zh_TW.UTF-8

exit status 255

Compilation error: exit status 255

エラーメッセージからPythonや文字コードが関係していることはわかったが、知識ゼロなので色々調べた。

調べたこと

参考サイト

上記サイトでは開発の状況は自分とは異なるが、発生していることは同じようだった。
ざっくりと以下のような感じ。

  • localeがライブラリ(click)で想定されているものと異なっている
  • Python 3.0から3.6で発生するらしい

localeについて

dateコマンドとか、OSの言語設定とかに関係する項目。
localeコマンドで確認したら以下の状況だった。

❯ locale
LANG="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_CTYPE="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_ALL=

これを変えたら問題なさそうな気もしたが、影響範囲が大きそうなので他の方法を探した。

Pythonについて

自分でPythonを入れて使用しているわけではないので、ライブラリやIDEに含まれている?
この辺りは知識不足なので踏み込むのは難しそう。
以下の記事ではパッケージ内の記述を変更して、使用するPythonのバージョンを変更されていた。
https://zenn.dev/takiser/articles/ff009862ddf74d
どこで使用されているかもわからなかったので、取り合えず以下を実行してみたらいくつか見つかった。

❯ grep -r 'python'  ~/Library/Arduino15/packages/adafruit/hardware/nrf52

これだけみてもどこをさわれば良いかわからないし、触ったことで別のエラーが発生しても嫌なので別の方法を探した。

最終的にどうしたか

https://github.com/arduino/arduino-ide/issues/1513#issuecomment-1336129379

上記コメントでIDEのバージョンが過去のものだと発生しないという記載があったので試した。
最初にインストールした時はhomebrewを使用したが、過去バージョンを入れるには手間がかかりそうだったので公式サイトからmac用のものをダウンロードして入れた。
https://www.arduino.cc/en/software
(Legacy IDE (1.8.X)という記載があったのでそれを使用)

1.8.19で同じように環境構築して、同じコードをコンパイルすると正常終了した。
原因の詳細についてはわからなかったが、IDEのバージョン差により解消する問題もあると学んだ。

その他

  • バージョンの違うIDEを入れるにあたって、管理方法にどのようなものがあるかは別途調べる必要があると思った。
    (rbenvみたいな管理ツールあったら嬉しい)
  • 今回試した部分はキーボード作成と特に関連ないコードだったので、今後進めていくと他にもエラー出るかもしれない。
  • コンパイル時に発生しているけど、コンパイルエラーではなくランタイムエラーなのはなんで?という疑問を持ったが、制作を進めていきたいのでこれ以上は深掘りしない。

書いた人
keee
Webエンジニア

目次