ESP8266 - ошибка после обновления платы до 3.1.1
Я использую Ubuntu 22.04 и Arduino IDE 1.8.19 для своих проектов ESP8266.
Вчера я обновился до 3.1.1 (используя менеджер библиотек плат), и сразу после этого я получил следующее сообщение (через несколько секунд после начала компиляции):
Traceback (most recent call last):
File "/home/guy/snap/arduino/85/.arduino15/packages/esp8266/hardware/esp8266/3.1.1/tools/mkbuildoptglobals.py", line 846, in <module>
sys.exit(main())
File "/home/guy/snap/arduino/85/.arduino15/packages/esp8266/hardware/esp8266/3.1.1/tools/mkbuildoptglobals.py", line 759, in main
if time.time_ns() < os.stat(commonhfile_fqfn).st_mtime_ns:
AttributeError: module 'time' has no attribute 'time_ns'
exit status 1
Error compiling for board LOLIN(WEMOS) D1 R2 & mini.
Действия, предпринятые для поиска причины:
- Пустой скетч — происходит.
- Любая другая плата ESP8266 — встречается.
- Возврат к предыдущей версии, 3.1.0 - происходит.
- Вернуться к версии 3.0.2 — ОК!
- Проверка версии 3.1.1 на Mac, та же версия IDE — ОК!
Есть идеи, почему? Я один?
Парень
@Guy . D, 👍2
Обсуждение2 ответа
Лучший ответ:
Ошибка сообщает вам, что функция python time.time_ns() не существует. Эта функция была добавлена в библиотеку времени Python версии 3.7 Python3.
Наиболее вероятным сценарием, который я могу здесь представить, является то, что на вашей Ubuntu установлен Python 3.6 или более ранней версии, и поэтому программное обеспечение платы не находит требуемую функцию.
В зависимости от того, как настроена IDE ARDUINO, используется глобально установленный Python или специальная установка Python. Мы обсудили эти две возможности в чате и поняли, что в вашем случае snap устанавливает свою собственную зависимость от python. Я предполагаю, что версия этого питона была ниже 3.7 и поэтому плагин не смог найти нужную функцию времени.
Если бы Arduino IDE зависела от глобальной установки Python, было бы достаточно установить более новый Python (например, 3.10+) глобально.
В вашем случае (зависимость определяется привязкой) единственное решение, которое у меня есть, — установить IDE не при помощи привязки, а вручную или с помощью apt. В Интернете есть инструкции, такие как https://www. computerpost.com/how-to-install-arduino-ide-on-ubuntu-22-04-lts/.
Пожалуйста, ознакомьтесь с комментарием @userfuser (об использовании файла .AppImage) в обсуждении под вопросом.
У меня точно такие же симптомы.
После использования snap для установки или Arduino 1.8.19, я обнаружил snap core, недавно обновленный core-18 из Ubuntu 22.04. Последствия были радикальными, начиная только с Python 3.10, все почти работало, но я нашел ошибку внутри mkbuildoptglobals.py
внутри вывода Arduino IDE:
-----------------------
*** Traceback (most recent call last):
File "/home/maxiste/snap/arduino/71/.arduino15/packages/esp8266/hardware/esp8266/3.1.2/tools/mkbuildoptglobals.py", line 831, in <module>
rc = main()
File "/home/maxiste/snap/arduino/71/.arduino15/packages/esp8266/hardware/esp8266/3.1.2/tools/mkbuildoptglobals.py", line 744, in main
from time import time_ns
ImportError: cannot import name 'time_ns'
-----------------------
Добавляю несколько строк в код Python, чтобы можно было увидеть вывод. Сюрприз говорит о том, что Python 3.6, а не 3.10, поэтому mkbuildoptglobals.py
останавливается.
Вот пример стартовой строки 200:
if PYTHON_REQUIRES[0] < int(sys.version_info[0]) :
raise SystemExit(f"{__file__}\nMinimal supported version of Python is {PYTHON_REQUIRES[0]}")
elif PYTHON_REQUIRES[1] > int(sys.version_info[1]) :
raise SystemExit(f"{__file__}\nMajor version of Python required is {PYTHON_REQUIRES[0]}.{PYTHON_REQUIRES[1]}, your version {sys.version_info[0]}.{sys.version_info[1]}.\n")
else:
from sys import stdout
sys.stdout.write(f"\nArduino Board project use Python version {sys.version_info[0]}.{sys.version_info[1]}\n\n")
pass
И он также показывает мне Python 3.6 и, просматривая внутри пути snap вашего дома, вы должны найти:
/snap/gnome-3-28-1804/199/usr/bin/python3.6
/snap/gnome-3-28-1804/199/usr/share/binfmts/python3.6
/snap/gnome-3-28-1804/199/usr/share/lintian/overrides/python3.6
/snap/core18/2810/usr/bin/python3.6
/snap/core18/2810/usr/share/binfmts/python3.6
/snap/core18/2810/usr/share/lintian/overrides/python3.6
В моем случае это обновление gnome-3-28 и обновление core18 из snap, которые push и ниже версии Python для Arduino.
И что еще хуже, для всех тех, кто пробует Ubuntu 22.04, он автоматически обновляет компоненты в snap, не трогая его. У меня даже Chromium обновляется до версии автоматически и оставлена совместимость с TASMOTA и пакет для esp-s2/s3, rsp-c3 и esp32 тоже.
Чтобы помочь сдать таблетку, мне нужно изменить platform.txt
следующим хаком:
- В одной строке рецепта содержится информация об использовании Python, которую следует изменить, чтобы вернуться к точке на вашем Python3.10.
recipe.hooks.sketch.prebuild.pattern="{runtime.tools.python3.path}/python3" -I "{runtime.tools.signing}" --mode header --publickey "{build.source.path}/public.key" --out "{build.path}/core/Updater_Signing.h"
и где вы нашли
{runtime.tools.python3.path}/python3
Вы меняете это на
{runtime.tools.python3.path}/../../../../../usr/bin/python3.10
Где находится мой snap root: /snap/gnome-3-28-1804/199/usr/bin
и все исполняемые приложения из Arduino перемещены сюда.
Так что это вопрос рецепта и неправильного возврата к Ubuntu.
- Как передать переменные в пользовательские функции обратного вызова
- Несколько void loop() с ESP8266
- Мое подробное сообщение выглядит как «невозможно кэшировать встроенное ядро».
- Ошибка формата с компиляцией ESP8266
- Как читать и записывать EEPROM в ESP8266
- Как сделать выводы Tx и Rx на ESP-8266-01 в выводах GPIO?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
- Как заставить 5-вольтовое реле работать с NodeMCU
Ошибка сообщает вам, что функция python time.time_ns() не существует. Эта функция была добавлена в библиотеку времени Python с версией Python3 3.7. Наиболее вероятным сценарием, который я могу себе представить, является то, что на вашей Ubuntu установлена версия python 3.6 или ниже, и поэтому программное обеспечение платы не находит требуемую функцию. Откройте терминал и введите
python --version
илиpython3 --version
и убедитесь, что у вас установлен как минимум python V 3.7. Я бы порекомендовал установить 3.10+, чтобы иметь самую новую версию и не пропустить другие библиотеки и языковые функции., @Peter Paul Kiefer@PeterPaulKiefer Ввод
guy@linux:~$ python3 --version
возвращенПитон 3.10.6
, @Guy . DУ меня такая же проблема Убунту 22.04 IDE 1.8.19 Питон 3.10.6 Ошибка возникает после обновления платы esp8266 до 3.1.1, @Michael Tresp
Прости за мой запоздалый ответ. Вы установили Arduino IDE с оснасткой?! Возможно, у Snap есть свои зависимости от Python. У меня часто возникали такие проблемы при использовании snap вместо установки программного обеспечения с помощью apt или вручную с помощью tarball. Теперь я всегда устанавливаю Arduino с помощью архива. В Интернете есть много документов, вот один из примеров: https://linuxopsys.com/topics/install-arduino-ide-on-ubuntu-20-04., @Peter Paul Kiefer
@PeterPaulKiefer да, из Snap, @Guy . D
У меня была такая же проблема, хотя у меня был установлен python 3.8, и я также установил Arduino через Snap. После удаления установки Snap и установки с сайта arduino (файл .AppImage) проблема с time_ns исчезла. Tnx@PeterPaulKiefer. Вы превращаете свой комментарий в ответ, и я с удовольствием проголосую за него., @userfuser
@PeterPaulKiefer, пожалуйста, опубликуйте это как ответ, @Guy . D